wxmtju 发表于 2006-9-4 11:10

matlab解微分方程组出错,请大侠帮忙

function ydot=AUVfun(t,y)
%AUV的数学模型
%一些基本参数
a=195;b=20;c=80;d=1000;e=sqrt(y(1)^2+y(2)^2);f=0.086;
g=0.26;h=261;i=0;j=14;k=0;l=-2.25;m=0;n=-0.404;
bh=3.2;aa=y(3)*bh/e;ab=y(4)*bh/e;ac=-0.7;ad=6.95;
ae=0;af=0.075;ag=0;ah=1911;ai=0;aj=0;ak=0;al=0;am=0;an=0;
ba=180;bb=0.67;bc=0;bd=-0.14;be=-0.67;bf=0;bg=asin(y(2)/e);
bi=142;
%垂直舵角输入--弧度
bj=5*pi/180;
%A[]=B
A=[a+b,0,0,0,0,0,0,0;
   0,a+h,0,-a*i+j,0,0,0,0;
   0,0,ad+ae,0,0,0,0,0;
   0,-a*i+j,0,bi+ba,0,0,0,0;
   0,0,0,0,1,0,0,0;
   0,0,0,0,0,1,0,0;
   0,0,0,0,0,0,1,0;
   0,0,0,0,0,0,0,1;];
B=[c+1/2*d*e^2*f*g;
   a*y(1)*y(4)-k*sin(y(5))+1/2*d*e^2*f*(l*bg+m*aa+n*ab+ac*bj);
   a*y(1)*af*y(4)+ag+ah*(af*sin(y(5))+ai*cos(y(5)))+1/2*d*e^2*f*bh*(aj*bg+ak*aa+al*ab+am*bj+an*bf);
   a*i*y(1)*(4)-ah*i*sin(y(5))+1/2*d*e^2*f*bh*(bb*bg+bc*aa+bd*ab+be*bj);
   y(3);
   y(4)*cos(y(5));
   y(1)*cos(y(6))+y(2)*sin(y(6))*cos(y(5));
   -y(1)*sin(y(6))+y(2)*cos(y(6))*cos(y(5));];

ydot=inv(A)*B;
×××××××××××××××××××××××××××××××××
y0=;
=ode45('AUVfun',,y0);
plot(y(:,7),y(:,8))
xlabel('x')
ylabel('y')

解的过程中出现如下错误:
Warning: Failure at t=6.092724e+000.Unable to meet integration tolerances without reducing the step size below the smallest value allowed (2.164570e-014) at time t.
(Type "warning off MATLAB:ode45:IntegrationTolNotMet" to suppress this warning.)
> In C:\MATLAB6p5\toolbox\matlab\funfun\ode45.m at line 335
In G:\matlab work\AUVdel.m at line 2

请问该如何解决?
谢谢

toes 发表于 2006-9-4 11:34

数值求解的时候即使减小到最小的允许步长还是得不到满足设定精度的结果。

可能是由于你的方程的性质决定的,比如可能给的方程有错误,比如可能是刚性方程。
一般来说,ode45的精度要求是比较高的,可以换种方法;但默认最小允许步长一般情况下已经够小的了。建议先检查方程是否给错,然后换一种ode函数试试,比如用ode23或ode23tb。

个人意见,仅供参考。

wxmtju 发表于 2006-9-4 11:50

换了解法还是不行
错误是一样的

请大侠们帮忙

谢谢了
页: [1]
查看完整版本: matlab解微分方程组出错,请大侠帮忙