找回密码
 注册
Simdroid-非首页
查看: 101|回复: 1

怎么用ode解这个方程组?

[复制链接]
发表于 2010-6-23 21:43:47 | 显示全部楼层 |阅读模式 来自 山东烟台
我最近正在计算这个lic方程组
dy1/dx=y2*y3
dy2/dx=-y1*y3
dy3/dx=-0.5y1*y2
dy4/dx=4y2*y4
初始值是y1(0)=1;y2(0)=0.26;y3(0)=1e-9;y4(0)=1e-15;
考虑使用ode45函数,
tspan=linspace(x0,xf,45000);
[T,Y]=ode45('lic',tspan,[y1 y2 y3 y4]);
可是运行出来之后提示错误,
??? Error using ==> lic
Too many input arguments.
Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.
Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
Error in ==> figure1 at 25
    [T,Y]=ode45('lic',tspan,[y1 y2 y3 y4]);


我明白是因为输入初值过多。
可是我该怎么改,才能运行?
发表于 2010-6-23 22:49:01 | 显示全部楼层 来自 四川成都
Simdroid开发平台
本帖最后由 lengyunfeng 于 2010-6-23 23:03 编辑

可能是你的lic定义有问题
>>edit

定义函数lic如下:

function dydx=lic(x,y)
dydx=zeros(4,1);
dydx(1)=y(2)*y(3);
dydx(2)=-1*y(1)*y(3);
dydx(3)=-0.5*y(1)*y(2);
dydx(4)=4*y(2)*y(4);

在matlab中输入如下:
>> x0=0;
>> xf=30;
>> tspan=linspace(x0,xf,45000);
>> [x,y]=ode45(@lic,tspan,[1 .26 1e-9 1e-15]);
>> plot(x,y(:,1))
>> hold on
>> plot(x,y(:,2),'r')
>> plot(x,y(:,3),'y')
>> plot(x,y(:,4),'g')
>>xlabel('x');ylabel('y');
>>legend('y1(x)','y2(x)','y3(x)','y4(x)');

有解,在画plot(x,y(:,4),'g')前图形还是挺漂亮的,但plot(x,y(:,4),'g')的y值过大,使得前三条绘制语名绘制的图形y向无法显示出来,你把xf变小一点就可以解决这一问题的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 21:22 , Processed in 0.037948 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表