Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Решение обыкновенного дифференциального уравнения в пакете 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 //программная реализация модифицированного метода Эйлера 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
Варианты лабораторных работ
|