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

Листинг программ

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.

Результаты

x1

2,064388

2,064388

2,064388

2,064429

2,064371

x2

-0,60251

-0,60251

-0,60251

-0,60252

-0,60251

x3

-0,82641

-0,82641

-0,82641

-0,82638

-0,82642

Методы

Обратной матрицы

Крамера

Гаусса

Простой итерации

Гаусса-Зейделя

255

21

Выводы

Системы линейных алгебраических уравнений можно решать как с помощью прямых, так и итерационных методов. Для систем уравнений средней размерности чаще используют прямые методы.

Итерационные методы применяют главным образом для решения задач большой размерности, когда использование прямых методов невозможно из-за ограничений в доступной оперативной памяти ЭВМ или из-за необходимости выполнения чрезмерно большого числа арифметических операций.

В данной работе мы рассмотрели 5 методов решения линейных алгебраических уравнений: метод обратной матрицы, Крамера, Гаусса, простой итерации и Гаусса-Зейделя. Первые 3 метода составляют группу прямых методов. Это аналитические методы, в них отсутствует погрешность метода, но погрешность вычислений неизбежна. Тем не менее, методы обратной матрицы и Крамера достаточно просты в алгоритме, тем более нами было найдено решение трехмерной матрицы (небольшая размерность), значения неизвестных сошлись. Что касается метода Гаусса, алгоритм данного метода достаточно громоздкий. Каждая следующая формула вычисления коэффициентов при преобразовании матрицы содержит результат предыдущей формулы, а значит и ее ошибку при вычислении. Наибольшее влияние на эту ошибку оказывает величина знаменателя (коэффициенты главной диагонали) – она не должна быть равна 0 и малой по абсолютной величине. В нашем случае таких предпосылок нет, метод Гаусса был осуществлен с выбором главного элемента, что дает малые невязки.

Итерационные методы простых итераций и Гаусса-Зейделя – схожи (одинаковы условия). Но погрешность метода Гаусса-Зейделя задается, погрешность вычислений не накапливается. Т.к. в формулах присутствуют величины из исходных уравнений. Недостатком метода по сравнению с прямыми методами является наличие итераций. Чем больше число итераций, тем больше требуется времени. Для метода простых итераций число итераций составляет 255, что на 234 больше чем число итераций для метода Гаусса-Зейделя, следовательно, применение данного метода для решения нашего уравнения не выгодно.

Нужно обратить внимание, что наша матрица имеет небольшую размерность, то есть для нахождения неизвестных в нашем случае можно воспользоваться прямыми методами, в частности методами обратной матрицы или Крамера. Алгоритм данных методов достаточно прост, не нужен выбор главного элемента, занимает меньше времени для решения.