Задание 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!