Программирование на BASIC / Visual Basic / Курсовая работа по Visual Basic / поясниловка
.DOCМинистерство образования и науки Российской Федерации
Уфимский Государственный Авиационный Технический Университет
Кафедра информатики
Пояснительная записка
к курсовой работе
«Решение систем линейных уравнений»
Тема 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 г..