IPB

Здравствуйте, гость ( Авторизация | Регистрация )


 
Closed TopicStart new topicGo to the end of the page
> VISUAL BASIK 6.0. Построение графика, Ошибка в формировании массивов и в поиске экстремумов
Яблоко
сообщение 4.06.2011 - 22:52
Сообщение #1


Новенький


Текущее настроение:

Вст. ник | Цитата

Группа: registered
Сообщений: 2
Регистрация: 4.06.2011
Пользователь №: 46003

Награды: Нет
Подарки: 0

Имя: Александр
Пол: М


Репутация:   0  

CODE
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 Описание функции
Function f(a, b) As Single
f = b * (1 / Tan(a))
End Function
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) = "Рунге-Кутт"
Rem Формирование массивов и поиск экстремумов
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
Rem очистка картинки
Picture1.Cls

Rem Расчет коэффициентов масштабирования
kx = Round((Picture1.Height - 1200) / (xk - x0), 4)
ky = Round((Picture1.Width - 1000) / (maxy - miny), 4)
Rem Запись значений экстремумов на шаблон графика
Label16.Caption = Str(miny)
Label15.Caption = Str(maxy)
Label17.Caption = Str(minx)
Label18.Caption = 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


Это решение дифференциального уравнения в среде VISUAL BASIK 6.0
помогите найти ошибку в формировании массивов и в поиске экстремумов.


--------------------
Подарки: (Всего подарков: 0 )
У пользователя нет подарков




Go to the top of the pageGo to the end of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




> Статистика
Board Stats

Подарок форуму

10 евро

100 евро

10000 евро

1000000eur

  


Текстовая версия Сейчас: 28.03.2024 - 11:32