- 积分
- 4
- 注册时间
- 2005-12-16
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2010-10-14 15:03:48
|
显示全部楼层
来自 新加坡
在计算楼主的问题之后才发现自己已经不爱动脑子了,想让软件解决一切问题。
看给出的杜芬方程:
ddx = -c*dx - k1*x - k2*x^2 - k3*x^3 + F*cos(w*t),其中ddx表示x的二阶导数,dx表示x的一阶导数。
因为楼主设置的k2=0,所以方程变为
ddx = -c*dx - k1*x - k3*x^3 + F*cos(w*t)
k3为负值的情况:当x>1时,x^3 > x。设s = -k3*x^3 - k1*x,那么,不管k3取多大,只要为负值,随着 x 的增大,s 将大于零,并且s的增大速度(即ds/dt)是非线性增大的。造成的结果就是 -c*dx + s > 0。
如果设原方程的右端项为r,即 r(x) = -c*dx - k1*x - k3*x^3 + F*cos(w*t) ,则原方程可以简写为
ddx = r(x) ,r(x) 是x的增函数。此时可以明白了:系统是一个不稳定系统,x将随着时间变大而越来越大。这也就是matlab给出错误的原因。不是刚性问题,更不是matlab函数的问题,而是系统本身是不稳定造成的。
clear;
t_final=2.58;
c=0.5;
k1=1;
k2=0;
k3=-0.05;
F=10;
q=0;
w=1;
y0=[0;0];
[t1,x1]=ode45('dafen',[0,t_final],y0,[],c,k1,k2,k3,w,F,q);
figure;
plot(t1,x1,'.-');
legend('x','dx')
grid on;
xlabel('Time');
function x=dafen(t,y,flag,c,k1,k2,k3,w,F,q)
x=[y(2)
F*cos(w.*t+q)-c*y(2)-k1*y(1)-k2*y(1)^2-k3*y(1)^3];
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
评分
-
1
查看全部评分
-
|