Задание 1. Разработайте схемы алгоритмов решения обыкновенного дифференциального уравнения методами Эйлера и Рунге-Кутта 4-го порядка точности
Задание 2. В среде Delphiсоздайте приложение для решения дифференциальных уравнений, приведенных в таблице 5.1 (в соответствии со своим вариантом) методами Эйлера и Рунге-Кутта 4-го порядка.
Пример выполнения задания
Решите уравнение на отрезке [0, π]. Известно, что y(0)=1.
2.1. Создайте в среде Delphi форму и расположите на ней необходимые компоненты. Примерный вид представлен на рисунке 5.1.
Рисунок 5.1 – Вид формы в среде Delphi
2.2. В начале программы введите вид функции:
function f(x,y:real):real;
begin
f := sin(x)*y;
end; .
2.3. Создайте процедуру-обработчик нажатием кнопки «Вычислить»:
procedure TForm1.Button1Click(Sender: TObject);
label Rk ;
var xn,x0,y0,h,x,y,k1,k2,k3,k4,delta,g: extended;
n:integer;
begin
if radioButton1.Checked then begin
listbox1.Items.Clear;
x0 := strToFloat(edit1.Text);
y0 := strToFloat(edit2.Text);
xn := strToFloat(edit3.Text);
n := strToint(edit4.Text);
h := (xn–x0)/n;
Series1.Clear;
x := x0;
y := y0;
while x<=xn do begin
y := y+h*f(x,y); x := x+h;
listbox1.Items.Add('x='+floattostrf(x,fffixed,5,4)+' y='+floattostrf(y,fffixed,5,4));
Series1.AddXY(x,y);
end;
label5.Caption := 'Погрешность='+floattostrf(sqr(h),fffixed,1,7);
end;
if radiobutton2.Checked then begin
listbox2.Items.Clear;
x0 := strToFloat(edit1.Text);
y0 := strToFloat(edit2.Text);
xn := strToFloat(edit3.Text);
n := strToint(edit4.Text);
h := (xn–x0)/n;
Series2.Clear;
x := x0;
y := y0;
while x<=xn do begin
Rk:
k1 := h*f(x,y);
k2 := h*f((x+h/2),(y+k1/2));
k3 := h*f((x+h/2),(y+k2/2));
k4 := h*f((x+h),(y+k3));
g := abs((k2–k3)/(k1–k2));
if g>0.05 then begin h := h/2;
goto Rk;
end;
delta := 1/6*(k1+2*k2+2*k3+k4);
listbox2.Items.Add('x='+floattostrf(x,fffixed,5,4)+' y='+floattostrf(y,fffixed,5,4));
Series2.AddXY(x,y); x := x+h; y := y+delta;
end;
label6.Caption:='Погрешность='+ Floattostrf(sqr(sqr(h)),fffixed,1,7);
end;
|
|
end;
2.4. Получите следующие результаты (рис. 5.2):
Рисунок 5.2 – Результаты решения дифференциального уравнения в Delphi
Задание 3. Решите дифференциальное уравнение (в соответствии со своим вариантом) с помощью MathCad, используя встроенные функции и методы Эйлера и Рунге-Кутта 4-го порядка.
3.1. Для решения линейных обыкновенных дифференциальных уравнений в MathCad функция odesolve(x,b,[step]), которая возвращает значение функции, зависящей от х и являющейся решением линейного ОДУ. Здесь х — аргумент, b — правый конец отрезка, [step] — необязательный параметр, количество шагов для нахождения решения. Количество начальных условий должно равняться порядку уравнения.
Пример выполнения задания
Решите уравнение на отрезке [0, 4π]. Известно, что y(0) = 0, а y’(0) = 1.
Решение представлено на рис. 5.3
Рисунок 5.3 – Решение уравнения
Примечание:в блоке Given используются знаки булева равенства, вставляемые нажатием Ctrl+= и знак производной (штрих), вставляемый нажатием Ctrl+F7.
3.2. Решение ОДУ первого порядка вида получите с помощью функций rkfixed(y0,a,b,n,D), которая возвращает матрицу, состоящую из двух столбцов. В первом столбце хранятся значения аргумента, во втором — функции (результаты решения). Здесь y0 — начальное значение функции y, а — начало отрезка, b — конец отрезка, n — количество отрезков разбиения, D — первая производная от у.
|
|
Пример выполнения задания
Решите уравнение на отрезке [0, π]. Известно, что y(0) = 1.
Решение представлено на рис. 5.4
Рисунок 5.4 – Решение уравнения
Примечание: для решения ОДУ первого порядка так же можно использовать функцию rkadapt(), аналогичную рассмотренной выше rkfixed(), за исключением того, что решение находится не с фиксированным шагом, а с автоматическим его подбором.
3.3. Решение дифференциального уравнения y’=f(x,y) методом Эйлера.
Пример выполнения задания
Решите дифференциальное уравнение y’=f(x,y) методом Эйлера на отрезке [a,b] с шагом h c начальным условием y(a)=y0 , где f(x,y)=(3x – y)/(x2+y), a=2, b=3, h=0,1, y0=1.
Решение представлено на рис. 5.5
Рисунок 5.5 – Решение ОДУ методом Эйлера в среде MathCad
3.4.Решение дифференциального уравнения y’=f(x,y) методом Рунге-Кутта 4-го порядка.
Пример выполнения задания
Решите дифференциальное уравнение y’=f(x,y) методом Рунге-Кутта 4-го порядка на отрезке [a,b] с шагом h c начальным условием y(a) =y0, где f(x,y)=(3x – y)/(x2+y), a=2, b=3, h=0,1, y0=1.
|
|
Решение представлено на рис. 5.6
Рисунок 5.6 – Решение ОДУ методом Рунге-Кутта 4-го порядка
Дата добавления: 2018-04-05; просмотров: 452; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!