
МетодГаусса-Зейделя
Метод
Гаусса-Зейделя является аналогом метода
простой итерации. Здесь _ итераций при
j<i
и
уже вычислена на этой итерации.
Условие сходимости:
Расчетная формула:
Программа метода Гаусса-Зейделя
SubГау_Зейд()
k = Val(InputBox("Введите число уравнений", "Исходные данные"))
Dim a(4, 4)
i1 = 2
For i = 1 To 4
For j = 1 To 4
a(i, j) = Worksheets("Слау").Cells(i1, j).Value
Next j
i1 = i1 + 1
Next i
Dim b(4)
i1 = 2
For i = 1 To 4
b(i) = Worksheets("Слау").Cells(i1, 7).Value
i1 = i1 + 1
Next i
e = 0.001
n = 0
x10 = 0
x20 = 0
x30 = 0
x40 = 0
Do
x1 = (b(1) - a(1, 2) * x20 - a(1, 3) * x30 - a(1, 4) * x40) / a(1, 1)
x2 = (b(2) - a(2, 1) * x1 - a(2, 3) * x30 - a(2, 4) * x40) / a(2, 2)
x3 = (b(3) - a(3, 1) * x1 - a(3, 2) * x2 - a(3, 4) * x40) / a(3, 3)
x4 = (b(4) - a(4, 1) * x1 - a(4, 2) * x2 - a(4, 3) * x3) / a(4, 4)
c = Abs(x1 - x10) + Abs(x2 - x20) + Abs(x3 - x30) + Abs(x4 - x40)
x10 = x1
x20 = x2
x30 = x3
x40 = x4
n = n + 1
Loop While c > e
Worksheets("Слау").Range("J6").Value = x1
Worksheets("Слау").Range("K6").Value = x2
Worksheets("Слау").Range("L6").Value = x3
Worksheets("Слау").Range("M6").Value = x4
Worksheets("Слау").Range("n6").Value = n
EndSub
Сравнение методов
|
x1 |
x2 |
x3 |
x4 |
n |
Метод обратной матрицы |
0,071934 |
1,227264 |
-0,329 |
-1,45053 |
|
Метод Крамера |
0,071934 |
1,227264 |
-0,329 |
-1,45053 |
|
Метод Гауса |
0,071934 |
1,227264 |
-0,329 |
-1,45053 |
|
Метод протой итерации |
0,071899 |
1,22725 |
-0,32906 |
-1,45062 |
13 |
Метод Гауса-Зейделя |
0,071914 |
1,227253 |
-0,32898 |
-1,45055 |
7 |
Если рассматривать выше приведенные точные методы на сложность, то они достаточно просты, кроме метода Гаусса. Но все же действия в методе обратной матрицы действия меньше чем у метода Крамера. Программа метода гаусса слишком длинная и сложная. Если же сравнивать итерационные формулы, то они похожи друг с другом. Отличие только в расчетной формуле. И ещё число итераций у метода Гаусса-Зейделя меньше чем у метода простой итераций.
Тема №1 Численные решения систем нелинейных уравнений (СНУ)
Задача:
Дана функция
Найти корни с точностью e=0,001?
Решение:
Метод простой итераций
В отличии численного решения СЛАУ в данном случае не существует прямые методы решения систем нелинейных уравнений. Но для СНУ состоящий из двух уравнений можно выразить одно неизвестную через другое, и таким образом свести систему к решению уравнения с одним неизвестным.
Привели систему к виду для решений итераций:
Программа:
Sub MPI_CNY()
x10 = 0
x20 = 0
e = 0.001
n = 0
Do
x2 = Sin(x1 + 1) - 1.2
x1 = (2 - Cos(x2)) / 2
S = Abs(x1 - x10) + Abs(x2 - x20)
x10 = x1
x20 = x2
n = n + 1
Loop While c > e
Worksheets("СНУ").Range("B2").Value = x1
Worksheets("СНУ").Range("C2").Value = x2
Worksheets("СНУ").Range("D2").Value = n
EndSub