octopussheng 发表于 2007-6-28 09:14

用ode45求解出现的问题

用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='; t0=0; tf=1000;
=ode45(@ode_equation,,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 编辑 ]

octopussheng 发表于 2007-6-28 19:08

原因基本知道了,和激励参数的选取有很大的关系!

kangarooli 发表于 2010-7-7 10:16

那该怎么选取,才能得到想要的结果呢,有什么经验吗,请指点,谢谢前辈
我最近也在做一个四维的,总是得不到理想的输出
页: [1]
查看完整版本: 用ode45求解出现的问题