声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1114|回复: 4

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

[复制链接]
发表于 2008-6-16 12:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
%以下是状态方程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=[0,0,0,0,0.35,0,0,0];
T=2*pi/w;

[t,x]=ode45('caponeforce',[0:T/100:5000*T],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:如何解决处理此问题?
回复
分享到:

使用道具 举报

发表于 2008-6-16 19:22 | 显示全部楼层
这种错误,只有你自己才知道了:@L
 楼主| 发表于 2008-6-17 12:51 | 显示全部楼层
我尝试过改变积分时间或积分精度,都不行,考虑了一段时间才发的帖子,望遇见过这种情况和有过这种经历的会员,不吝赐教。拜托各位了。
发表于 2008-6-17 22:22 | 显示全部楼层

回复 3楼 的帖子

这种情况比较复杂,以前很多人遇到
检查参数、检查程序(这个你自己知道);
方程出现刚性,已经发散了,这时候需要采用适合与刚性的方法进行求解
发表于 2008-6-18 09:21 | 显示全部楼层
试了一下,也出现上面的错误提示,不明白问题出在什么地方了,

另外,ode45是变步长的算法, tspan=[0:T/100:5000*T],人为的给定义一个固定的步长,没什么意义吧,
改为[0,5000*T]后,得到的分别是297*1和297*8
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-21 08:31 , Processed in 0.089148 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表