Решение систем линейных уравнений методом Холецкого - QBasic
Формулировка задачи:
Здравствуйте! Помогите пожалуйста с методом Холецкого. Мне нужно написать программу для решения систем линейных уравнений.
Вот моя система:
6.25x1 - x2 + 0.5x3 = 7.5
-x1 + 5x2 + 2.12x3 = -8.68
0.5x1 + 2.12x2 + 3.6x3 = -0.24
Программу я начала писать, но она пока только выдает две матрицы, а дальше я не знаю что делать. Я принцип поняла этого метода,но не знаю как в программе это написать.
http://info.alnam.ru/book_clm.php?id=46
Вот с этого сайта я взяла пример(начиная с параграфа 5.8). Там все формулы, и весь пример описан, помогите мне пожалуйста доделать программу.
Вот начало моей программы.
Решение задачи: «Решение систем линейных уравнений методом Холецкого»
textual
Листинг программы
CLS m = 3 DIM a(1 TO m, 1 TO m) DIM b(1 TO m) DIM y(1 TO m) DIM x(1 TO m) DIM l(1 TO m, 1 TO m) DATA 6.25, -1, 0.5 DATA -1, 5, 2.12 DATA 0.5, 2.12, 3.6 DATA 7.5, -8.68, -0.24 FOR i = 1 TO m FOR j = 1 TO m READ a(i, j) PRINT USING "###.###"; a(i, j); NEXT j: PRINT NEXT i FOR i = 1 TO m READ b(i) LOCATE i, 24 PRINT USING "###.###"; b(i) NEXT i FOR k = 1 TO m s = a(k, k) FOR j = 1 TO k - 1 s = s - l(k, j) ^ 2 NEXT j l(k, k) = SQR(s) IF k = m THEN EXIT FOR FOR i = k + 1 TO 3 s = a(i, k) FOR j = 1 TO 3 s = s - l(i, j) * l(k, j) NEXT j l(i, k) = s / l(k, k) NEXT i NEXT k LOCATE 5, 1 FOR i = 1 TO m FOR j = 1 TO m PRINT USING "###.###"; l(i, j); NEXT j: PRINT NEXT i FOR i = 1 TO m s = b(i) FOR j = 1 TO i - 1 s = s - l(i, j) * y(j) NEXT j y(i) = s / l(i, i) NEXT i FOR i = m TO 1 STEP -1 s = y(i) FOR j = m TO i + 1 STEP -1 s = s - l(j, i) * x(j) NEXT j x(i) = s / l(i, i) NEXT i PRINT FOR i = 1 TO 3 PRINT "x("; i; ")="; USING "###.###"; x(i) NEXT i END
Объяснение кода листинга программы
Код решает систему линейных уравнений методом Холецкого. Вот список действий, которые он выполняет:
- Задаёт значение переменной
m
, которая определяет размер матрицы коэффициентовa
. - Задаёт матрицу коэффициентов
a
и вектор правой частиb
с помощью циклаFOR
и функцииREAD
. - Выводит матрицу коэффициентов
a
и вектор правой частиb
с помощью функцииPRINT
. - Инициализирует диагональную матрицу
l
единицами. - Начинает цикл решения от 1 до
m
:- Вычисляет значение
s
на текущей итерации, как сумму квадратов элементов строки в матрицеl
. - Если текущая итерация меньше
m
, то обновляет значениеs
вычитая произведение элементов строки в матрицеl
и соответствующих элементов из предыдущих итераций. - Если текущая итерация равна
m
, то обновляет значениеs
вычитая произведение элементов строки в матрицеl
и соответствующих элементов из предыдущих итераций, и делит его на значениеl(k, k)
. - Если текущая итерация больше
m
, то обновляет значениеs
вычитая произведение элементов строки в матрицеl
и соответствующих элементов из предыдущих итераций, и делит его на значениеl(k, k)
.
- Вычисляет значение
- Выводит диагональную матрицу
l
с помощью циклаFOR
и функцииPRINT
. - Начинает цикл, который присваивает каждому элементу вектора
y
значениеs
, вычитая произведение элементов строки в матрицеl
и соответствующих элементов из предыдущих итераций. - Начинает цикл, который присваивает каждому элементу вектора
x
значениеs
, вычитая произведение элементов строки в матрицеl
и соответствующих элементов из предыдущих итераций. - Выводит значения вектора
x
с помощью циклаFOR
и функцииPRINT
. - Код заканчивается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д