VISUAL BASIK 6.0. Построение графика, Ошибка в формировании массивов и в поиске экстремумов |
Здравствуйте, гость ( Авторизация | Регистрация )
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 ) У пользователя нет подарков
|
|
|
|
|
|
Текстовая версия | Сейчас: 29.03.2024 - 8:17 |