matlab多自由度体系振型叠加法强迫振动求解
时间: 2023-09-22 16:05:31 浏览: 441
多自由度体系的振型叠加法强迫振动求解步骤如下:
1. 建立多自由度体系的动力学方程,通常采用拉格朗日方程或牛顿第二定律。
2. 将动力学方程化为矩阵形式,得到系统的质量矩阵、刚度矩阵和阻尼矩阵。
3. 求解系统的特征方程,得到系统的固有频率和振型。
4. 根据所求得的多个固有频率和振型,构造出系统的模态矩阵。
5. 将模态矩阵进行正交化处理,得到正交模态矩阵。
6. 根据所施加的外力的特点,选择合适的激励函数。
7. 将激励函数分解为各个固有频率的分量,得到各个自由度的激励函数。
8. 利用正交模态矩阵将各个自由度的激励函数转换为模态激励函数。
9. 根据模态激励函数和各个模态的振型,得到各个自由度的振动响应。
10. 将各个自由度的振动响应进行叠加,得到系统的总振动响应。
相关问题
matlab多自由度体系振型叠加法采用正则坐标求解无阻尼强迫振动
在多自由度体系中,振型叠加法是一种常用的求解无阻尼强迫振动的方法。其基本思想是将体系的振动分解为若干个简谐振动的叠加,每个简谐振动的振幅和相位都由初始条件决定。
具体来说,假设多自由度体系有n个自由度,其运动方程可以表示为:
Mq'' + Kq = F cos(ωt)
其中,M是质量矩阵,K是刚度矩阵,q是位移向量,F是外力向量,ω是外力的角频率。
为了求解这个方程,可以采用正则坐标法。将位移向量q分解为正则坐标q1、q2、...、qn,即:
q = Qξ
其中,Q是正交矩阵,ξ是正则坐标向量。将这个式子代入原方程,得到:
Q'MQξ'' + Q'KQξ = Q'F cos(ωt)
为了使这个方程简化,可以令:
Q'KQ = ω^2
这样,原方程就变成了:
ξ'' + ω^2ξ = Q'F cos(ωt)M^-1Qξ
这个式子可以看作是n个单自由度体系的叠加,每个单自由度体系的运动方程为:
ξi'' + ωi^2ξi = qi'F cos(ωt)Mi^-1qiξi
其中,ωi是第i个正则坐标对应的角频率,qi是Q的第i列,Mi是M的第i行。
这个方程可以通过求解单自由度体系的振动来得到整个体系的振动。每个单自由度体系的振动可以表示为:
ξi(t) = Ai cos(ωit + φi)
其中,Ai和φi是待定系数,需要根据初始条件来确定。将这个式子代入单自由度体系的运动方程,得到:
Ai(ωi^2 - ω^2)cos(ωit + φi) = qi'F cos(ωt)Mi^-1qiAi cos(ωit + φi)
因为ωi不等于ω,所以只有当ωi等于ω时,才会有振幅Ai不为零。因此,可以将上式中的cos(ωit + φi)替换为cos(ωt)和sin(ωt),得到:
Ai(ωi^2 - ω^2) = qi'F Mi^-1qi
Aiφi = -qi'F Mi^-1qi/[(ωi^2 - ω^2)Ai]
根据这两个式子,可以求解出每个单自由度体系的振幅和相位,进而得到整个体系的振动。
matlab多自由度体系振型叠加法采用正则坐标求解无阻尼强迫振动 代码实现
以下是一个简单的 Matlab 代码实现多自由度体系振型叠加法求解无阻尼强迫振动的过程。
首先定义系统的参数,包括质量矩阵、刚度矩阵和外力向量:
```matlab
% 定义系统参数
M = [1 0; 0 2]; % 质量矩阵
K = [3 -1; -1 2]; % 刚度矩阵
F = [2*sin(2*t); 0]; % 外力向量
```
接着,由于采用正则坐标求解,需要计算正则坐标变换矩阵:
```matlab
% 计算正则坐标变换矩阵
[V, D] = eig(K, M); % 求解广义特征值问题
P = V' * M; % 正则坐标变换矩阵
```
然后,根据正则坐标求解每个振型的振幅和相位,将其叠加得到总振动响应:
```matlab
% 叠加各振型的振动响应
X = zeros(length(F), 1); % 初始化总振动响应
for i = 1:length(F)
w = sqrt(D(i, i)); % 求解振型频率
C = P(i, :) * F / (w^2 - D(i, i)); % 求解振幅
phi = atan2(w * (P(i, 2) * F(1) - P(i, 1) * F(2)), ...
w^2 - D(i, i) - w * (P(i, 1)^2 * F(1) + P(i, 2)^2 * F(2))); % 求解相位
X = X + C * V(:, i) * sin(w * t + phi); % 叠加振动响应
end
```
最后,将得到的总振动响应作图展示:
```matlab
% 绘制振动响应图像
plot(t, X);
xlabel('Time (s)');
ylabel('Displacement (m)');
legend('m1', 'm2');
```
完整的代码如下:
```matlab
% 定义时间范围和时间步长
t = 0:0.01:10;
% 定义系统参数
M = [1 0; 0 2]; % 质量矩阵
K = [3 -1; -1 2]; % 刚度矩阵
F = [2*sin(2*t); 0]; % 外力向量
% 计算正则坐标变换矩阵
[V, D] = eig(K, M); % 求解广义特征值问题
P = V' * M; % 正则坐标变换矩阵
% 叠加各振型的振动响应
X = zeros(length(F), 1); % 初始化总振动响应
for i = 1:length(F)
w = sqrt(D(i, i)); % 求解振型频率
C = P(i, :) * F / (w^2 - D(i, i)); % 求解振幅
phi = atan2(w * (P(i, 2) * F(1) - P(i, 1) * F(2)), ...
w^2 - D(i, i) - w * (P(i, 1)^2 * F(1) + P(i, 2)^2 * F(2))); % 求解相位
X = X + C * V(:, i) * sin(w * t + phi); % 叠加振动响应
end
% 绘制振动响应图像
plot(t, X);
xlabel('Time (s)');
ylabel('Displacement (m)');
legend('m1', 'm2');
```
阅读全文