Тема 2. Численные методы решения системных линейных алгебраических уравнений
Постановка задачи:
Дана система. Требуется ее решить методом обратной матрицы, методом Крамера, методом Гаусса, методом простой итерации, методом Гаусса-Зейделя.
2,3х1+3,4х3+0,8х3=-0,8
2,4х1-1,1х2+3,8х3=1,8
6,2х1-5,4х2-0,5х3=0,52
Решение:
2,3 |
3,4 |
0,8 |
|
-0,8 |
2,4 |
-1,1 |
3,8 |
|
1,8 |
6,2 |
-5,4 |
-0,5 |
|
0,52 |
-
Метод обратной матрицы
Обратная матрица
0,164953 |
-0,02051 |
0,108038 |
|
0,193842 |
-0,04783 |
-0,05339 |
|
-0,04807 |
0,262266 |
-0,08369 |
-
Метод Крамера
|
определитель |
127,733 |
|
-0,8 |
3,4 |
0,8 |
|
1,8 |
-1,1 |
3,8 |
|
0,52 |
-5,4 |
-0,5 |
|
|
определитель |
-14,396 |
|
2,3 |
-0,8 |
0,8 |
|
2,4 |
1,8 |
3,8 |
|
6,2 |
0,52 |
-0,5 |
|
|
определитель |
-34,3524 |
|
2,3 |
3,4 |
-0,8 |
|
2,4 |
-1,1 |
1,8 |
|
6,2 |
-5,4 |
0,52 |
|
|
определитель |
59,6532 |
-
Метод Гаусса
Sub metodo_gauss()
n = 3
Dim a(1 To 3, 1 To 3)
Dim b(1 To 3)
Dim x(1 To 3)
For i = 1 To 3
For j = 1 To 3
a(i, j) = Worksheets("Лист1").Cells(i, j).Value
Next j
Next i
For i = 1 To 3
b(i) = Worksheets("Лист1").Cells(i, 5).Value
Next i
For k = 1 To n - 1
For i = k + 1 To n
m = a(i, k) / a(k, k)
For j = k + 1 To n
a(i, j) = a(i, j) - m * a(k, j)
Next j
b(i) = b(i) - m * b(k)
Next i
Next k
x(n) = b(n) / a(n, n)
For i = n - 1 To 1 Step -1
s = 0
For j = i + 1 To n
s = s + a(i, j) * x(j)
Next j
x(i) = (b(i) - s) / a(i, i)
Next i
For i = 1 To 3
With Worksheets("Лист1")
.Range("K1").Value = x(1)
.Range("K2").Value = x(2)
.Range("K3").Value = x(3)
End With
Next i
End Sub
-
Метод простой итерации
Расчетная формула
Условие сходимости
6,2 |
-5,4 |
-0,5 |
|
0,52 |
2,3 |
3,4 |
0,8 |
|
-0,8 |
2,4 |
-1,1 |
3,8 |
|
1,8 |
Sub metod_prostoi_iteratzyi()
n = 3
e = 0.0001
Dim a(1 To 3, 1 To 3)
Dim b(1 To 3)
Dim x(1 To 3)
For i = 1 To 3
For j = 1 To 3
a(i, j) = Worksheets("Лист2").Cells(i, j).Value
Next j
Next i
For i = 1 To 3
b(i) = Worksheets("Лист2").Cells(i, 5).Value
Next i
x10 = 0
x20 = 0
x30 = 0
Do
x1 = (b(1) - a(1, 2) * x20 - a(1, 3) * x30) / a(1, 1)
x2 = (b(2) - a(2, 1) * x10 - a(2, 3) * x30) / a(2, 2)
x3 = (b(3) - a(3, 1) * x10 - a(3, 2) * x20) / a(3, 3)
c = Abs(x1 - x10) + Abs(x2 - x20) + Abs(x3 - x30)
x10 = x1
x20 = x2
x30 = x3
k = k + 1
Loop While c > e
With Worksheets("Лист1")
.Range("l1").Value = x1
.Range("l2").Value = x2
.Range("l3").Value = x3
.Range("l5").Value = k
End With
End Sub
-
Метод Гаусса-Зейделя
Расчетная формула
Условие сходимости
6,2 |
-5,4 |
-0,5 |
|
0,52 |
2,3 |
3,4 |
0,8 |
|
-0,8 |
2,4 |
-1,1 |
3,8 |
|
1,8 |
Sub metod_gaussa_zeidelya()
n = 3
e = 0.0001
Dim a(1 To 3, 1 To 3)
Dim b(1 To 3)
Dim x(1 To 3)
For i = 1 To 3
For j = 1 To 3
a(i, j) = Worksheets("Лист2").Cells(i, j).Value
Next j
Next i
For i = 1 To 3
b(i) = Worksheets("Лист2").Cells(i, 5).Value
Next i
x10 = 0
x20 = 0
x30 = 0
Do
x1 = (b(1) - a(1, 2) * x20 - a(1, 3) * x30) / a(1, 1)
x2 = (b(2) - a(2, 1) * x1 - a(2, 3) * x30) / a(2, 2)
x3 = (b(3) - a(3, 1) * x1 - a(3, 2) * x2) / a(3, 3)
c = Abs(x1 - x10) + Abs(x2 - x20) + Abs(x3 - x30)
x10 = x1
x20 = x2
x30 = x3
k = k + 1
Loop While c > e
With Worksheets("Лист1")
.Range("M1").Value = x1
.Range("M2").Value = x2
.Range("M3").Value = x3
.Range("M5").Value = k
End With
End Sub
Результаты:
х1 |
-0,1127 |
-0,1127 |
-0,1127 |
-0,11269 |
-0,11269 |
х2 |
-0,26894 |
-0,26894 |
-0,26894 |
-0,26895 |
-0,26895 |
х3 |
0,467015 |
0,467015 |
0,467015 |
0,467 |
0,467 |
|
м. обр. м. |
м. крам. |
м. гаусса |
м. пр. ит. |
м. Г.-З. |
|
|
|
|
61 |
61 |
Вывод:
Существуют 2 группы решения СЛАУ: прямые(точные) и итерационные(приближенные).
-
Прямые методы - по существу аналитические методы. Это метод Крамера, метод Гаусса, метод обратной матрицы. Их хорошо использовать, когда число уравнений невелико, позволяют получить абсолютно точный результат. К недостаткам относятся необходимость хранения в оперативной памяти всю матрицу коэффициентов, накапливание погрешности в следствие округления арифметических и других действий над числами. Не учитывается также структура матрицы, многие элементы которой могут быть равны нулю.
-
Итерационные методы – методы последовательных приближений. К ним относятся метод простой итерации и метод Гаусса-Зейделя. Важной чертой этих методов является самоисправляемость, простота, реализации. В случае сходящегося итерационного процесса ошибка в каком-то приближении исправляется в последующих вычислениях, и такое исправление требует нескольких лишних шагов единообразных вычислений.
Для данной системы одинаковое количество итераций требуется и для метода простой итерации, и для метода Гаусса-Зейделя.