Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
по информатике:
Визуализация численных методов.
Решение обыкновенных дифференциальных уравнений.
Саутин В. гр.ИТЕ-13б:
Проверил:
Бигбулатова Н.Г.
Екатеринбург
2012 г.
Введение………………………………………………………………….3
2. Описание методов решения…………………………………………..6
2.2. Геометрический смысл задачи…………………………………….6
2.3. Численные методы решения задачи Коши……………………….7
2.7. Решение поставленной задачи методами Эйлера и Эйлера модифицированного…………………………………………………………….15
2.7.1. Метод Эйлера……………………………………………………15
2.7.2. Метод Рунге Кутта 4-го порядка ……………………………16
3. Блок-схемы …………………………………………...................19
3.1. Блок-схема программы.………………………………………....19
3.2. Блок-схема алгоритма функции……………………………….20
3.3. Блок-схема метода Эйлера…..……………………..…………..20
3.4. Блок-схема общего решения и поиска максимальных значений………………………………………………………………………….21
3. 5. Блок-схема метода Рунге-Кутта 4 порядка ………………………22
4. Форма программы…………………………………………………….23
4.1.Начальная форма……………………………………………….23
4.2. Конечная форма………….…………………………………………24
5. Листинг программы…………………………………………………..25
6. Решение задачи в MathCad…………………………………………..29
Заключение………………………………………………………………30
Введение.
При решении различных задач математики, физики, химии и других наук часто пользуются математическими моделями в виде дифференциальных уравнений связывающих независимую переменную, искомую функцию и ее производные. Например, исследуя полученные дифференциальные уравнения вместе с дополнительными условиями, мы можем получить сведения о происходящем явлении, иногда может узнать его прошлое и будущее. Изучение математической модели математическими методами позволяет не только получить качественные характеристики физических явлений и рассчитать с заданной степенью точности ход реального процесса, но и дает возможность проникнуть в суть физических явлений, а иногда предсказать и новые физические эффекты. Бывает, что сама природа физического явления подсказывает и подходы, и методы математического исследования. Критерием правильности выбора математической модели является практика, сопоставление данных математического исследования с экспериментальными данными. Не всегда удается решить дифференциальное уравнение без помощи компьютера, поэтому создание все лучших и удобных программ для решения уравнений всегда будет являться актуальным вопросом.
Уравнения, связывающие независимую переменную, искомую функцию и её производные называют дифференциальным уравнением. Решение дифференциального уравнения называется функция, которая при подстановке в уравнение обращает его в тождество.
Если искомая (неизвестная) функция зависит от одной переменной, то дифференциальное уравнение называется обычным; в противном случае уравнение в частных производных, содержащие несколько независимых переменных и производные по ним, которые называются частными. В данной работе будут рассматриваться методы решения обычных дифференциальных уравнений (ОДУ).
Чтобы решить ОДУ, необходимо знать значение зависимой переменной и (или) её производные при некоторых значениях независимой переменной. Если эти дополнительные условия задаются при одном значении независимой переменной, то такая задача называется задачей с начальными условиями, или задачей Коши.
Числовое решение задачи Коши широко применяется в различных областях науки и техники, и число разработанных для него методов достаточно велико. Эти методы могут быть разделены на следующие группы.
В данной курсовой работе будут рассматриваться два одношаговых метода: метод Эйлера и Рунге Кутта четвёртого порядка.
Цель и задача
Целью данной курсовой работы является решение дифференциального уравнения двумя численными методами Эйлера и Рунге Кутта четвёртого порядка.
Для достижения цели я поставил перед собой следующие задачи:
Решить методами Эйлера и Рунге Кутта четвёртого порядка задачу Коши для дифференциального уравнения 1-го порядка на отрезке [X0; Xk] с шагом h и начальным условием: Y(X0) = Y0.
Ответ должен быть получен в виде таблицы результатов:
X |
Y(1) |
Y(2) |
YT |
X0 |
Y0(1) |
Y0(2) |
Y(X0) |
X1 |
Y1(1) |
Y1(2) |
Y(X1) |
… |
… |
… |
… |
Xk |
Yk(1) |
Yk(2) |
Y(Xk) |
Где Y(1), Y(2) решения, полученные различными численными методами, YT точное решение дифференциального уравнения.
Возможно представление результатов решения не в виде таблицы, а в виде списков.
Данные таблицы визуализировать на форме в виде графиков.
Перед вычислением последнего столбца таблицы результатов необходимо из начальных условий вычесть значение коэффициента c, используемого в общем решении.
Дифференциальное уравнение |
X0 |
Xk |
h |
Y0 |
Общее решение |
х*y+y=y^2*ln(х) |
1 |
1,6 |
0,1 |
4 |
2. Описание методов решения.
Чтобы решить обыкновенное дифференциальное уравнение, необходимо знать значения зависимой переменной и (или) её производных при некоторых значениях независимой переменной. Если эти дополнительные условия задаются при одном значении независимой переменной, то такая задача называется задачей с начальными условиями, или задачей Коши. Часто в задаче Коши в роли независимой переменной выступает время.
Задачу Коши можно сформулировать следующим образом:
Пусть дано дифференциальное уравнение и начальное условие y(x0) = у0. Требуется найти функцию у(x), удовлетворяющую как указанному уравнению, так и начальному условию.
Численное решение задачи Коши сводится к табулированию искомой функции.
График решения дифференциального уравнения называется интегральной кривой.
2. 2. Геометрический смысл задачи.
y = f(x,y) - тангенс угла наклона касательной к графику решения в точке (х, у) к оси 0Х, - угловой коэффициент (рис. 1).
Рисунок 1. Геометрический смысл задачи Коши
Существование решения:
Если правая часть f(x, y) непрерывна в некоторой области R, определяемой неравенствами
|x-x0| < а; |y-y0| < b,
то существует, по меньшей мере, одно решение у = у(х), определённое в окрестности |х х0| < h, где h - положительное число.
Это решение единственно, если в R выполнено условие Липшица
|f(x,y)-f(x,y)| ≤N|y-y|(x,y),
где N - некоторая постоянная (константа Липшица), зависящая, в общем случае, от а и b. Если f(x, у) имеет ограниченную производную
fy(x, y) в R, то можно положить N = мах |fy(х, у)| при (х, y) принадлежащим R.
2. 3. Численные методы решения задачи Коши.
При использовании численных методов выполняется замена отрезка [х0, X] - области непрерывного изменения аргумента х множеством . состоящего из конечного числа точек х0 < х1 < ... < xn = Х - сеткой.
При этом xi называют узлами сетки.
Во многих методах используются равномерные сетки с шагом:
Задача Коши, определённая ранее на непрерывном отрезке [х0, X], заменяется её дискретным аналогом - системой уравнений, решая которую можно последовательно найти значения y1, y2,…,yn - приближённые значения функции в узлах сетки.
Численное решение задачи Коши широко применяется в различных областях науки и техники, и число разработанных для него методов достаточно велико. Эти методы могут быть разделены на следующие группы.
Одношаговые методы, в которых для нахождения следующей точки на
кривой у = f(x) требуется информация лишь об одном предыдущем шаге.
Одношаговыми являются метод Эйлера и методы Рунге - Кутта.
Методы прогноза и коррекции (многошаговые), в которых для отыскания следующей точки кривой у = f(x) требуется информация более чем об одной из предыдущих точек. Чтобы получить достаточно точное численное значение, часто прибегают к итерации. К числу таких методов относятся методы Милна, Адамса - Башфорта и Хемминга.
Явные методы, в которых функция Ф не зависит от yn+1.
Неявные методы, в которых функция Ф зависит от yn+1.
Иногда этот метод называют методом Рунге-Кутта первого порядка точности.
Данный метод, как сказано выше, является одношаговым. Табулирование функции происходит поочередно в каждой точке. Для расчёта значения функции в очередном узле необходимо использовать значение функции в одном предыдущем узле.
Пусть дано дифференциальное уравнение первого порядка
y`=f(x,y)
с начальным условием
y(x0)=y0.
Выберем шаг h и введём обозначения:
xi=x0+i*h и yi=y(xi), где i=0,1,2,...,
xi- узлы сетки,
yi- значение интегральной функции в узлах.
Иллюстрации к решению приведены на рисунке 2.
Проведём прямую АВ через точку (xi,yi) под углом α. При этом
tgα=f(xi,yi) (1)
В соответствии с геометрическим смыслом задачи, прямая АВ является касательной к интегральной функции. Произведём замену точки интегральной функции точкой, лежащей на касательной АВ.
Тогда y i+1=yi+Δy (2).
Из прямоугольного треугольника АВС tgα= Δy/h (3).
Приравниваем правые части (1) и (3). Получим Δy/h= f(xi,yi).
Отсюда Δy= f(xi,yi)*h.
Подставим в это выражение формулу (2), а затем преобразуем его. В результате получаем формулу расчёта очередной точки интегральной функции:
y i+1=yi+ h*f (xi,yi) (4).
Из формулы (4) видно, что для расчёта каждой следующей точки интегральной функции необходимо знать значение только одной предыдущей точки. Таким образом, зная начальные условия, можно построить интегральную кривую на заданном промежутке.
Рисунок 2. Метод Эйлера
Из формулы видно, что для расчета каждой следующей точки интегральной функции необходимо знать значение только одной предыдущей точки. Таким образом, зная начальные условия, можно построить интегральную кривую на заданном промежутке.
Блок-схема процедуры решения дифференциального уравнения методом Эйлера приведена на рисунке 3.
F(x, у) - заданная функция должна
быть описана отдельно.
Входные параметры:
Х0, XKначальное и конечное
значения независимой переменной;
Y0 значение y0 из начального условия
y(x0) = y0;
N - количество отрезков разбиения;
Выходные параметры:
У - массив значений искомого решения
в узлах сетки.
Рисунок 3. Блок-схема процедуры решения дифференциального уравнения методом Эйлера.
Метод Эйлера один из простейших методов численного решения ОДУ. Но существенным его недостатком является большая погрешность вычислений. На рисунке 2 погрешность вычислений дляi-го шага обозначена ε. С каждым шагом погрешность вычислений увеличивается.
Для уменьшения погрешности вычислений часто используется модифицированный метод Эйлера. Этот метод имеет так же следующие названия: метод Эйлера-Коши или метод Рунге-Кутта второго порядка точности.
Пусть дано дифференциальное уравнение первого порядка
с начальным условием:
Выберем шаг h и введём обозначения:
xi = x0 + ih и yi = y(xi), где i = 0, 1, 2, ...,
xi - узлы сетки,
yi - значение интегральной функции в узлах.
При использовании модифицированного метода Эйлера шаг h делится на два отрезка.
Иллюстрации к решению приведены на рисунке 4.
Рисунок 4. Метод Эйлера модифицированный.
Проведем решение в несколько этапов:
yi+1 = yi + h ∙ f(xi + h/2, yi + h/2 ∙ f(xi, yi)).
Модифицированный метод Эйлера дает меньшую погрешность. На рисунке 4 это хорошо видно. Так величина εl характеризует погрешность метода Эйлера, а ε - погрешность метода Эйлера модифицированного.
Блок-схема процедуры решения дифференциального уравнения методом Эйлера модифицированного приведена на рисунке 5.
F(x, у) - заданная функция - должна
быть описана отдельно.
Входные параметры:
Х0, XК - начальное и конечное
значения независимой
переменной;
Y0 значение y0 из начального условия
y(x0)=y0;
N - количество отрезков разбиения;
Выходные параметры:
Y - массив значений искомого решения
в узлах сетки.
Рисунок 5. Блок-схема процедуры решения дифференциального уравнения методом Эйлера модифицированного.
2.6. Метод Рунге-Кутта 4-го порядка.
Пусть дано дифференциальное уравнение первого порядка с начальным условием y(x0)=y0. Выберем шаг h и введем обозначения:
xi = x0 + ih и yi = y(xi), где i = 0, 1, 2, ... .
Аналогично описанному выше методу производится решение
дифференциального уравнения. Отличие состоит в делении шага на 4 части.
Согласно методу Рунге-Кутта четвертого порядка, последовательные значения yi искомой функции y определяются по формуле:
yi+1 = yi +∆yi где i = 0, 1, 2 ...
∆y=(k1+2*k2+2*k3+k4)/6
a числа k1, k2 ,k3, k4 на каждом шаге вычисляются по формулам:
k1 = h*f(xi, yi )
k2 = f (xi +h/2, yi +k1 /2)*h
k3 = F(xi +h/2, yi +k2 /2)*h
k4 = F(xi +h, yi +k3 )*h
Это явный четырехэтапный метод 4 порядка точности.
Блок-схема процедуры решения дифференциального уравнения методом Рунге-Кутта 4-го порядка приведена на рисунке 6.
F(x, у) - заданная функция - должна
быть описана отдельно.
Входные параметры:
Х0, XК - начальное и конечное
значения независимой
переменной;
Y0 значение y0 из начального условия
y(x0)=y0;
N - количество отрезков разбиения;
Выходные параметры:
Y - массив значений искомого решения
в узлах сетки.
Рисунок 6. Блок-схема процедуры решения дифференциального уравнения методом Рунге-Кутта 4-го порядка.
Методы Рунге Кутта легко программируются и обладают значительной точностью и устойчивостью для широкого круга задач.
На рисунке 7 приведена блок-схема алгоритма основной программы для решения задачи Коши и получения результатов с фиксированным количеством отрезков разбиения N. В основной программе происходит обращение к процедуре RUNGE(X0, XK, Y0, N, Y), вычисляющей значения искомой функции yj в точках xj методом Рунге Кутта.
Исходными данными в данной задаче являются:
X0, XK начальное и конечное значения независимой переменной;
Y0 значение y0 из начального условия y(x0) = y0;
N количество отрезков разбиения.
Результаты работы программы выводятся в виде двух столбцов:
X массив значений узлов сетки;
Y массив значений искомого решения в соответствующих узлах сетки.
Рисунок 7. Блок-схема алгоритма основной программы для решения задачи Коши с фиксированным количеством отрезков разбиения N
2.7. Решение поставленной задачи методами Эйлера и Метод Рунге Кутта 4-го порядка.
2.7.1. Метод Эйлера.
Решение дифференциального уравнения.
1 Находим точку А по координатам (x0,y0) = (1,4)
2 Вычисляем угол
tgα=f(xi,yi)
f(xi,yi)= y^2*ln(x)-y)/x
f(xi,yi)= -4
α=arctg( f(xi,yi))= -76
3 Проводим касательную от точки А под углом α
4 Находим точку В на прямой с координатами (x1,y1) где x1 = x0 + h , рассчитываем координату y1 по формуле y i+1 = yi + h * f ( xi , y i). y1 = 3,6
5 Вычисляем угол в точке В(1,1;3,6)
tgα=f(xi,yi)
f(xi,yi)= y^2*ln(x)-y)/x
f(xi,yi)= -2,15
α=arctg( f(xi,yi))= -65
6 Проводим касательную от точки В под углом α1
Рисунок 8. Решение задачи методом Эйлера.
Пусть дано дифференциальное уравнение первого порядка
y`=f(x,y)
с начальным условием
y(x0)=y0.
Выберем шаг h и введём обозначения:
xi=x0+i*h и yi=y(xi), где i=0,1,2,...,
xi- узлы сетки,
yi- значение интегральной функции в узлах.
Проведём решение в несколько этапов.
tg α = f(xi+h/2, yi+h/2*f(xi,yi)).
И так же находим остальные точки D c α = -68 и E c α = -65
Согласно методу Рунге Кутта четвёртого порядка, последовательные значения yi искомой функции y определяется по формуле:
y i+1=yi+Δy,
где
Δy=(k1+2*k2+2*k3+k4)/6, i=0,1,2,...
а числа k1(i),k2(i),k3(i),k4(i) на каждом шаге вычисляются по формулам:
k1=h*f(xi,yi)
k2 =h*f(xi+h/2,yi+k1/2)
k3=h*f(xi+h/2,yi+k2/2)
k4 =h*f(xi+h,yi+k3)
Это явный четырёхэтапный метод четвёртого порядка точности.
Рисунок 8. Решение задачи методом Рунге Кутта 4-го порядка.
Решение дифференциального уравнения методами Эйлера и Рунге Кутта 4-го порядка в Visual Basic.
4.2. Конечная форма
График программы в Visual Basic.
Dim x(), e(), em(), o() As Single
Dim i, n As Integer
Dim x0, xk, y0, h, miny, maxy, minx, maxx As Single
Function f(x, y) As Single
p = Log(x) / Log(2.718282)
f = (y ^ 2 * p - y) / x
End Function
Private Sub Euler()
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 RungeKutt()
ReDim x(n + 1)
ReDim em(n + 1)
em(0) = y0
For i = 0 To n
x(i) = Round(x0 + i * h, 3)
k1 = h * f(x(i), em(i))
k2 = h * f(x(i) + (h / 2), em(i) + (k1 / 2))
k3 = h * f(x(i) + (h / 2), em(i) + (k2 / 2))
k4 = h * f(x(i) + h, em(i) + k3)
k = (k1 + 2 * k2 + 2 * k3 + k4) / 6
em(i + 1) = Round(em(i) + k, 3)
Next i
End Sub
Private Sub CommDecision()
ReDim x(n + 1)
ReDim o(n + 1)
maxy = y0
miny = y0
maxx = x0
minx = x0
p = Log(x0) / Log(2.718282)
c = (1 / (x0 * y0)) - (1 / x0) - (p / x0)
For i = 0 To n
x(i) = Round(x0 + i * h, 3)
p = Log(x(i)) / Log(2.718282)
o(i) = (1 / (1 + p + c * x(i)))
Next i
End Sub
Private Sub Command1_Click()
x0 = Val(Text1.Text)
xk = Val(Text2.Text)
h = Val(Text3.Text)
y0 = Val(Text4.Text)
n = Round((xk - x0) / h)
MSFlexGrid1.Cols = 4
MSFlexGrid1.Rows = n + 2
MSFlexGrid1.TextMatrix(0, 0) = "x"
MSFlexGrid1.TextMatrix(0, 1) = "Общее решение"
MSFlexGrid1.TextMatrix(0, 2) = "Эйлер"
MSFlexGrid1.TextMatrix(0, 3) = "Рунге-Кутт"
Euler
RungeKutt
CommDecision
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)
Picture1.Cls
Label10.Caption = miny
Label11.Caption = maxy
Label8.Caption = minx
Label12.Caption = maxx
kx = (4000 - 700) / (xk - x0)
ky = (5000 - 6000) / (maxy - miny)
For i = 0 To n - 1
z1 = (720 + (x(i) - x0) * kx)
z2 = (1000 - (e(i) - miny) * ky)
z3 = (720 + (x(i + 1) - x0) * kx)
z4 = (1000 - (e(i + 1) - miny) * ky)
Picture1.Line (z1, z2)-(z3, z4), vbBlue
Next i
For i = 0 To n - 1
z1 = (720 + (x(i) - x0) * kx)
z2 = (1000 - (em(i) - miny) * ky)
z3 = (720 + (x(i + 1) - x0) * kx)
z4 = (1000 - (em(i + 1) - miny) * ky)
Picture1.Line (z1, z2)-(z3, z4), vbGreen
Next i
For i = 0 To n - 1
z1 = (720 + (x(i) - x0) * kx)
z2 = (1000 - (o(i) - miny) * ky)
z3 = (720 + (x(i + 1) - x0) * kx)
z4 = (1000 - (o(i + 1) - miny) * ky)
Picture1.Line (z1, z2)-(z3, z4), vbRed
Next i
End Sub
Private Sub Command2_Click()
End
End Sub
6. Решение задачи в MathCadе
Заключение
В данной курсовой работе я рассматривал два метода решения дифференциального уравнения, а именно Метод Эйлера и Рунге-Кутта 4-го порядка. Эти методы были рассчитаны путем вычисления через программу Visual Basic и MathCadе.
В связи с полученными данными, вычисленными через программы выяснилось, что точки графиков функции не совпадают, то есть имеется погрешность с каждым увеличением шага или с вычислением последующей точки.
С точки зрения вычислений данного дифференциального уравнения, на мой взгляд, проще решается с помощью метода Эйлера, но при этом возникает небольшая погрешность.