Решение систем линейных уравнений методом Холецкого - 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

Объяснение кода листинга программы

Код решает систему линейных уравнений методом Холецкого. Вот список действий, которые он выполняет:

  1. Задаёт значение переменной m, которая определяет размер матрицы коэффициентов a.
  2. Задаёт матрицу коэффициентов a и вектор правой части b с помощью цикла FOR и функции READ.
  3. Выводит матрицу коэффициентов a и вектор правой части b с помощью функции PRINT.
  4. Инициализирует диагональную матрицу l единицами.
  5. Начинает цикл решения от 1 до m:
    • Вычисляет значение s на текущей итерации, как сумму квадратов элементов строки в матрице l.
    • Если текущая итерация меньше m, то обновляет значение s вычитая произведение элементов строки в матрице l и соответствующих элементов из предыдущих итераций.
    • Если текущая итерация равна m, то обновляет значение s вычитая произведение элементов строки в матрице l и соответствующих элементов из предыдущих итераций, и делит его на значение l(k, k).
    • Если текущая итерация больше m, то обновляет значение s вычитая произведение элементов строки в матрице l и соответствующих элементов из предыдущих итераций, и делит его на значение l(k, k).
  6. Выводит диагональную матрицу l с помощью цикла FOR и функции PRINT.
  7. Начинает цикл, который присваивает каждому элементу вектора y значение s, вычитая произведение элементов строки в матрице l и соответствующих элементов из предыдущих итераций.
  8. Начинает цикл, который присваивает каждому элементу вектора x значение s, вычитая произведение элементов строки в матрице l и соответствующих элементов из предыдущих итераций.
  9. Выводит значения вектора x с помощью цикла FOR и функции PRINT.
  10. Код заканчивается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы