已知质量矩阵和刚度矩阵M=[10 0;0 2],K=[1000 -200;-200 200],麻烦使用matlab程序来进行计算系统的响应,其中系统受到激励力F={100;0}sin10*t,如何编程绘制波形图,同时能够利用ode命令来进行求解不会发生数组大小不兼容的情况。
时间: 2023-06-20 22:07:09 浏览: 91
可以使用matlab的ode45函数来求解系统的响应。先定义系统的状态空间方程:
dx/dt = Ax + Bu
y = Cx + Du
其中,A = inv(M)*K,B = inv(M)*F,C = [1 0],D = 0。
然后,定义一个函数,包含系统的状态空间方程和激励力F的定义:
```
function [dxdt, y] = sys_eqn(t, x, F, M, K)
A = inv(M)*K;
B = inv(M)*F*sin(10*t);
C = [1 0];
D = 0;
dxdt = A*x + B;
y = C*x + D;
end
```
接着,使用ode45函数进行求解:
```
M = [10 0; 0 2];
K = [1000 -200; -200 200];
F = [100; 0];
[t, x] = ode45(@(t, x) sys_eqn(t, x, F, M, K), [0 10], [0; 0]);
y = zeros(size(t));
for i = 1:length(t)
[~, y(i)] = sys_eqn(t(i), x(i,:)', F, M, K);
end
```
最后,绘制波形图:
```
plot(t, y);
xlabel('Time (s)');
ylabel('Displacement');
title('System Response');
```
运行程序,即可得到系统的响应波形图。
相关问题
已知质量矩阵和刚度矩阵M=[10 0;0 2],K=[1000 -200;-200 200],麻烦使用matlab程序来进行绘制响应的波形图和傅里叶变换的幅值谱图。(fft时注意横纵坐标的数值,fourier变换后纵坐标需要除以N/2,fft(x)/N*2.。)
好的,以下是Matlab程序:
```
%定义质量矩阵和刚度矩阵
M = [10 0; 0 2];
K = [1000 -200; -200 200];
%求解特征值和特征向量
[V, D] = eig(K, M);
%求解自然频率和阻尼比
omega_n = sqrt(diag(D));
zeta = [0.1 0.2];
%定义时间范围和时间步长
t = 0:0.01:10;
dt = t(2) - t(1);
%定义激励力信号
F = zeros(size(t));
F(1:100) = 10;
%定义初始位移和速度
q0 = [0; 0];
v0 = [0; 0];
%求解强迫响应
q = zeros(2, length(t));
for i = 1:length(zeta)
c = 2*zeta(i)*omega_n(i);
for j = 2:length(t)
q(:, j) = exp(-zeta(i)*omega_n(i)*t(j))*((q0 - V(:, i)*((V(:, i)'*q0)/(V(:, i)'*M*V(:, i))))*cos(omega_n(i)*sqrt(1-zeta(i)^2)*t(j))...
+ (v0 + (q0 - V(:, i)*((V(:, i)'*q0)/(V(:, i)'*M*V(:, i))))*zeta(i)*omega_n(i)*V(:, i)/(V(:, i)'*M*V(:, i))...
*sin(omega_n(i)*sqrt(1-zeta(i)^2)*t(j)))/sqrt(1-zeta(i)^2)...
+ V(:, i)*(F(j-1)/omega_n(i)/omega_n(i)/sqrt((1-zeta(i)^2)^2+(2*zeta(i)*sqrt(1-zeta(i)^2))^2));
end
%绘制响应的波形图
figure(i)
plot(t, q(1, :), 'r', t, q(2, :), 'b')
xlabel('Time (s)')
ylabel('Displacement (m)')
legend('q1', 'q2')
title(['Forced Response with \zeta = ' num2str(zeta(i))])
%求解傅里叶变换的幅值谱图
N = length(q(1, :));
Y = fft(q(1, :))/N*2;
f = 1/dt*(0:N/2-1)/N;
figure(i+2)
plot(f, abs(Y(1:N/2)))
xlabel('Frequency (Hz)')
ylabel('Magnitude')
title(['FFT of q1 with \zeta = ' num2str(zeta(i))])
end
```
程序中,首先定义了质量矩阵M和刚度矩阵K,然后求解特征值和特征向量,进而得到自然频率和阻尼比。接着定义了时间范围和时间步长,并设定了激励力信号、初始位移和速度。然后,利用强迫响应的公式求解了两个自由度系统的响应,并分别绘制了波形图和傅里叶变换的幅值谱图。最后,利用Matlab的fft函数进行傅里叶变换,并注意将变换后的结果除以N/2。
已知质量矩阵和刚度矩阵m=[3 0;0 5],k=[3 -2;-2 4],求系统在 x=[2;0],v=[0;3]条件下初始条件下的响应
根据动力学基本方程:
m*d^2x/dt^2 + k*x = f
其中,f为外力,当f=0时,可得到自由振动的方程:
m*d^2x/dt^2 + k*x = 0
将质量矩阵和刚度矩阵代入,得到特征方程:
|3-lambda -2 | |x1| |0|
|-2 4-lambda| * |x2| = |0|
解得特征值为lambda1=1,lambda2=6。
对于每个特征值,都可以计算得到对应的特征向量,例如:
(3-1)x1 - 2x2 = 0 => x1 = 2/3x2
-2x1 + (4-1)x2 = 0 => x2 = 2x1
因此,特征向量为v1=[2/3;1],v2=[2;1]。
将初始条件代入,可以得到:
x(t) = c1*v1*sin(sqrt(lambda1)*t) + c2*v2*sin(sqrt(lambda2)*t)
v(t) = c1*v1*sqrt(lambda1)*cos(sqrt(lambda1)*t) + c2*v2*sqrt(lambda2)*cos(sqrt(lambda2)*t)
根据初始条件x=[2;0], v=[0;3],可以解得:
c1 = 0
c2 = [0; 3/sqrt(34)]
因此,系统在初始条件下的响应为:
x(t) = [4/(3*sqrt(34))] * [2;1] * sin(sqrt(6)*t)
v(t) = [2/sqrt(34)] * [2;1] * cos(sqrt(6)*t)
阅读全文