Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет_Тема_2.docx
Скачиваний:
28
Добавлен:
12.03.2015
Размер:
47 Кб
Скачать
☆

Выбор главного элемента и перестановка уравнений

Определение № строки, в кот. находится макс.коэфф-т

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. Метод простых итераций:

А) Выразим х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)

  1. Метод Гаусса-Зейделя:

Этот метод представляет собой модификацию метода простых итераций, когда на 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.