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

4. Форма программы.

5. Листинг программы.

Private x() As Single, e() As Single, em() As Single, o() As Single, y() As Single

Private i, n As Integer

Private x0, xk, y0, h, miny, maxy, minx, maxx As Single

Function f(x, y) As Single

' Сама функция

f = x * y ^ 2 + 2 * x * y

End Function

Private Sub Eiler()

ReDim x(n)

ReDim e(n)

x(0) = x0

e(0) = y0

For i = 0 To n - 1

x(i) = Round(x0 + (i * h), 3)

e(i + 1) = Round(e(i) + h * f(x(i), e(i)), 3)

Next i

End Sub

Private Sub EilerM()

ReDim x(n)

ReDim em(n)

x(0) = x0

em(0) = y0

For i = 0 To n - 1

x(i) = Round(x0 + i * h, 3)

em(i + 1) = Round(em(i) + h * f(x(i) + h / 2, em(i) + h / 2 * f(x(i), em(i))), 3)

Next i

End Sub

Private Sub Obshee()

ReDim x(n)

ReDim o(n)

x(0) = x0

o(0) = y0

' maxy = y0

' miny = y0

' maxx = x0

' minx = x0

For i = 1 To n

x(i) = Round(x0 + i * h, 3)

' If x(i) > maxx Then maxx = x(i)

' If x(i) > maxx Then maxx = x(i)

o(i - 1) = (-2) / (1 + f(x(i), o(i)) * (Exp(-x(i)) ^ 2))

o(i) = Round(ft * (x(i) - 1), 3)

Next i

End Sub

Private Sub Command1_Click()

x0 = Val(Text1.Text)

xk = Val(Text2.Text)

h = Val(Text3.Text)

y0 = Val(Text4.Text)

n = Round((xk - x0) / h)

ReDim x(n)

ReDim e(n)

ReDim em(n)

ReDim o(n)

' Готовим таблицу

MSFlexGrid1.Cols = 4

MSFlexGrid1.Rows = n + 2

MSFlexGrid1.TextMatrix(0, 0) = "x"

MSFlexGrid1.TextMatrix(0, 1) = "Общее рещение"

MSFlexGrid1.TextMatrix(0, 2) = "эйлер"

MSFlexGrid1.TextMatrix(0, 3) = "Эйлер модиф."

Eiler

EilerM

Obshee

For i = 0 To n ' Заполняем таблицу

MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i))

MSFlexGrid1.TextMatrix(i + 1, 1) = Str(o(i))

MSFlexGrid1.TextMatrix(i + 1, 2) = Str(e(i))

MSFlexGrid1.TextMatrix(i + 1, 3) = Str(em(i))

Next i

minx = x(0)

maxx = x(n)

' miny =

' maxy = 1

For i = 0 To n

If miny > o(i) Then miny = o(i)

If miny > e(i) Then miny = e(i)

If miny > em(i) Then miny = em(i)

If maxy < o(i) Then maxy = o(i)

If maxy < e(i) Then maxy = e(i)

If maxy < em(i) Then maxy = em(i)

Next i

If miny = maxy Then

miny = -2

maxy = 2

End If

' Находим верхнюю границу граффика

If e(n) > o(n) Then maxy = e(n)

If em(n) > o(n) Then maxy = em(n)

If e(n) > em(n) Then maxy = e(n)

Picture1.Cls

Label10.Caption = Str(miny)

Label11.Caption = Str(maxy)

Label8.Caption = Str(minx)

Label12.Caption = Str(maxx)

' пытаемся найти правильный маштаб

kx = (Picture1.Width - 1200) / (maxx - minx)

ky = (Picture1.Height - 1200) / Abs(maxy - miny)

For i = 0 To n - 1 ' Рисуем Эйлер

z1 = Round(600 + (x(i) - x0) * kx)

z2 = Round(6480 - (e(i) - miny) * ky)

z3 = Round(600 + (x(i + 1) - x0) * kx)

z4 = Round(6480 - (e(i + 1) - miny) * ky)

Picture1.Line (z1, z2)-(z3, z4), RGB(0, 0, 9999)

Next i

For i = 0 To n - 1 ' Рисуем ЭйлерМ

z1 = Round(600 + (x(i) - x0) * kx)

z2 = Round(6480 - (em(i) - miny) * ky)

z3 = Round(600 + (x(i + 1) - x0) * kx)

z4 = Round(6480 - (em(i + 1) - miny) * ky)

Picture1.Line (z1, z2)-(z3, z4), RGB(0, 9999, 0)

Next i

For i = 0 To n - 1 ' Рисуем общее решение

z1 = Round(600 + (x(i) - x0) * kx)

z2 = Round(6480 - (o(i) - miny) * ky)

z3 = Round(600 + (x(i + 1) - x0) * kx)

z4 = Round(6480 - (o(i + 1) - miny) * ky)

Picture1.Line (z1, z2)-(z3, z4), RGB(9999, 0, 0)

Next i

End Sub