Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Визуализация численных методов. Решение обыкновенных дифференциальных уравнений..doc
Скачиваний:
67
Добавлен:
01.05.2014
Размер:
312.83 Кб
Скачать

3. Алгоритм решения задачи.

3. 1. Алгоритмы подпрограмм.

3. 1. 1. Подпрограмма метода Эйлера.

3. 1. 2 Подпрограмма метода Рунге-Кутта 4-ого порядка.

3. 1. 3. Подпрограмма общего решения и поиска максимальных значений x и y.

3. 2. Алгоритм функции.

3. 3. Алгоритм программы.

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

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

Dim x(), e(), em(), o() As Single

Private i, n As Integer

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

Function f(a, b) As Single

f = (3 - b) / a

End Function

Private Sub Eiler()

ReDim x(n + 1)

ReDim e(n + 1)

e(0) = y0

For i = 0 To n

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 + 1)

ReDim em(n + 1)

em(0) = y0

For i = 0 To n

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 Obhee()

ReDim x(n + 1)

ReDim o(n + 1)

maxy = y0

miny = y0

maxx = x0

minx = x0

For i = 0 To n

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

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

Next i

End Sub

Private Sub Command1_Click()

x0 = Val(Text1.Text)

y0 = Val(Text2.Text)

xk = Val(Text3.Text)

h = Val(Text4.Text)

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

MSFlexGrid1.Cols = 4

MSFlexGrid1.Rows = n + 2

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

MSFlexGrid1.TextMatrix(0, 1) = "y общ"

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

MSFlexGrid1.TextMatrix(0, 3) = "y эйл Эмод"

Eiler

EilerM

Obhee

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 = o(0)

maxy = o(n)

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)

Label10.Caption = Str(miny)

Label11.Caption = Str(maxy)

Label8.Caption = Str(minx)

Label12.Caption = Str(maxx)

Picture1.Cls

kx = (Picture1.Width - 1200) / (xk - x0)

ky = (Picture1.Height - 1000) / (maxy - miny)

For i = 0 To n - 1

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

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

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

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

Picture1.Line (z1, z2)-(z3, z4)

Next i

For i = 0 To n - 1

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

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

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

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

Picture1.Line (z1, z2)-(z3, z4)

Next i

For i = 0 To n - 1

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

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

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

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

Picture1.Line (z1, z2)-(z3, z4)

Next i

End Sub