24小时热门版块排行榜    

查看: 405  |  回复: 3

657801288

铁虫 (初入文坛)

[求助] 编写控制程序

M文件代码如下:
function dx=guidance(t,x,u)
if 40     u=3.7*10e-4*exp(-1.371*10e-4*(x(3)-40*10e+3));
elseif 20     u=2.8*10e-3*exp(-1.92*10e-4*(x(3)-20*10e+3));
elseif 0     u=0.01417*exp(-0.8109*10e-4*x(3));
end
dx=[-10.0211*u*x(1)^2/2200-3.716*3395^2*sin(x(2))/(3395+x(3))^2;
    -0.837*u*x(1)/2200-3.716*3395^2*cos(x(2))/x(1)/(3395+x(3))^2+x(1)*cos(x(2))/(3395+x(3));
    x(1)*sin(x(2));
    3395*x(1)*cos(x(2))/(3395+x(3))];
end
命令行如下:
x=ones(1,4);t=1;u=2;dx=guidance(t,x,u);   
>> x0=[6000;-15/180;125;0];
>> [t,y]=ode45(@guidance,[0,100],x0);
结果报错:
Warning: Failure at t=6.283114e-220.  Unable to meet integration
tolerances without reducing the step size below the smallest value
allowed (1.258037e-234) at time t.
> In ode45 at 371
请问该如何解决?
还有一部分是如何在终点时间 tf 时,使x3(tf)=7,x1(tf)=400,请问该如何编写代码?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ifly21cn

银虫 (初入文坛)

【答案】应助回帖

[t,y]=ode45(@guidance,[0,100],x0);
改成
[t,y]=ode45(@guidance,[0:0.000001:100],x0);
试试看。
积分的步长太短了
2楼2012-11-06 09:14:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

657801288

铁虫 (初入文坛)

引用回帖:
2楼: Originally posted by ifly21cn at 2012-11-06 09:14:47
=ode45(@guidance,,x0);
改成
=ode45(@guidance,,x0);
试试看。
积分的步长太短了

这样还是出现了问题。
??? Out of memory. Type HELP MEMORY for your options.
3楼2012-11-08 08:28:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ifly21cn

银虫 (初入文坛)

【答案】应助回帖

引用回帖:
3楼: Originally posted by 657801288 at 2012-11-07 18:28:51
这样还是出现了问题。
??? Out of memory. Type HELP MEMORY for your options....

步长小,内存不够用了。增加matlab的虚拟内存
4楼2012-11-08 10:38:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 657801288 的主题更新
信息提示
请填处理意见