Страница: 1 |
|
Вопрос: Решение дифф уравнения и построение графика.
|
Добавлено: 05.06.11 20:36
|
|
Автор вопроса: Яблоко | ICQ: 582888880
|
Rem Описание переменных
Dim x(), y(), Ei(), Run(), Ob() As Single
Private n, i As Integer
Private x0, xk, y0, h, minx, maxx, miny, maxy As Single
Rem Описание функции
Functiоn f(a, b) As Single
f = b * (1 / Tan(a))
End Functiоn
Rem Метод Эйлера
Private Sub Eiler()
ReDim x(n + 1)
ReDim Ei(n + 1)
Ei(0) = y0
For i = 0 To n
x(i) = Round(x0 + (i * h), 4)
Ei(i + 1) = Round(Ei(i) + h * f(x(i), Ei(i)), 4)
Next i
End Sub
Rem Метод Рунге-кутта
Private Sub RungeKutta()
ReDim x(n + 1)
ReDim Run(n + 1)
Run(0) = y0
For i = 0 To n
x(i) = Round(x0 + i * h, 4)
k1 = h * f(x(i), Run(i))
k2 = h * f(x(i) + (h / 2), Run(i) + (k1 / 2))
k3 = h * f(x(i) + (h / 2), Run(i) + (k2 / 2))
k4 = h * f(x(i) + h, Run(i) + k3)
k = (k1 + 2 * k2 + 2 * k3 + k4) / 6
Run(i + 1) = Round(Run(i) + k, 4)
Next i
End Sub
Rem Общее решение
Private Sub Obhee()
ReDim x(n + 1)
ReDim Ob(n + 1)
For i = 0 To n
x(i) = Round(x0 + i * h, 4)
Ob(i) = Sin(x(i))
Next i
End Sub
Private Sub Command1_Click()
Rem Ввод данных
x0 = 3.14 / 2
y0 = 1
xk = 3 * 3.14 / 4
h = 3.14 / 20
Text1.Text = x0
Text2.Text = y0
Text3.Text = xk
Text4.Text = h
Rem Расчет количества отрезков табулирования
n = Round((xk - x0) / h)
ReDim x(n), y(n)
Rem расчет количества строк в таблице
MSFlexGrid1.Cols = 4
MSFlexGrid1.Rows = n + 2
Rem Подписи заголовков страницы
MSFlexGrid1.TextMatrix(0, 0) = "x"
MSFlexGrid1.TextMatrix(0, 1) = "Общее рещение"
MSFlexGrid1.TextMatrix(0, 2) = "Эйлер"
MSFlexGrid1.TextMatrix(0, 3) = "Рунге-Кутт"
[B]Rem Формирование массивов и поиск экстремумов [/B]
Eiler
RungeKutta
Obhee
[B]For i = 0 To n
minx = x0
maxx = xk
miny = y0
maxy = Run(i)
If Ei(i) < Ob(i) Then miny = Ei(i)
If Run(i) < Ob(i) Then maxy = Run(i)
If Ei(i) > Run(i) Then maxy = Ei(i) [/B]
MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i))
MSFlexGrid1.TextMatrix(i + 1, 1) = Str(Ob(i))
MSFlexGrid1.TextMatrix(i + 1, 2) = Str(Ei(i))
MSFlexGrid1.TextMatrix(i + 1, 3) = Str(Run(i))
Next i
Rem очистка картинки
Picture1.Cls
Rem Расчет коэффициентов масштабирования
kx = Round((Picture1.Height - 1200) / (xk - x0), 4)
ky = Round((Picture1.Width - 1000) / (maxy - miny), 4)
Rem Запись значений экстремумов на шаблон графика
Label16.Captiоn = Str(miny)
Label15.Captiоn = Str(maxy)
Label17.Captiоn = Str(minx)
Label18.Captiоn = Str(maxx)
Rem Расчет экранных координат, построение графика и определение цвета
Picture1.DrawWidth = 1
For i = 0 To n - 1
z1 = 720 + (x(i) - x0) * kx
z2 = 5400 - (Ei(i) - miny) * ky
z3 = 720 + (x(i + 1) - x0) * kx
z4 = 5400 - (Ei(i + 1) - miny) * ky
Picture1.Line (z1, z2)-(z3, z4), RGB(0, 0, 9999)
Next i
Picture1.DrawWidth = 2
For i = 0 To n - 1
z1 = Round(720 + (x(i) - x0) * kx)
z2 = Round(5400 - (Run(i) - miny) * ky)
z3 = Round(720 + (x(i + 1) - x0) * kx)
z4 = Round(5400 - (Run(i + 1) - miny) * ky)
Picture1.Line (z1, z2)-(z3, z4), RGB(0, 9999, 0)
Next i
Picture1.DrawWidth = 1
For i = 0 To n - 1
z1 = 720 + (x(i) - x0) * kx
z2 = 5400 - (Ob(i) - miny) * ky
z3 = 720 + (x(i + 1) - x0) * kx
z4 = 5400 - (Ob(i + 1) - miny) * ky
Picture1.Line (z1, z2)-(z3, z4), RGB(9999, 0, 0)
Next i
End Sub
Помогите найти ошибку в формировании массивов и в поиске экстремумов
ПОМОГИТЕ ПОЖАЛУЙСТА[B/]
Ответить
|
Номер ответа: 1 Автор ответа:
Яблоко
![](images/starRed.gif)
ICQ: 582888880 ![номер 582888880](http://wwp.icq.com/scripts/online.dll?icq=582888880&img=5)
Вопросов: 5 Ответов: 13
|
Профиль | | #1
|
Добавлено: 05.06.11 20:39
|
- Dim x(), y(), Ei(), Run(), Ob() As Single
- Private n, i As Integer
- Private x0, xk, y0, h, minx, maxx, miny, maxy As Single
- Functiоn f(a, b) As Single
- f = b * (1 / Tan(a))
- End Functiоn
- Private Sub Eiler()
- ReDim x(n + 1)
- ReDim Ei(n + 1)
- Ei(0) = y0
- For i = 0 To n
- x(i) = Round(x0 + (i * h), 4)
- Ei(i + 1) = Round(Ei(i) + h * f(x(i), Ei(i)), 4)
- Next i
- End Sub
- Private Sub RungeKutta()
- ReDim x(n + 1)
- ReDim Run(n + 1)
- Run(0) = y0
- For i = 0 To n
- x(i) = Round(x0 + i * h, 4)
- k1 = h * f(x(i), Run(i))
- k2 = h * f(x(i) + (h / 2), Run(i) + (k1 / 2))
- k3 = h * f(x(i) + (h / 2), Run(i) + (k2 / 2))
- k4 = h * f(x(i) + h, Run(i) + k3)
- k = (k1 + 2 * k2 + 2 * k3 + k4) / 6
- Run(i + 1) = Round(Run(i) + k, 4)
- Next i
- End Sub
- Private Sub Obhee()
- ReDim x(n + 1)
- ReDim Ob(n + 1)
- For i = 0 To n
- x(i) = Round(x0 + i * h, 4)
- Ob(i) = Sin(x(i))
- Next i
- End Sub
- Private Sub Command1_Click()
- x0 = 3.14 / 2
- y0 = 1
- xk = 3 * 3.14 / 4
- h = 3.14 / 20
- Text1.Text = x0
- Text2.Text = y0
- Text3.Text = xk
- Text4.Text = h
- n = Round((xk - x0) / h)
- ReDim x(n), y(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
- RungeKutta
- Obhee
-
- For i = 0 To n
- minx = x0
- maxx = xk
- miny = y0
- maxy = Run(i)
- If Ei(i) < Ob(i) Then miny = Ei(i)
- If Run(i) < Ob(i) Then maxy = Run(i)
- If Ei(i) > Run(i) Then maxy = Ei(i)
- MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i))
- MSFlexGrid1.TextMatrix(i + 1, 1) = Str(Ob(i))
- MSFlexGrid1.TextMatrix(i + 1, 2) = Str(Ei(i))
- MSFlexGrid1.TextMatrix(i + 1, 3) = Str(Run(i))
- Next i
- Picture1.Cls
-
- kx = Round((Picture1.Height - 1200) / (xk - x0), 4)
- ky = Round((Picture1.Width - 1000) / (maxy - miny), 4)
- Label16.Captiоn = Str(miny)
- Label15.Captiоn = Str(maxy)
- Label17.Captiоn = Str(minx)
- Label18.Captiоn = Str(maxx)
- Picture1.DrawWidth = 1
- For i = 0 To n - 1
- z1 = 720 + (x(i) - x0) * kx
- z2 = 5400 - (Ei(i) - miny) * ky
- z3 = 720 + (x(i + 1) - x0) * kx
- z4 = 5400 - (Ei(i + 1) - miny) * ky
- Picture1.Line (z1, z2)-(z3, z4), RGB(0, 0, 9999)
- Next i
- Picture1.DrawWidth = 2
- For i = 0 To n - 1
- z1 = Round(720 + (x(i) - x0) * kx)
- z2 = Round(5400 - (Run(i) - miny) * ky)
- z3 = Round(720 + (x(i + 1) - x0) * kx)
- z4 = Round(5400 - (Run(i + 1) - miny) * ky)
- Picture1.Line (z1, z2)-(z3, z4), RGB(0, 9999, 0)
- Next i
- Picture1.DrawWidth = 1
- For i = 0 To n - 1
- z1 = 720 + (x(i) - x0) * kx
- z2 = 5400 - (Ob(i) - miny) * ky
- z3 = 720 + (x(i + 1) - x0) * kx
- z4 = 5400 - (Ob(i + 1) - miny) * ky
- Picture1.Line (z1, z2)-(z3, z4), RGB(9999, 0, 0)
- Next i
- End Sub
Ответить
|
Страница: 1 |
Поиск по форуму