Tính vi phân cấp ba của hàm số bất kỳ theo phương pháp Runge Kutta syms x y z t; format long f=input(''''f=''''); g=input(''''g=''''); p=input(''''p=''''); x0=input(''''x0=''''); y0=input(''''y0=''''); z0=input(''''z0=''''); t0=input(''''t[.]
Trang 1Tính vi phân cấp ba của hàm số bất kỳ theo phương pháp Runge-Kutta: syms x y z t;
format long
f=input('f=');
g=input('g=');
p=input('p=');
x0=input('x0=');
y0=input('y0=');
z0=input('z0=');
t0=input('t0=');
x1=input('x1=');
h=input('h=');
X=[];X=[X,x0];n=(x1-x0)/h;
Y=[];Y=[Y,y0];
Z=[];Z=[Z,z0];
T=[];T=[T,t0];
for i=1:n
K1=h*subs(f,{x,y,z,t},{X(i),Y(i),Z(i),T(i)});
M1=h*subs(g,{x,y,z,t},{X(i),Y(i),Z(i),T(i)});
N1=h*subs(p,{x,y,z,t},{X(i),Y(i),Z(i),T(i)});
K2=h*subs(f,{x,y,z,t},{X(i)+h/2,Y(i)+K1/2,Z(i)+M1/2,T(i)
+N1/2});
M2=h*subs(g,{x,y,z,t},{X(i)+h/2,Y(i)+K1/2,Z(i)+M1/2,T(i)
+N1/2});
N2=h*subs(p,{x,y,z,t},{X(i)+h/2,Y(i)+K1/2,Z(i)+M1/2,T(i)
+N1/2});
K3=h*subs(f,{x,y,z,t},{X(i)+h/2,Y(i)+K2/2,Z(i)+M2/2,T(i)
+N2/2});
Trang 2M3=h*subs(g,{x,y,z,t},{X(i)+h/2,Y(i)+K2/2,Z(i)+M2/2,T(i) +N2/2});
N3=h*subs(p,{x,y,z,t},{X(i)+h/2,Y(i)+K2/2,Z(i)+M2/2,T(i) +N2/2});
K4=h*subs(f,{x,y,z,t},{X(i)+h,Y(i)+K3,Z(i)+M3,T(i)+N3}); M4=h*subs(g,{x,y,z,t},{X(i)+h,Y(i)+K3,Z(i)+M3,T(i)+N3}); N4=h*subs(p,{x,y,z,t},{X(i)+h,Y(i)+K3,Z(i)+M3,T(i)+N3}); Y(i+1)=Y(i)+(K1+2*K2+2*K3+K4)/6;
Z(i+1)=Z(i)+(M1+2*M2+2*M3+M4)/6;
T(i+1)=T(i)+(N1+2*N2+2*N3+N4)/6;
X(i+1)=X(i)+h;
end
disp('y=');
disp(Y(i+1));
return;