lujixx 发表于 2005-12-26 13:27

[求助]大家帮我看看这个程序的一个warning,怎么解决

<BR>m文件:<BR>function dx=rotor_fun(t,x);<BR>%canshu<BR>   g=9.8;<BR>   c1=1.25*10^(-5);<BR>   delta=4.5852*10^(-2);<BR>   beta=1.1404*10^(-2);<BR>   omega=50;<BR>   omegag=omega*g^(1/2)/c1^(1/2);<BR>   dx=zeros(4,1);<BR>%fangcheng<BR>   dx(1,1)=x(3);<BR>   dx(2,1)=x(4);<BR>   dx(3,1)=beta*cos(t)-delta/omega*(((2*x(1)^2+2*x(2)^2-4*x(1)*x(4)+4*x(2)*x<BR>(3))/(1-x(1)^2-x(2)^2)^(1/2)/(2+x(1)^2+x(2)^2)+(pi-16/pi/(2+x(1)^2+x(2)^2))*<BR>(x(1)*x(3)+x(2)*x(4))/(x(1)^2+x(2)^2)^(1/2)/(1-x(1)^2-x(2)^2)^(3/2))*cos(t)+<BR>(pi*(x(1)^2+x(2)^2)^(1/2)*(1-2*(x(1)*x(4)-x(2)*x(3))/(x(1)^2+x(2)^2))/(1-x(1<BR>)^2-x(2)^2)^(1/2)/(2+x(1)^2+x(2)^2)+4*(x(1)*x(3)+x(2)*x(4))/(2+x(1)^2+x(2)^2<BR>)/(1-x(1)^2-x(2)^2))*sin(t));             <BR> dx(4,1)=beta*sin(t)-1/omega^2 -delta/omega*(((2*x(1)^2+2*x(2)^2-4*x(1)*x(<BR>4)+4*x(2)*x(3))/(1-x(1)^2-x(2)^2)^(1/2)/(2+x(1)^2+x(2)^2)+(pi-16/pi/(2+x(1)^<BR>2+x(2)^2))*(x(1)*x(3)+x(2)*x(4))/(x(1)^2+x(2)^2)^(1/2)/(1-x(1)^2-x(2)^2)^(3/<BR>2))*sin(t)-(pi*(x(1)^2+x(2)^2)^(1/2)*(1-2*(x(1)*x(4)-x(2)*x(3))/(x(1)^2+x(2)<BR>^2))/(1-x(1)^2-x(2)^2)^(1/2)/(2+x(1)^2+x(2)^2)+4*(x(1)*x(3)+x(2)*x(4))/(2+x(<BR>1)^2+x(2)^2)/(1-x(1)^2-x(2)^2))*cos(t));<BR>m文件:<BR>clear all;<BR>clc;<BR>x0=;<BR>t0=;<BR>=ode23s('rotor_fun',t0,x0);<BR>x<BR>plot(t,x(:,1));<BR>。Warning: Failure at t=1.251361e+002.Unable to meet integration tolerance<BR>s without reducing the step size below the smallest value allowed (4.445726e<BR>-013) at time t.<BR>(Type "warning off MATLAB:ode23s:IntegrationTolNotMet" to suppress this warn<BR>ing.)<BR>&gt; In D:\MATLAB\toolbox\matlab\funfun\ode23s.m at line 431<BR>In D:\MATLAB\work\rotor.m at line 5<BR>                                          

xueyi 发表于 2005-12-26 16:36

warning的意思是说:程序运行到t=1.251361e+002时出错。<BR>在时间t时,如果不减小步长,就不能满足积分误差最低容许值4.445726e-013,也就是说误差在这一点大于4.445726e-013。<BR>它给的解决办法是编辑ode。m使其误差大于默认值时不报错,<BR>我建议尽量不要改变其源程序,如果你的数学水平不是很高的话。<BR>问题可以通过减小积分步长来解决

lujixx 发表于 2005-12-26 18:01

在不改变源程序的情况下,怎么改变步长啊?<BR>options?

xueyi 发表于 2005-12-27 16:38

t0=;<BR>设置是步长,默认为1<BR>你可以这样设t0=;此时步长就是0.1<BR><BR>
页: [1]
查看完整版本: [求助]大家帮我看看这个程序的一个warning,怎么解决