陆永杰 发表于 2008-6-16 12:55

为什么解此微分方程,得出的时间序列如此之短。

%以下是状态方程caponeforce.m文件
function dxdt=caponeforce(t,x,flag,w)
dxdt=zeros(8,1);
m1=3.0;m2=0.35;R=0.015;
b=0.18;
k=5.67*10^6;
L=0.01;
c=0.000250;
wn=sqrt(2*k/m1);

Dw=w/wn;
B= m2/m1;
B1=m1/m2;
g=9.8;
w1=m1*g;
u=0.05;
s=u*w*R*L/(w1/2)*(R/c)^2*(L/2/R)^2;%s为修正数
m=m1*c*w^2/w1/s;

a=atan((x(7)+2*x(6))/(x(5)-2*x(8)))-pi/2*sign((x(7)+2*x(6))/(x(5)-2*x(8)))-pi/2*sign(x(7)+2*x(6));
G=2/sqrt(1-x(5)^2-x(7)^2)*(pi/2+atan((x(7)*cos(a)-x(5)*sin(a))/sqrt(1-x(5)^2-x(7)^2)));
S=(x(5)*cos(a)+x(7)*sin(a))/(1-(x(5)*cos(a)+x(7)*sin(a))^2);
V=(2+(x(7)*cos(a)-x(5)*sin(a))*G)/(1-x(5)^2-x(7)^2);

fx=sqrt((x(5)-2*x(8))^2+(x(7)+2*x(6))^2)/(1-x(5)^2-x(7)^2)*(3*x(5)*V-sin(a)*G-2*cos(a)*S);
fy=sqrt((x(5)-2*x(8))^2+(x(7)+2*x(6))^2)/(1-x(5)^2-x(7)^2)*(3*x(5)*V+cos(a)*G-2*sin(a)*S);

dxdt=[ x(2);
          b*cos(t)-1/Dw^2*(x(1)-x(5));
          x(4);
         b*sin(t)-1/m/s-1/Dw^2*(x(3)-x(7));
         x(6);
         B1*fx/m-B1*(x(5)-x(1))/(2*Dw^2);
          x(8);
          B1*fy/m-B1*(x(7)-x(3))/(2*Dw^2)-1/m/s];




function suanli4_2   %主程序
w=50;
x0=;
T=2*pi/w;
=ode45('caponeforce',,x0,[],w);

tsize= size(t)
xsize= size(x)
如上得出的
t应为:500001χ1矩阵,
X应为:500001χ8矩阵

而实际得出的t为:150*1

                  X为:150*8

出现的警告语句为:
Warning: Failure at t=1.876232e-001.
Unable to meet integration tolerances without reducing the step size below the smallest value allowed (4.440892e-016) at time t.
> In ode45 at 355

In suanli4_2 at ***

tsize =150*1
xsize =150*8

请问大家:
1:该问题产生的具体原因是什么(上述英文翻译为:不减小步长,就无法处理积分容差……)?
2:如何解决处理此问题?

sigma665 发表于 2008-6-16 19:22

这种错误,只有你自己才知道了:@L

陆永杰 发表于 2008-6-17 12:51

我尝试过改变积分时间或积分精度,都不行,考虑了一段时间才发的帖子,望遇见过这种情况和有过这种经历的会员,不吝赐教。拜托各位了。

无水1324 发表于 2008-6-17 22:22

回复 3楼 的帖子

这种情况比较复杂,以前很多人遇到
检查参数、检查程序(这个你自己知道);
方程出现刚性,已经发散了,这时候需要采用适合与刚性的方法进行求解

chicll 发表于 2008-6-18 09:21

试了一下,也出现上面的错误提示,不明白问题出在什么地方了,

另外,ode45是变步长的算法, tspan=,人为的给定义一个固定的步长,没什么意义吧,
改为后,得到的分别是297*1和297*8
页: [1]
查看完整版本: 为什么解此微分方程,得出的时间序列如此之短。