为什么解此微分方程,得出的时间序列如此之短。
%以下是状态方程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:如何解决处理此问题? 这种错误,只有你自己才知道了:@L 我尝试过改变积分时间或积分精度,都不行,考虑了一段时间才发的帖子,望遇见过这种情况和有过这种经历的会员,不吝赐教。拜托各位了。
回复 3楼 的帖子
这种情况比较复杂,以前很多人遇到检查参数、检查程序(这个你自己知道);
方程出现刚性,已经发散了,这时候需要采用适合与刚性的方法进行求解 试了一下,也出现上面的错误提示,不明白问题出在什么地方了,
另外,ode45是变步长的算法, tspan=,人为的给定义一个固定的步长,没什么意义吧,
改为后,得到的分别是297*1和297*8
页:
[1]