Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Решение обыкновенного дифференциального уравнения в пакете MATLAB






//файл, задающий функцию

function res = func(x, y)

res = 0.2*x^2+0.3*(x^3+y);

return

//программная реализация метода Эйлера(x0, y0 – начальные значения)

function y = Ejler(x0, y0, n)

h=0.1;

x=((x0): (0.1): (x0+(n-1)*h));

y=zeros(n, 1);

y(1, 1)=y0;

for i=1: n-1

y(i+1)=y(i)+h*func(x(i), y(i));

end

//программная реализация модифицированного метода Эйлера
(x0, y0 – начальные значения)

function y = Ejler_mod(x0, y0, n)

h=0.1;

x=((x0): (0.1): (x0+(n-1)*h));

y=zeros(n, 1);

y(1, 1)=y0;

for i=1: n-1

y(i+1)=y(i)+h*func(x(i)+h/2, y(i)+func(x(i), y(i))*h/2);

end

return;

 

//программная реализация метода Рунге-Кутта (x0, y0 – начальные значения)

function [x, y] = RungeKut(x0, y0, n)

h=0.1;

x=((x0): (0.1): (x0+(n-1)*0.1));

y=zeros(1, n);

y(1, 1)=y0;

for i=1: n-1

K1=h*func(x(i), y(i));

K2=h*func(x(i)+h/2, y(i)+K1/2);

K3=h*func(x(i)+h/2, y(i)+K2/2);

K4=h*func(x(i)+h, y(i)+K3);

y(i+1)=y(i)+(K1+2*K2+2*K3+K4)/6;

end

for i=1: n

y(i)

end

return;

 

//результат вызова функций в MatLab

> > ejler(0, 0, 10)

ans =

0.00023000000000

0.00127690000000

0.00392520700000

0.00916296321000

0.01818785210630

0.03241348766949

0.05347589229957

0.08324016906856

> > ejler_mod(0, 0, 10)

ans =

0.00005375000000

0.00061008668750

0.00236301382713

0.00621036759817

0.01326002329153

0.02483629100076

0.04248650606174

0.06798782017132

0.10335419929553

> > [xx, yy] = RungeKut(0, 0, 10);

ans =

7.470819791666669e-005

6.628714204181883e-004

0.00245982110338

0.00636479187986

0.01348713135689

0.02515269900816

0.04291045994192

0.06853927947912

0.10405492465713

> > [xx, yy] = RungeKut(0, 0, 4);

ans =

ans =

7.470819791666669e-005

ans =

6.628714204181883e-004

ans =

0.00245982110338

 

//встроенный метод

> > [T, Y] = ode45(@func, y, [0])

T =

0.10000000000000

0.20000000000000

0.30000000000000

0.40000000000000

0.50000000000000

0.60000000000000

0.70000000000000

Y =

0.00007471494230

0.00066288478033

0.00245984131575

0.00636481873688

0.01348716527524

0.02515273995368

0.04291050826555

 

Варианты лабораторных работ

 

Номер варианта Дифференциальное уравнение Начальное условие
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.