用瑞利里兹法求解简支梁的前6阶固有频率和振型以及计算当梁受一10N简谐力、作用频率1-1000Hz、作用点在距离一端0.15m处时的强迫振动,获取梁中心点处的振动加速度响应-matlab程序
时间: 2024-03-15 11:47:52 浏览: 229
好的,我可以为您提供帮助。以下是用Matlab编写的程序。
```matlab
% 定义梁的参数
L = 1; % 简支梁的长度,单位:m
E = 2e11; % 杨氏模量,单位:Pa
rho = 7800; % 密度,单位:kg/m^3
b = 0.01; % 宽度,单位:m
h = 0.02; % 高度,单位:m
A = b * h; % 横截面积,单位:m^2
I = b * h ^ 3 / 12; % 惯性矩,单位:m^4
% 建立矩阵
n = 6; % 求前6阶固有频率和振型
M = zeros(n, n);
K = zeros(n, n);
for i = 1:n
for j = 1:n
if i == j
M(i, j) = rho * A * L / (n + 1);
K(i, j) = E * I * pi ^ 2 * i ^ 2 / L ^ 2;
else
M(i, j) = rho * A * L / ((n + 1) ^ 2) * (-1) ^ (i + j);
K(i, j) = E * I * pi ^ 2 * i * j / L ^ 2 * ((-1) ^ (i + j) + 1);
end
end
end
% 求解特征值和特征向量
[V, D] = eig(K, M);
% 输出前6阶固有频率和振型
for i = 1:n
f = sqrt(D(i, i)) / (2 * pi);
fprintf('第%d阶固有频率为%fHz\n', i, f);
x = linspace(0, L, 1000);
y = [0; V(:, i); 0];
plot(x, y, 'LineWidth', 2);
xlabel('位置(m)');
ylabel('挠度(m)');
title(sprintf('第%d阶振型', i));
pause;
end
% 计算强迫振动响应
f = 1:1000; % 作用频率,单位:Hz
w = 2 * pi * f; % 角频率
x = 0.15; % 作用点距离梁左端的距离,单位:m
P = 10; % 作用力,单位:N
a = zeros(size(f)); % 振动加速度响应
for i = 1:length(f)
A1 = P / (E * I * w(i) ^ 2 - m * w(i) ^ 2 * x ^ 2);
A2 = P * x / (E * I * w(i) ^ 2 - m * w(i) ^ 2 * x ^ 2);
a(i) = abs(A1) * sqrt(1 + (E * I * w(i) ^ 2 * x ^ 2 - m * w(i) ^ 2) ^ 2 / (P ^ 2 + E ^ 2 * I ^ 2 * w(i) ^ 4 * x ^ 4 + 2 * E * I * w(i) ^ 2 * P * x ^ 2));
end
% 输出振动加速度响应
plot(f, a, 'LineWidth', 2);
xlabel('频率(Hz)');
ylabel('振动加速度响应(m/s^2)');
title('梁中心点处的振动加速度响应');
```
希望能对您有所帮助!
阅读全文