Решение систем линейных уравнений методом Холецкого - 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). Там все формулы, и весь пример описан, помогите мне пожалуйста доделать программу.
Вот начало моей программы.
Листинг программы
- DIM a(3, 3)
- DATA 6.25,-1,0.5,-1,5,2.12,0.5,2.12,3.6
- DIM b(3)
- DATA 7.5,-8.68,-0.24
- FOR i = 1 TO 3
- FOR j = 1 TO 3
- READ a(i, j)
- NEXT j, i
- PRINT "A:"
- FOR i = 1 TO 3
- FOR j = 1 TO 3
- PRINT a(i, j);
- NEXT j
- NEXT i
- FOR i = 1 TO 3
- READ b(i)
- NEXT i
- ...
Решение задачи: «Решение систем линейных уравнений методом Холецкого»
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
- 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
. - Код заканчивается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д