声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2251|回复: 2

[编程技巧] 用ode45求解出现的问题

[复制链接]
发表于 2007-6-28 09:14 | 显示全部楼层 |阅读模式

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

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

x
用ode45求解一个两自由度二阶微分方程出现的问题。
程序如下:
微分方程定义:
function dx=ode_equation(t,x)
%%%%%%%       基本参数
m1=337; m2=50; c1=1228; c2=1210;
k0=-2316.4; k1=12394; k2=-73696; k3=3170400; k4=98000; k5=1850000;
B10=k0/m1; B11=k1/m1; B12=k2/m1; B13=k3/m1;
B20=k0/m2; B21=k1/m2; B22=k2/m2; B23=k3/m2; B24=k4/m2; B25=k5/m2;
C11=c1/m1; C12=c2/m1; C21=c1/m2; C22=c2/m2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A=0.08; omiga=5; zr=A*sin(omiga*t);%%%%%%%激励输入
dx(1)=x(2);
dx(2)=-B10-B11*(x(1)-x(3))-B12*(x(1)-x(3)).^2-B13*(x(1)-x(3)).^3-C11*(x(2)-x(4))-C12*(x(2)-x(4)).^2;
dx(3)=x(4);
dx(4)=B20+B21*(x(1)-x(3))+B22*(x(1)-x(3)).^2+B23*(x(1)-x(3)).^3+C21*(x(2)-x(4))+C22*(x(2)-x(4)).^2+B24*(x(3)-zr)+B25*(x(3)-zr).^2;
dx=dx(:);


用ode45求解的代码:
x0=[0 0 0 0]'; t0=0; tf=1000;
[t,x] =ode45(@ode_equation,[t0,tf],x0);
plot(x(500:end,1),x(500:end,2));
figure; plot(x(500:end,3),x(500:end,4));

出现的错误信息:
Warning: Failure at t=4.369739e-001.  Unable to meet integration tolerances without reducing the step size below the smallest value allowed (8.881784e-016) at time t.
> In <a href="error:C:\MATLAB7\toolbox\matlab\funfun\ode45.m,355,1">ode45 at 355</a>
  In <a href="error:C:\MATLAB7\work\ode_equation.m,6,1">solve_ode_equation at 6</a>

我尝试修改了一下激励,将激励减小,发现可以出来比较好的结果。但是请问还有没有别的方法来解决呢?

另:ode23和ode15s都尝试过,也出现了同样的问题!

[ 本帖最后由 ChaChing 于 2010-7-7 20:39 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-6-28 19:08 | 显示全部楼层
原因基本知道了,和激励参数的选取有很大的关系!

评分

1

查看全部评分

发表于 2010-7-7 10:16 | 显示全部楼层
那该怎么选取,才能得到想要的结果呢,有什么经验吗,请指点,谢谢前辈
我最近也在做一个四维的,总是得不到理想的输出
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-6-17 23:05 , Processed in 0.051536 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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