Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
43
Добавлен:
02.05.2014
Размер:
176.13 Кб
Скачать

Министерство образования и науки Российской Федерации

Уфимский Государственный Авиационный Технический Университет

Кафедра информатики

Пояснительная записка

к курсовой работе

«Решение систем линейных уравнений»

Тема 2, Вариант 7

Выполнила:

студентка гр. СПБ

Проверил:

Белорецк 2008

Содержание:

1.Задание

2. Введение

3. Теория

4. Блок-схем метода Гаусса

5. Описание программы

7. Формы

8. Код программы

9. Заключение

10. Список использованной литературы

Введение

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

Программа выполнена в Visual Basic.

В пояснительной записке объясняется метод решения (а именно метод Гаусса), показана схеме программы, рассказывается каким образом действует программа, представлены графические изображения различных компонентов Visual Basicа, а так же код самой программы.

Теория

Метод Гаусса

С помощью этого метода решают неоднородную систему n линейных алгебраических уравнений с n неизвестными:

a11x1 + a12x2 + ... +a1n xn = a1n+1

a21 x1 + a22 x2 + ... +a2n xn = a2n+1

....

an1 x1 + an2 x2 + ... +ann xn = ann+1

Вначале находим отличный от нуля коэффициент при x1 . Соответствующее уравнение переставляем с первым (если это необходимо!!!). Получаем систему с a11 отличным от нуля. Разделив коэффициенты этого уравнения на a11 , получим:

x1 + b12 x2 + ... + b1n xn = b1n+1

При помощи этого уравнения исключаем x1 из исходной системы:

a (1)22 x2 + a (1)23 x3 + ... + a (1)2n xn = a (1)2n+1

....

a (1)n2 x2 + a (1)n3 x3 + ... + a (1)nn xn = a (1)nn+1

где

a (1)ij = aij - ai1 b1j , i,j= 2...n

и Т.Д.

Полученная система содержит n-1 уравнение. Применяем описанную выше процедуру к этой системе. Операции повторяем требуемое число раз, пока не приведем систему к треугольному виду:

x1 + с12 x2 + ... + с1n xn = с1n+1

x2 + ... + c2n xn = c2n+1

....

xn = cnn+1

Теперь легко определить xn , xn-1 , ..., x1 .

Если при поиске отличного от нуля коэффициента такого не окажется, то матрица системы вырождена и алгоритм неприменим. Для сравнения с нолем в алгоритм передается малое число epsilon, и любое число, по модулю меньшее epsilon, считается нолем. В случае вырожденой матрицы функция возвращает False. Если матрица невырождена, то функция возвращает True, а переменная X содержит решение системы.

Блок-схем метода Гаусса

Описание программы

Эта программа создана, как многооконное приложение, основой которого служит MDI форма. В MDI-форме располагаются следующие формы:

«Файл»

«Система линейных уравнений»

«Окно»

«Справка»

Данные о нашем линейном уравнении мы вводим с клавиатуры. Далее с помощью падающего меню «Система линейных уравнений», нажатием кнопки «Вычислить», ответ выводиться в файл и в PictureBox1, а в PictureBox2 выводиться графическое решение. Там же можем посмотреть блок-схему самого метода Гаусса. В меню «Справка» выводится информация об авторе

Формы

Интерфейс всей программы

Форма frmSplash

При запуске программы появляется окно заставки frmSplash, при щелчке по форме заставка прячется и загружается главное окно программы:

Окно frmMain

Функции выполняемые пунктами меню

Заголовок

Имя

Действие

Файл

mnuFile

--Выход

mnuExit

Завершение работы приложения

Система линейных уравнений

mnuEq

--Блок-схема алгоритма

mnuBlockSh

Открывает форму с блок-схемой алгоритма

--Вычисление

mnuDecision

Открывает форму с решением системы

Окно

mnuWindow

Содержит список открытых окон MDIChild

Справка

mnuHelp

--О программа

mnuAbout

Открывает форму frmSplash

Это меню создается с помощью мастера MenuEditor, который вызывается из меню Tools, либо с помощью нажатия на клавиатуре Ctrl+E

Вот он - мастер создания меню.

Форма frmDecision содержит средства для ввода данных и последующего их использования для решения системы с помощью метода Гаусса

Окно frmDecision

Окно frmBlockSh содержит блок-схему алгоритма решения методом Гаусса

Код программы

Запуск программы сопровождается появлением окошка frmSplash.

Вот его код.

frmSplash

Private Sub Form_Click()

Unload Me

frmMainMDI.Show

End Sub

Модуль родительского окна.

frmMainMDI

Private Sub mnuAbout_Click()

frmSplash.Show

End Sub

Private Sub mnuBlockSh_Click()

frmBlockSh.Show

End Sub

Private Sub mnuDecision_Click()

frmDecision.Show

End Sub

Private Sub mnuExit_Click()

End

End Sub

Private Sub mnuVis_Click()

frmVis.Show

End Sub

Здесь выполняется демонстрация блок-схемы. Так как вся схема в окно не влезет, используем VScrollBar.

frmBlockSh

Private Sub VScroll1_Change()

Image1.Top = -VScroll1.Value * 12

End Sub

Private Sub VScroll1_Scroll()

Image1.Top = -VScroll1.Value * 12

End Sub

Далее происходит ввод данных с клавиатуры, и последующее их использование, для решения системы с помощью метода Гаусса

frmDecision

Dim A() As Double

Dim B() As Double

Dim x() As Double

Private Sub Command1_Click()

Picture1.Cls

Picture2.Cls

N = Val(Text1)

ReDim A(1 To N, 1 To N + 1)

ReDim B(1 To N + 1)

ReDim x(1 To N)

p = Split(Text2, "/")

k = 0

For i = 1 To N

For j = 1 To N + 1

A(i, j) = p(k)

k = k + 1

Next j

Next i

If N = 2 Then

Picture2.Scale (-10, 25)-(12, -5)

For i = -10 To 12

Picture2.Line (i, -5)-(i, 25), RGB(200, 220, 225)

Picture2.PSet (i, 0)

Picture2.Print i

Next

For i = -5 To 25

Picture2.Line (-10, i)-(12, i), RGB(200, 220, 225)

Picture2.PSet (0, i)

Picture2.Print i

Next

Picture2.Line (-10, 0)-(12, 0), QBColor(8)

Picture2.Line (0, -5)-(0, 25), QBColor(8)

For l = -10 To 20 Step 0.01

y = (A(1, 3) - A(1, 1) * l) / A(1, 2)

Picture2.PSet (l, y)

Y1 = (A(2, 3) - A(2, 1) * l) / A(2, 2)

Picture2.PSet (l, Y1)

Next

End If

u = 2

For R = 1 To N - 1

For j = u To N

q = -A(j, R) / A(R, R)

For i = 1 To N + 1

For t = 1 To N + 1

B(t) = q * A(R, t)

Next t

A(j, i) = A(j, i) + B(i)

Next i

Next j

u = u + 1

Next R

d = A(N, N + 1)

h = 1

For j = 0 To N - 1

x(N - j) = d / A(N - j, N - j)

If (N - j = 1) Then GoTo l1

d = A(N - j - 1, N + 1) - x(N - j) * A(N - (j + 1), N - j)

Next j

l1:

Open "test.txt" For Output As #2

For i = 1 To N

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

Picture1.Print "X"; i; "="; x(i)

Next

Close #2

End Sub

Это сам метод Гаусса.

mdlGauss

Public Sub Eq_Sol(A_(), x(), N As Integer, Epsilon)

Dim Result As Boolean

Dim R(10, 10) As Double

Dim k As Long

Dim u As Long

Dim m As Long

Dim j As Long

Dim i As Long

Dim t As Double

For i = 1 To N

For j = 1 To N + 1

R(i, j) = A_(i, j)

Next

Next

'ReDim X(1 To N)

u = 0

Result = True

Do

u = u + 1

k = u

Do While Abs(R(k, u)) <= Epsilon And k < N

k = k + 1

Loop

If k <> N Or Abs(R(N, u)) > Epsilon Then

If k <> u Then

m = u

Do

t = R(u, m)

R(u, m) = R(k, m)

R(k, m) = t

m = m + 1

Loop Until Not m <= N + 1

End If

j = N + 1

Do

R(u, j) = R(u, j) / R(u, u)

j = j - 1

Loop Until Not j >= u

m = N + 1

If k + 1 <= N Then

i = k + 1

Do

j = u + 1

Do

R(i, j) = R(i, j) - R(i, u) * R(u, j)

j = j + 1

Loop Until Not j <= m

i = i + 1

Loop Until Not i <= N

End If

Else

Result = False

End If

Loop Until Not (u <> N And Result)

If Result Then

i = N

Do

x(i) = R(i, m)

If i <> 1 Then

k = i - 1

Do

R(k, m) = R(k, m) - R(k, i) * x(i)

k = k - 1

Loop Until Not k >= 1

End If

i = i - 1

Loop Until Not i >= 1

End If

End Sub

Заключение

В ходе этой курсовой работы мной был рассмотрен метод решения систем линейных уравнений. Система размерностью N≤10 была решена методом Гаусса, результаты были выведены в файл. Так же присутствует визуализация решения при N=2.

Были рассмотрены и опробованы: родительское окно MDI-интерфейса, обычные формы и просто компоненты Visual Basica.

Список использованной литературы:

1.Ананьев А. , Федоров А. «Самоучитель Visual Basic 6.0» ,

БХВ - Петербург, 2005 г..

2.Письменный Д. «Конспект лекций по высшей математике», 1часть., Москва, 2003 г..

Соседние файлы в папке Курсовая работа по Visual Basic