用matlab绘制出三个质量块在六个弹簧的作用下的位移时间曲线以及幅频特征曲线 ,给我完整的程序
时间: 2024-02-18 21:06:31 浏览: 116
以下是一个简单的 MATLAB 程序,用于绘制三个质量块在六个弹簧的作用下的位移时间曲线和幅频特征曲线:
```matlab
% 定义初始参数
m = [1 2 3]; % 质量块
k = [3 4 5 6 7 8]; % 弹簧刚度
x0 = [0 0 0 0 0 0]; % 初始位移
v0 = [0 0 0 0 0 0]; % 初始速度
f = [0 0 0]; % 外力
% 定义系统方程
A = [-(k(1)+k(2)) k(2) 0; k(2) -(k(2)+k(3)) k(3); 0 k(3) -(k(4)+k(3))];
B = [1/m(1) 0 0; 0 1/m(2) 0; 0 0 1/m(3)];
C = [0 0 0; 0 0 0; 0 0 k(5)/m(3)];
D = [0 0 0; 0 0 0; 0 0 k(6)/m(3)];
E = [1 0 0; 0 1 0; 0 0 1];
% 定义时间范围和时间步长
t = 0:0.01:10;
% 利用ode45求解系统的运动方程,并得到位移和速度
[t,x] = ode45(@(t,x) [zeros(3) E; -B\A -B\C; zeros(3) -D\A] * [x; zeros(3,1)] + [zeros(3,1); B\f'], t, [x0 v0]);
% 绘制位移时间曲线
figure(1)
plot(t,x(:,1),'r',t,x(:,2),'g',t,x(:,3),'b');
title('Mass Displacement vs Time')
xlabel('Time (s)')
ylabel('Displacement (m)')
legend('m1','m2','m3')
% 计算并绘制幅频特征曲线
X1 = fft(x(:,1));
X2 = fft(x(:,2));
X3 = fft(x(:,3));
f = (0:length(X1)-1)*(1/(t(2)-t(1)))/length(X1);
figure(2)
plot(f,abs(X1),'r',f,abs(X2),'g',f,abs(X3),'b');
title('Magnitude-Frequency Response')
xlabel('Frequency (Hz)')
ylabel('Magnitude')
legend('m1','m2','m3')
```
这个程序会绘制出两张图。第一张图显示三个质量块的位移随时间的变化,第二张图显示了幅频特征曲线。
阅读全文