x3’(t)= y’’’(t)=(10-5* y’-106* y’’- y)/12=(10-5*x2-106*x3-x1)/12
3. Текст программы:
mf.m
//Вычисляет правую часть дифференциального уравнения для шага t, решения y
function z=mf(t,y,a,f)
z=a*y+f;
oscil.m
//Задает уравнение для солвера
function f=oscil(t,y)
f=[y(2);y(3);(10-y(1)-106*y(3)-5*y(2))/12];
RK.m
//Формула Рунге-Кутта 4-го порядка для расчета начальных точек
function y=RK(t,y,a,f,h)
k1=mf(t,y,a,f);
k2=mf(t+h/2,y+h/2*k1,a,f);
k3=mf(t+h/2,y+h/2*k2,a,f);
k4=mf(t+h,y+h*k3,a,f);
y=y+h/6*(k1+2*k2+2*k3+k4);
TR.m
//Главная функция, осуществляющая аналитическое решение, решение при помощи солвера ode45 и численный метод Адамса-Башфорта 3-го порядка.
%***********************%
%Exact Analytic Solution%
%***********************%
syms y
digits(20);
y =vpa( dsolve('12*D3y+106*D2y+5*Dy+y = 10', 'y(0)=0', 'D2y(0) = 0','Dy(0)=0', 'x'));
figure;
ezplot(y,[0,200])
s=vectorize(y)
x=0:200;
title('Exact Analytic Solution')
%**********%
%A-B method%
%**********%
%Define constants
h=0.05; DT=200; n=3;
a=[0 1 0;0 0 1;-1/12 -5/12 -106/12];
f=[0;0;10/12];
y=[0;0;0];t=0;
%end of definition
figure;
m=floor(DT/h);
out=zeros(m,n+1);
%Set 3 first point for starting A-B method, using R-K method
%%FIRST%%
p=[t,y'];
out(1,:)=p;%
k1=y;
f1=mf(t,k1,a,f);
t=t+h;
%%SECOND%%
k2=RK(t,k1,a,f,h);
p=[t,k2'];
out(2,:)=p;
f2=mf(t,k2,a,f);
t=t+h
%%THIRD%%
k3=RK(t,k2,a,f,h);
p=[t,k3'];
out(3,:)=p;
f3=mf(t,k3,a,f);
t=t+h;
for i=4:m; %A-B method start
y=k3+h*(23*f3-16*f2+5*f1)/12;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.