我正在研究一个具有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')
提前致谢 多尔万