请教高人,用四阶龙格-库塔求微分方程

在matlab中,四阶龙格-库塔公式怎么用在微分方程f(s)=10/(s4+8s3+36s2+40s+10 );式中“s4”是表示s的4次幂。

第1个回答  2011-04-03
你的是f'(s)还是f(s)? 不太懂你的题目。
如果f'(s),就按下面的M文件运行机可以了。
先建立下面的M文件,保存。
%dydt 是微分方程,即10/(s4+8s3+36s2+40s+10)
%tspan是s的范围
%y0是初值
%h是步长
function [t,y] = RK4(dydt,tspan,y0,h,varargin)
ti = tspan(1); tf=tspan(2);
if ~(tf>ti),error('输入值大小顺序错误!'),end
t=(ti:h:tf)';
n=length(t);
if t(n)<tf
t(n+1) = tf;
n=n+1;
end%
y=y0*ones(n,1);
for i=1:n-1
k1 = dydt(t(i),y(i));
k2 = dydt( t(i)+h/2, y(i)+k1*h/2 );
k3 = dydt( t(i)+h/2, y(i)+k2*h/2 );
k4 = dydt( t(i)+h, y(i)+k3*h );
y(i+1) = y(i) + (k1+2*k2+2*k3+k4)*h/6;
end
//-------------------------------
然后在命令窗口输入以下命令即可。
dfds=@(s,p) 10/(s^4+8*s^3+36*s^2+40^s+10);
[tt pp]=RK4(dfds,[0 200],0.001,1);
plot(tt,pp);grid

不知道你理解没有。追问

f(s)是原函数,不是导数,刚才的答案要怎么改呢

第2个回答  2011-04-03
我会关注这个问题