| 
 | 
 
一个常见的三自由度质量-弹簧系统,其动力学方程为: 
[M]{x''}+[K]{x}={F} 
质量、刚度和激励矩阵分别为: 
M=diag([1;1;1]);k=[3 -1 0;-1 2 -1;0 -1 3];F={sin(3*t);0;0}; 
我分别用模态叠加法和Runge-Kutta算法求解,但是两种解法得到的结果却不相同,请问这是什么原因,何种方法才是正确的。 
这是我用模态叠加法的代码: 
%利用模态叠加法分析扭转振动的实例 
%定义符号,a、b为阻尼的比例系数 
syms t; 
%齿轮系统参数 
m1=1;m2=1;m3=1;k1=2;k2=2;k3=1;k4=2; 
M=diag([m1;m2;m3]); 
% K=[k1+k2 -k2 0; 
%     -k2 k2+k3 -k3; 
%     0 -k3 k3+k4]; 
K=[3 -1 0;-1 2 -1;0 -1 3]; 
F1=1;F2=0;F3=0;w=3; 
w0(1)=w;w0(2)=0*w;w0(3)=0*w; 
f1=F1*sin(w0(1)*t);f2=F2*sin(w0(2)*t);f3=F3*sin(w0(3)*t); 
%求振动系统的正则振型矩阵和固有频率 
[N,V]=eig(K,M); 
ModeValue=sqrt(diag(V)); 
w1=ModeValue(1); 
w2=ModeValue(2); 
w3=ModeValue(3); 
%定义振动系统的初始条件 
x0=[0 0 0]'; 
X0=N'*M*x0; 
    a1=X0(1); 
    a2=X0(2); 
    a3=X0(3); 
%正则变换,求出正则坐标下的激励力 
Q=[f1;f2;f3]; 
Q_Fai=N'*[f1;f2;f3]; 
Qn=N'*diag([F1;F2;F3]); 
% Qn1=N'*[f1;0;0]; 
% Qn2=N'*[0;f2;0]; 
% Qn3=N'*[0;0;f3]; 
Q_Fai1=N'*[f1;0;0]; 
Q_Fai2=N'*[0;f2;0]; 
Q_Fai3=N'*[0;0;f3]; 
%求出在正则坐标下的响应 
n=length(M); 
%求系统的无阻尼受迫振动解 
for i=1:3 
    b1(i)=1/(ModeValue(i)^2-w^2); 
    b2(i)=1/(ModeValue(i)^2-(3*w)^2); 
    b3(i)=1/(ModeValue(i)^2-(8*w)^2); 
end 
Xn1=b1'.*Q_Fai1; 
Xn2=b2'.*Q_Fai2; 
Xn3=b3'.*Q_Fai3; 
x1=N*Xn1; 
x2=N*Xn2; 
x3=N*Xn3; 
x=x1+x2+x3; 
% x=C*Xn; 
% Qn=N'*[F1;F2;F3]; 
x=-0.088.*[1;2;1].*sin(3*t)-2.63.*[-1.732;0;1.732].*sin(3*t)+0.21.*[1.414;-1.414;1.414].*sin(3*t) 
%定义仿真时间和采样点数 
t=0:0.01:100; 
%对结果进行fft变换 
u1=eval(x(1)); 
u2=eval(x(2)); 
u3=eval(x(3));(省去后面的画图和FFt变换部分), 
 
 
下面是调用ode45函数的代码 
%test4.m 
function f=test4(t,y); 
m1=1;m2=1;m3=2;k=1; 
U=[0 1 0 0 0 0; 
    -3 0 1 0 0 0; 
    0 0 0 1 0 0; 
    1 0 -2 0 1 0; 
    0 0 0 0 0 1; 
    0 0 1 0 -3 0]; 
f=U*y+[0 sin(3*t) 0 0 0 0]'; 
 
%test4Result.m 
[t,y]=ode45('test4',[0:0.01:100],[0 0 0 0 0 0]'); 
u1=y(:,1); 
u2=y(:,3); 
u3=y(:,5); 
(后面省去画图和fft变换部分) |   
 
 
 
 |