
- •Е.Е. Минина
- •Введение 4
- •Введение
- •Методические рекомендации по выполнению курсовой работы
- •Назначение курсовой работы
- •Примерное содержание пояснительной записки
- •Календарный план выполнения работы
- •Решение обыкновенных дифференциальных уравнений. Задача Коши
- •4.1 Постановка задачи
- •4.2 Численные методы решения задачи Коши
- •4.3 Метод Эйлера
- •4.4 Метод Эйлера модифицированный
- •4.5 Метод Рунге – Кутта 4-го порядка
- •4.6 Решение дифференциальных уравнений в среде MathCad
- •Построение графика функции в среде visual basic
- •Задания к курсовой работе
- •Литература
4.6 Решение дифференциальных уравнений в среде MathCad
Рисунок 8 - Пример решения дифференциального уравнения методом
Рунге-Кутта 4 порядка в среде MathCad.
Построение графика функции в среде visual basic
Задача табулирования функций и построения их графиков является одной из основных задач в процессе решения обыкновенных дифференциальных уравнений. Рассмотрим эту задачу более подробно.
Задача.
Построить график функции y=sin(x) на отрезке [a,b]. Шаг табулирования принять равным h.
Решение.
Для построения графика функции в среде Visual Basic удобно воспользоваться некоторыми графическими компонентами.
Рисунок 9 - Расположение основных компонентов в окне General
КомпонентPicture
Box
(
)
используется в качестве контейнера для
построения графика. Он представляет
собой матрицу из точек (пикселей), причём
имеется возможность управлять цветом
каждой отдельной точки. Координаты
любой точки определяются парой целых
чисел – ее порядковым номером в строке
Х и порядковым номером строки внутри
объекта Y.
Таким образом, координаты левого
верхнего угла компонента (0, 0). Число
точек в строке и число строк определяются
размером компонента.
Рисунок 10 - Координаты объекта PictureBox
На рис. 10 показано расположение осей и координаты угловых точек объекта.
Компонент
Line
()
используется для построения осей и
отрезков ломаной графика функции.
Суть построения графика сводится к тому, что функцию необходимо представить в виде таблицы (протабулировать), а затем отметить на шаблоне графика точки и соединить их между собой.
Алгоритм построения графика функции приведен на рисунке 12. Алгоритм может быть модифицирован. В частности, некоторые процедуры могут быть объединены, а порядок действий в некоторых случаях может быть изменен.
Рассмотрим алгоритм более подробно.
До реализации алгоритма необходимо описать подпрограмму- функцию для построения графика. Это необходимо для облегчения модификации программы. Если потребуется построение графика другой функции, достаточно будет только изменить подпрограмму.
Так же до построения графика необходимо создать и отредактировать форму. Пример разработки формы приведен на рисунке 11. На форме надо расположить компоненты для ввода исходных данных, компонент для вывода на печать таблицы, командную кнопку, контейнер для размещения графика (PictureBox). Внутри PictureBox надо нарисовать оси координат с помощью прямых линий и расположить метки для записи границ отрезка значений аргумента функции и экстремумов функции на рассматриваемом отрезке.
Ввод исходных данных осуществляется в рассматриваемой программе при нажатии на командную кнопку. Очень часто ввод данных реализуется с помощью компонента TextBox.
Процедуру табулирования функции удобно осуществлять в цикле с параметром, так как известно количество обсчитываемых точек графика. До выполнения процедуры надо задать количество строк таблицы.
Количество строк рассчитывается по формуле k=n+2, где k – количество строк, а n – количество отрезков табулирования. Число строк должно быть больше количества отрезков на 2, так как необходимо учесть начальную точку (нулевую) и строку для записи заголовков столбцов страницы.
В самой процедуре табулирования можно совместить два действия – табулирование и расчет экстремумов. Такой вариант решения приведен в листинге программы на рисунке13.
Основной сложностью построения графика является переход от математического значения функции и аргумента к экранным координатам, используемым для построения графика. При решении этой проблемы необходимо учитывать противоположное направление осей на математическом графике и на объекте PictureBox и необходимость масштабирования картинки.
Коэффициенты масштабирования графика рассчитываются по следующим формулам:
,
где kx - коэффициент масштабирования по оси ОХ,
NPX – количество пикселей объекта PictureBox, отводимых для построения графика по горизонтали,
a – начальное значение отрезка аргумента функции,
b – конечное значение отрезка аргумента функции.
,
где Ky - коэффициент масштабирования по оси ОY,
NPY – количество пикселей объекта PictureBox, отводимых для построения графика по вертикали,
min – минимальное значение функции,
max – максимальное значение функции.
Перевод математических координат текущей точки в экранные производится по формулам:
zx = Round(ox + (x(i) - a) * kx),
zy = Round(oy - (y(i) - Min) * ky),
где zx, zy – экранные координаты текущей точки,
ox, oy - координаты точки пересечения осей в компоненте pictureBox,
x(i), y(i) – математические координаты текущей точки,
kx, ky – коэффициенты масштабирования.
В формуле расчета экранной координаты ординаты текущей точки используется знак «минус» для учета противоположного направления осей (на экране и на графике).
Листинг программы построения графика функции приведен на рисунке 13.
Примеры форм с результатами работы программы для различных исходных данных приведены на рисунках 14 и 15.
Рисунок 11 - Пример разработки формы
Рисунок 12 - Алгоритм построения графика функции
Rem Описание переменных
Dim x() As Single, y() As Single
Private a As Single
Private b As Single
Rem Описание функции, график которой необходимо построить
Function f(t As Single) As Single
f = Sin(t)
End Function
Private Sub Command1_Click()
Rem Ввод данных
a = Val(Text1.Text)
b = Val(Text2.Text)
h = Val(Text3.Text)
Rem Расчет количества отрезков табулирования
n = Round((b - a) / h)
Rem Переоопределение динамических массивов
ReDim x(n), y(n)
Rem Расчет количества строк в таблице
MSFlexGrid1.Rows = n + 2
Rem Подписи заголовков таблицы
MSFlexGrid1.TextMatrix(0, 0) = "x"
MSFlexGrid1.TextMatrix(0, 1) = "y"
Rem Формироваание массивов и поиск экстремумов
Max = f(a)
Min = f(a)
For i = 0 To n
x(i) = a + i * h
y(i) = Round(f(x(i)), 4)
If y(i) > Max Then Max = y(i)
If y(i) < Min Then Min = y(i)
MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i))
MSFlexGrid1.TextMatrix(i + 1, 1) = Str(y(i))
Next i
Rem очистка картинки
Picture1.Cls
Rem Расчет коэффициентов масштабирования
kx = (Picture1.Width - 1200) / (b - a)
ky = (Picture1.Height - 1000) / (Max - Min)
Rem Запись значений экстремумов на шаблон графика
Label4.Caption = Str(Min)
Label5.Caption = Str(Max)
Label6.Caption = Str(a)
Label7.Caption = Str(b)
Rem Расчет экранных координат и построение графика функции
For i = 0 To n - 1
z1 = Round(720 + (x(i) - a) * kx)
z2 = Round(5400 - (y(i) - Min) * ky)
z3 = Round(720 + (x(i + 1) - a) * kx)
z4 = Round(5400 - (y(i + 1) - Min) * ky)
Picture1.Line (z1, z2)-(z3, z4)
Next i
End Sub
Рисунок 13 - Листинг программы построения графика
Рисунок 14 - Результат работы программы
Рисунок 15 - Результат работы программы