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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

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

Задание №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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.