Решение системы линейных алгебраических уравнений методом итераций

Страницы работы

Содержание работы

ФИО, группа, дата

Задание №2

Решение СЛАУ методом итераций

Задание: Методом итераций решить систему линейных алгебраических уравнений

1  +   х2  –   х3 =   4 х1  + 5х2  –   х3 =   8 х1  + 2х2  + 4х3 = 17 

Результат получить с погрешностью å = 0.0001.

Создать  приложение,  которое может  решать  подобные  системы.  Алгоритм  решения                 можно                             посмотреть        в лекциях, если они у вас есть ;-))).

Примерный вид приложения показан ниже

На форме разместить всего два объекта: командную кнопку «решить СЛАУ» и командную кнопку «выход».

В таблице №1 перечислены объекты, их свойства и значения, которые устанавливаются первоначально.

Таблица №1


№       Объект

1         Форма (Form)

2         Кнопка (CommandButton)

3         Кнопка (CommandButton)


Свойство

Name

Caption

Name

Caption

Name

Caption


Значение

frmMiSlau решение СЛАУ методом bnthfwbq

btnCalc решить СЛАУ

btnStop выход


Перейдя    в   окно    кодов    с   кнопкой «решить       СЛАУ» свяжем   процедуру: 

Private Sub btnCalc_Click()

' решение     СЛАУ  n-го     порядка     методом    итераций

' n- порядок       системы

' открываем      файлы   для    ввода     и   вывода

Open "d:\vb\vb\vvIn.txt" For Input As #1

Open "d:\vb\vb\vyvOut.txt" For Output As #2

' считываем      данные    из    файла    и   объявляем     массивы

Input #1, n, eps

ReDim a(n, n), b(n)

ReDim xk(n), x(n)

' Расширенная       матрица     системы (матрица       системы

' вместе      с   правой     частью) задается         построчно      в   файле    данных.

' !!!Матрица      должна    быть    с   диагональным      преобладанием!!!

For i = 1 To n

For j = 1 To n

Input #1, a(i, j)

Next j



Input #1, b(i)

Next i

' преобразование         матрицы    к   виду    удобному    для    итераций

For i = 1 To n

dig = a(i, i)

b(i) = b(i) / dig

' сразу      задаем     нулевое     приближение

x(i) = b(i)

For j = 1 To n

If i = j Then

a(i, i) = 0

Else

a(i, j) = -a(i, j) / dig

End If

Next j

Next i

' вывод     нулевого      приближения     на   форму   и   в   файл

For i = 1 To n

Print "x("; i; ") = "; Format(x(i), "##.####"); "  ";

Print #2, "x("; i; ") = "; Format(x(i), "##.####"); "  ";

Next i

Print

Print #2,

' вычисляем 1-ое       приближение

Call miSLAU(a(), b(), x(), xk(), n)

' вывод     очередного      решения    на   форму   и   в   файл

For i = 1 To n

Print "x("; i; ") = "; Format(xk(i), "##.####"); "  ";

Print #2, "x("; i; ") = "; Format(xk(i), "##.####"); "  ";

Next i

Print

Print #2,

' находим     наибольшее     расстояние       между   приближениями

en = Abs(xk(1) - x(1))

For i = 2 To n

t = Abs(xk(i) - x(i))

If t > en Then en = t

Next i

' счетчик       итераций

k = 1

' собственно        итерационный      процесс

Do While en > eps

' запоминаем       предыдущее    решение

For i = 1 To n

x(i) = xk(i)

Next i

' вычисляем      новое    приближение

Call miSLAU(a(), b(), x(), xk(), n)

' вывод     очередного      решения    на   форму   и   в   файл

For i = 1 To n

Print "x("; i; ") = "; Format(x(i), "##.####"); "  ";

Print #2, "x("; i; ") = "; Format(x(i), "##.####"); "  ";

Next i

Print

Print #2,

' находим      наибольшее     расстояние       между   приближениями

en = Abs(xk(1) - x(1))

For i = 2 To n

t = Abs(xk(i) - x(i))


If t > en Then en = t

Next i

k = k + 1

If k > 32 Then

Print "Требуемая        точность      не   достигнута."

Print "Прошло 32 итерации "

Exit Do

End If

Loop

' вывод     окончательного        решения    на   форму   и   в   файл

Print

Print #2,

Print "Решение      системы"

Print #2, "Решение       системы"

For i = 1 To n

xiOut = Format(x(i), "##.#####")

Print "x("; i; ") = "; xiOut

Print #2, "x("; i; ") = "; xiOut

Next i

Close

End Sub

С кнопкой «Выход» свяжем процедуру

Private Sub btnStop_Click()

End

End Sub

В области General напишем подпрограмму

' метод     итераций      для    СЛАУ

Sub miSLAU(a(), b(), x(), xk(), n)

For i = 1 To n

s = 0

For j = 1 To n

s = s + a(i, j) * x(j)

Next j

xk(i) = b(i) + s

Next i

End Sub

Сохранить форму у себя на диске  N   папке  n:\numMtd\miSlau\  в файле под именем  miSlau.frm   и проект под именем proMiSlau.vbp

Прежде чем запускать проект на исполнение,  Блокнотом создать файл исходных данных

3  0.0001

5  1  -1  4

1  5  -1  8

1  2   4  17  и сохранить его в папке n:\numMtd\miSlau\ под именем vvIn.txt.

В  MS Word’e  написать     шапку,  задание,  собрать    все  процедуры,  файл   исходных   данных   и                                            файл                                      результатов расчета

Решение    системы

x( 1 ) = ,99995

x( 2 ) = 1,99995

x( 3 ) = 3,00004  и вывести все это на печать.

Похожие материалы

Информация о работе

Тип:
Контрольные работы
Размер файла:
124 Kb
Скачали:
0