Выбор главного элемента и перестановка уравнений
Определение № строки, в кот. находится макс.коэфф-т
|
g=k |
|
FOR i=k+1 TO n |
|
Если |aik|>|agk|, тоg=i |
|
FOR j=k TO n |
|
z=agj;agj=akj;akj=z |
|
z=bg;bg=bk;bk=z |
Перестановка левых частей уравнений
Перестановка правых частей уравнений
Итерационные методы
Для сходимости итерационного процесса достаточно, чтобы модули диагональных элементов были > или = суммы модулей не диагональных элементов:
|
3,7 |
-2,5 |
3,2 |
|
6,5 |
|
0,5 |
1,7 |
0,3 |
|
-0,24 |
|
1,6 |
1,5 |
-2,3 |
|
4,3 |
Метод простых итераций:
А) Выразим х1, х2, х3из уравнений главного определителя, тогда получим:
x1=(b1-a12x2-a13x3)/a11
x2=(b2-a21x1-a23x3)/a22
x3=(b3-a31x1-a32x2)/a33
Б) Зададим начальное (нулевое) приближениеx1(0),x2(0),x3(0) . Подставляя их, получаем новое приближение.
В)Обозначимk-номер итерации, тогда дляnуравнений итерационные формулы можно записать так:
xi(k)=
(k-1))
Итерации проводятся до тех пор, пока не будет выполнено условие
|xi(k)-xi(k-1)|<e,i=1,2,…n.
Если условие не выполняется, итерации повторяются, приняв xi(k-1)=xi(k)
Метод Гаусса-Зейделя:
Этот метод представляет собой модификацию метода простых итераций, когда на k-той итерации приj<ixi уже вычислено на этой итерации, а расчетную формулу можно записать так:
xi(k)=
(k)-
(k-1))
Итерационный процесс продолжается до тех пор, пока не будет выполнено условие
|xi(k)-xi(k-1)|<e,i=1,2,…n.
Если условие не выполняется, итерации повторяются, приняв xi(k-1)=xi(k)
Алгоритм метода Гаусса-Зейделя
|
Ввод n, e, a, b, x |
|
Начало цикла |
|
FOR i=1 TO n |
|
FOR j=1 TO n |
|
S= |
|
Xk=(bi-s)/aii |
|
S1= |
|
Xi=xk |
|
Конец цикла, по условию s1<e |
|
Печать xi |



n-количество уравнений;e-точность;a(n,n)-массив коэффициентов;b(n)-массив свободных членов;x(n)-массив решения. Вводится начальное приближениеx(n).
Далее переходим в редактор VisualBasic(Сервис – Макрос – Редактор Visual Basic,Вставка – Модуль) и набираем программы по приведенным в лекциях алгоритмам[1].
Листинг программ
Sub metod_g()
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("Лист2").Cells(i, j).Value
Next j
Next i
For i = 1 To 3
b(i) = Worksheets("Лист2").Cells(i, 5).Value
Next i
For k = 1 To n - 1
g = k
For i = k + 1 To n
If Abs(a(i, k)) > Abs(a(g, k)) Then g = i
Next i
For j = k To n
z = a(g, j): a(g, j) = a(k, j): a(k, j) = z
Next j
z = b(g): b(g) = b(k): b(k) = z
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
Worksheets("Лист2").Cells(i, 9).Value = x(i)
Next i
End Sub
Sub MPI_SLAY()
n = 3
e = 0.0001
Dim a(1 To 3, 1 To 3)
Dim b(1 To 3)
For i = 1 To 3
For j = 1 To 3
a(i, j) = Worksheets("Лист3").Cells(i, j).Value
Next j: Next i
For i = 1 To 3
b(i) = Worksheets("Лист3").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("Лист2")
.Range("J1").Value = x1
.Range("J2").Value = x2
.Range("J3").Value = x3
.Range("J5").Value = k
End With
End Sub
Sub GausZeid()
n = 3
e = 0.0001
Dim a(1 To 3, 1 To 3)
Dim b(1 To 3)
For i = 1 To 3
For j = 1 To 3
a(i, j) = Worksheets("Лист3").Cells(i, j).Value
b(i) = Worksheets("Лист3").Cells(i, 5).Value
Next j
Next i
x10 = 0: x20 = 0: x30 = 0
k = 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("Лист2")
.Range("K1").Value = x1
Range("K2").Value = x2
.Range("K3").Value = x3
.Range("K5").Value = k
End With
End Sub
Для запуска
программ нажать на кнопку или на Run.
Полученный результат находится на Листе 2.




