如何在matlab中求解8个微分方程组

时间:2014-09-19 22:09:10

标签: matlab system ode

我正在研究一个具有4个自由度的动态问题,这导致系统具有4个二阶DE。所以,我开始尝试用心爱的ODE函数来解决它。

然而,输出是一个指数响应,而不是预期的振荡响应,直到像2 ^ 208这样的巨大数字!我搜索了代码,但我无法找到问题所在。

任何帮助将不胜感激!

以下是代码的两部分:

function f=diffeq2(t,y) 
f=zeros(8,1);

M=3;
M1=3;
M2=M1;
L=5;
h=2;
J=M*(L^2+h^2)/12;

a=1.5;
b=1;
v=1;

cf1=10;
cf2=5;
cr1=16;
cr2=12;

kf1=20;
kf2=30;
kr1=15;
kr2=25;

m=[M M1 M2 J];
m=diag(m); 

c=[(cf1+cf2) 0 -cf2 -cf2*L/2;
    0 cr1+cr2 -cr2 cr2*L/2;
    -cf2 -cr2 cf2+cr2 (cf2-cr2)*L/2;
    -cf2 cr2 cf2-cr2 (cf2+cr2)*L/2];


k=[(kf1+kf2) 0 -kf2 -kf2*L/2;
    0 kr1+kr2 -kr2 kr2*L/2;
    -kf2 -kr2 kf2+kr2 (kf2-kr2)*L/2;
    -kf2 kr2 kf2-kr2 (kf2+kr2)*L/2];


C=[cf1;cr1;0;0];
K=[kf1;kr1;0;0];

F=b*sin(a*v*t);
dF=b*a*v*cos(a*v*t);

f(1)=y(2);
f(2)=y(4);
f(3)=y(6);
f(4)=y(8);
f(5)=(K(1,1)*F+C(1,1)*dF-c(1,1)*y(2)-c(1,2)*y(4)-c(1,3)*y(6)-c(1,4)*y(8)-k(1,1)*y(1)-c(1,2)*y(3)-c(1,3)*y(5)-c(1,4)*y(7))/m(1,1);
f(6)=(K(2,1)*F+C(2,1)*dF-c(2,1)*y(2)-c(2,2)*y(4)-c(2,3)*y(6)-c(2,4)*y(8)-k(2,1)*y(1)-c(2,2)*y(3)-c(2,3)*y(5)-c(2,4)*y(7))/m(2,2);
f(7)=(K(3,1)*F+C(3,1)*dF-c(3,1)*y(2)-c(3,2)*y(4)-c(3,3)*y(6)-c(3,4)*y(8)-k(3,1)*y(1)-c(3,2)*y(3)-c(3,3)*y(5)-c(3,4)*y(7))/m(3,3);
f(8)=(K(4,1)*F+C(4,1)*dF-c(4,1)*y(2)-c(4,2)*y(4)-c(4,3)*y(6)-c(4,4)*y(8)-k(4,1)*y(1)-c(4,2)*y(3)-c(4,3)*y(5)-c(4,4)*y(7))/m(4,4);

end


tspan=(0:.01:200);
y0=[0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;]; 
[t,y]=ode45(@diffeq2,tspan,y0); 

% subplot(2,1,1)
plot(t,y(:,5)); 
xlabel('t'); ylabel('x1(t)'); 
title(' x1(t) vs t'); 

% subplot(2,1,2) 
% plot(t,y(:,3));
% xlabel('t'); 
% ylabel('x2(t)'); 
% title('x2(t) vs t');
% 
% subplot(2,1,3)
% plot(t,y(:,5));
% xlabel('t'); 
% ylabel('x3(t)'); 
% title('x3(t) vs t');
% 
% subplot(2,1,4)
% plot(t,y(:,7));
% xlabel('t'); 
% ylabel('\theta(t)'); 
% title('\theta(t) vs t')

提前致谢 多尔万

0 个答案:

没有答案