Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Министерство РФ по связи и информатизации
ГОУ ВПО «Сибирский государственный университет
телекоммуникаций и информатики»
Уральский технический институт связи и информатики (филиал)
Кафедра физики, прикладной математики и информатики
КУРСОВАЯ РАБОТА
по информатике
ВАРИАНТ №14:
«Визуализация численных методов.
Решение обыкновенных дифференциальных уравнений».
Исполнитель:
студент гр. ОЕ-71
Паньшин А.А.
Руководитель:
Доцент Минина Е.Е
Екатеринбург
2008
Введение
Дифференциальными называются уравнения, связывающие независимую переменную, искомую функцию и ее производные. Решением ДУ называется функция, которая при подстановке в уравнение обращает его в тождество. Лишь очень немногие из таких уравнений удается решить без помощи вычислительной техники.
Если решить сложно или невозможно, используют численные методы, то есть приближенные значения. В числовых методах обязательно используют начальные условия, чтобы исключить константу.
Числовые методы позволяют построить интегральную кривую по точкам. В зависимости от того, сколько точек используется для расчета очередной точки интегральной кривой, все численные методы делятся на одношаговые и многошаговые. В нашем случае мы используем одношаговые численные методы.
Основные цели и задачи работы:
Цель моей работы- ознакомление, изучение основ системы программирования Microsoft Visual Basic и приобретение начальных навыков решение ДУ в Microsoft Visual Basic
1. Постановка задачи
Решить методами Эйлера и Эйлера модифицированного задачу Коши для дифференциального уравнения 1-го порядка 2*x*y*dx-(x+1)=0
на отрезке [0; 0.8] с шагом h=0.05 и начальным условием: Y(0) = 4. Общее решение: y=exp(2*x)*C/(x+1)^2
Ответ должен быть получен в виде таблицы результатов:
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, используемого в общем решении.
2. Описание используемых методов
Метод Эйлера
Этот метод называют методом Рунге-Кутта первого порядка точности.
Данный метод одношаговый. Табулирование функции происходит поочередно в каждой точке. Для расчета значения функции в очередном узле необходимо использовать значение функции в одном предыдущем узле.
Для решения поставленной задачи выполняем следующие действия:
x1 = 0 + 1 · 0.05 = 0.05;
Из прямоугольного треугольника ,
Δy = y1 y0,
y1 y0= Δx· tg α0
Δx = x1 x0 = h => y1 = y0 + h · (f(x0; y0)) = 4 + 0.05 f(0;4) = 4+0.05*0= 4
Следовательно, точка B имеет координаты (0.05; 4).
Следующую точку будем искать аналогичным способом по формуле расчета очередной точки интегральной функции:
(*)
Метод Эйлера модифицированный
Для уменьшения погрешности вычислений часто используется модифицированный метод Эйлера. Этот метод имеет так же следующие названия: метод Эйлера-Коши или метод Рунге-Кутта второго порядка точности.
Для решения поставленной задачи выполняем следующие действия:
x1 = 0 + 0.05 · 1 = 0.05;
x1/2 = x0 + h/2 = 0 + 0.025 = 0.025
y1/2 = y0 + h/2 · f(x0; y0) = 4 + 0.025· 0= 4
Следовательно, точка B имеет координаты (0.025; 4);
Ищем угол наклона касательной к графику в точке B:
Tgα1=2*0.025*4/0.025+1=0.1951 рад. α1=0.1977
y1 = y1/2 + h/2(f(x1/2;y1/2)) = 4 + 0.025 · 0.1977 = 4.0049
Следовательно, точка C имеет координаты (0.05; 4.0049).
yi+1 = yi + h ∙ f(xi + h/2, yi + h/2 ∙ f(xi, yi))
3. Блок-схемы основных процедур.
Блок-схема функции
Блок-схема метода Эйлера.
Блок-схема методом Эйлера модифицированным.
Блок-схема графика.
Блок схема программы.
4. Формы программы.
Исходный вид формы программы.
Итоговый вид формы программы.
5. Листинг программы на языке Visual Basic.
Dim x(50) As Single, y(50) As Single, k(50) As Single, z(50) As Single, p(50) As Single
Private y0 As Single
Private x0 As Single
Private xk As Single
Private C As Single
Function f(t As Single, q As Single) As Single
f = 2 * t * q / t + 1
End Function
Private Sub Command2_Click()
x0 = Val(Text1.Text)
xk = Val(Text2.Text)
y(0) = Val(Text4.Text)
h = Val(Text3.Text)
p(0) = y(0)
z(0) = y(0)
n = Round((xk - x0) / h)
C = (y(0) * (x0 + 1) ^ 2) / Exp(2 * x0)
MSFlexGrid1.Rows = n + 2
MSFlexGrid1.Cols = 4
MSFlexGrid1.TextMatrix(0, 0) = "X"
MSFlexGrid1.TextMatrix(0, 1) = "P"
MSFlexGrid1.TextMatrix(0, 2) = "Yэ"
MSFlexGrid1.TextMatrix(0, 3) = "Yэм"
Max = y(0)
Min = y(0)
For i = 1 To n
x(i) = x0 + i * h
p(i) = Round(C * (x(i) * x(i) * x(i)) )
y(i + 1) = Round(y(i) + f(x(i), y(i)) * h )
z(i + 1) = Round(z(i) + f(x(i) + h / 2, z(i) + h / 2 * f(x(i), z(i))) * h)
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(p(i))
MSFlexGrid1.TextMatrix(i + 1, 2) = Str(y(i))
MSFlexGrid1.TextMatrix(i + 1, 3) = Str(z(i))
Next i
Picture1.Cls
kx = (Picture1.Width - 1200) / (xk - x0)
ky = (Picture1.Height - 1200) / (Max - Min)
Label4.Caption = Str(Min)
Label5.Caption = Str(Max)
Label6.Caption = Str(x0)
Label7.Caption = Str(xk)
For i = 0 To n - 1
z1 = Round(720 + (x(i) - x0) * kx)
z2 = Round(5400 - (y(i) - Min) * ky)
z3 = Round(720 + (x(i + 1) - x0) * kx)
z4 = Round(5400 - (y(i + 1) - Min) * ky)
z5 = Round(5400 - (p(i) - Min) * ky)
z6 = Round(5400 - (p(i + 1) - Min) * ky)
z7 = Round(5400 - (z(i) - Min) * ky)
z8 = Round(5400 - (z(i + 1) - Min) * ky)
Picture1.Line (z1, z7)-(z3, z8), vbRed
Picture1.Line (z1, z2)-(z3, z4), vbGreen
Picture1.Line (z1, z5)-(z3, z6), vbBlue
Next i
End Sub
Private Sub Command1_Click()
End
End Sub
6. Решение задачи в MathCAD.
Заключение
В данной курсовой работе я изучил численные методы решения задачи
По окончании работы я научился работать в среде программирования Visual Basic 6.0. и MathCad.
Я, в своей курсовой работе решал уравнение двумя методами: методом Эйлера и методом Эйлера модифицированного.Я выяснил, что метод Эйлера модифицированный имеет меньшую погрешность, чем метод Эйлера.
Eiler
i=0,…,N-1
x(i)=x0+h*i
yi=yi-1+h*f(xi-1,yi-1)
end
Eiler mod
=(xk-x0)/N
i=0,…,N-1
x(i)=x0+h*i
Yi=y(i-2)+h*F(x(i-2)+h/2,y(i-2)+h/2*F(x(i-2), y(i-2))
end
end
F=2*g*m/g+1
F(g,m)
Graphic
x0, xk, y0, h
N=Round((xk-x0)/h)
MSFlexGrid1.Rows=n+2
MSFlexGrid1.TextMatrix(0,0)=”X”
MSFlexGrid1.TextMatrix(0,1)=”YЭ”
MSFlexGrid1.TextMatrix(0,2)=”YЭМ”
MSFlexGrid1.TextMatrix(0,3)=”P”
x(0)=x0
y(0)=y0
c=y0*(x0+1)^2/exp(2*x0)
y1(i+1)=y1(i)+h*F(x(i),y1(i))
For i=0 to N
x(i)=x0+h*i
Z(0)=y0
y2(i+1)=y2(i)+h*F(x(i)+h/2,y2(i)++h*F(x(i),y2(i))/2
Y(i)=exp(2*x(i)) *C/(x(i)+1)^2
min=Y(0)
For i=0 to N
Y(i)<min
min=y(i)
max=Y(0)
For i=0 to N
Y(i)>max
max=Y(i)
kx = (Picture1.Width - 1200) / (xk - x0)
ky = (Picture1.Height - 1200) / (Max - Min)
нет
да
нетт
да
p(0)=y0
For i=0 to N-1
p1=720+(x(i)-x0)*kx
p2=5400-(y1(i)-min)*ky
p3=720+(x(i+1)-x0)*kx
p4=5400-(Y(i+1)-min)*ky
p5=5400+(p(i)-min)*ky
p6=5400-(p(i+1)-min)*ky
p7=5400-(z(i)-min)*ky
P8=5400-(z(i+1)-min)*ky
Picture1.Line(p1,p2)-(p5,p6),vbRed
Picture1.Line(p1,p3)-(p5,p7),vbGreen
Picture1.Line(p1,p4)-(p5,p8),vbBlue
end
Programma
x0, xk, y0, h
h=(xk-x0)/N
c=y(0)*(x0+1)^2/exp(2*x0)
i=0,…,N
x(i)=x0+h*i
y1(i+1)=y1(i)+h*F(x(i),y1(i))
y2(i+1)=y2(i)+h*F(x(i)+h/2,y2(i)++h*F(x(i),y2(i))/2
Y(i)=( exp(2*x(i)) *C/(x(i)+1)^2
x(i),y1(i),y2(i),Y(i)
end