Решение систем линейных уравнений методом Холецкого - 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). Там все формулы, и весь пример описан, помогите мне пожалуйста доделать программу. Вот начало моей программы.
Листинг программы
  1. DIM a(3, 3)
  2. DATA 6.25,-1,0.5,-1,5,2.12,0.5,2.12,3.6
  3. DIM b(3)
  4. DATA 7.5,-8.68,-0.24
  5. FOR i = 1 TO 3
  6. FOR j = 1 TO 3
  7. READ a(i, j)
  8. NEXT j, i
  9. PRINT "A:"
  10. FOR i = 1 TO 3
  11. FOR j = 1 TO 3
  12. PRINT a(i, j);
  13. NEXT j
  14. PRINT
  15. NEXT i
  16. FOR i = 1 TO 3
  17. READ b(i)
  18. NEXT i
  19. ...

Решение задачи: «Решение систем линейных уравнений методом Холецкого»

textual
Листинг программы
  1. CLS
  2.  
  3. m = 3
  4. DIM a(1 TO m, 1 TO m)
  5. DIM b(1 TO m)
  6. DIM y(1 TO m)
  7. DIM x(1 TO m)
  8. DIM l(1 TO m, 1 TO m)
  9.  
  10. DATA  6.25, -1,    0.5
  11. DATA -1,     5,    2.12
  12. DATA  0.5,   2.12, 3.6
  13.  
  14. DATA  7.5, -8.68, -0.24
  15.  
  16. FOR i = 1 TO m
  17. FOR j = 1 TO m
  18.    READ a(i, j)
  19.    PRINT USING "###.###"; a(i, j);
  20. NEXT j: PRINT
  21. NEXT i
  22.  
  23. FOR i = 1 TO m
  24.    READ b(i)
  25.    LOCATE i, 24
  26.    PRINT USING "###.###"; b(i)
  27. NEXT i
  28.  
  29.  
  30. FOR k = 1 TO m
  31.    s = a(k, k)
  32.    
  33.    FOR j = 1 TO k - 1
  34.       s = s - l(k, j) ^ 2
  35.    NEXT j
  36.  
  37.    l(k, k) = SQR(s)
  38.    IF k = m THEN EXIT FOR
  39.  
  40.    FOR i = k + 1 TO 3
  41.       s = a(i, k)
  42.       FOR j = 1 TO 3
  43.          s = s - l(i, j) * l(k, j)
  44.       NEXT j
  45.       l(i, k) = s / l(k, k)
  46.    NEXT i
  47. NEXT k
  48.  
  49. LOCATE 5, 1
  50.  
  51. FOR i = 1 TO m
  52. FOR j = 1 TO m
  53.    PRINT USING "###.###"; l(i, j);
  54. NEXT j: PRINT
  55. NEXT i
  56.  
  57. FOR i = 1 TO m
  58.    s = b(i)
  59.    FOR j = 1 TO i - 1
  60.       s = s - l(i, j) * y(j)
  61.    NEXT j
  62.    y(i) = s / l(i, i)
  63. NEXT i
  64.  
  65. FOR i = m TO 1 STEP -1
  66.    s = y(i)
  67.    FOR j = m TO i + 1 STEP -1
  68.       s = s - l(j, i) * x(j)
  69.    NEXT j
  70.    x(i) = s / l(i, i)
  71. NEXT i
  72. PRINT
  73.  
  74. FOR i = 1 TO 3
  75.    PRINT "x("; i; ")="; USING "###.###"; x(i)
  76. NEXT i
  77.  
  78. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы