|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
function yy=weifen_lgkt(A,B,x0,y0,fx)
% yy=weifen_lgkt(A,B,x0,y0,fx)
% 系统状态方程
% dy/dx-Ay=B*fx 微分方程,A,B为参数
% fx x的函数,可选参数,如不输入该参数, 则要在该函数体内编辑该函数
% x0,y0 状态变量初始值%注:x0,y0可以为列向量,求解微分方程组
N=1000; %计算步数
h=0.002; %计算步长
x=x0; y=y0;
%---------------------
for k=1:N
%求解微分方程
%fx(:,k)=x0+(k-1)*h; %例子1,在此选f(x)=x
k0=A*y+B*fx(:,k); %四阶龙格-库塔法则求解微分方程
k1=A*(y+h*k0/2)+B*fx(:,k); k2=A*(y+h*k1/2)+B*fx(:,k);
k3=A*(y+h*k2)+B*fx(:,k); y=y+(k0+2*k1+2*k2+k3)*h/6;
%--------------------------------------------------------------------------------------%
yy(k)=y; %输出
xx(k)=x0+k*h;
%y_jiexi(k)=2*fx(:,k)-2+4*exp(-fx(:,k)); %例子1的解析解
%y_e(k)=y_jiexi(k)-yy(k); %例子1解析解与数值解的误差
end
plot([x0 xx],[y0 yy])
*****************************************************************************************
程序完毕。
说明:如求解方程dy/dx+y=2x 初值x0=0 y0=2 则选A=-1 B=2 x0=0 y0=2
fx=x 见程序内例1实现方法 ,当然也可把fx当作参数输进去。
调用函数即可(例1需把%fx(:,k)=x0+(k-1)*h;前的%去掉)
A=-1; B=2; x0=0; y0=2;
yy=weifen_lgkt(A,B,x0,y0)
就可以求得该微分方程
[ 本帖最后由 ChaChing 于 2010-6-29 08:26 编辑 ] |
评分
-
1
查看全部评分
-
|