matlab求解双自由度系统自振频率以及振型的代码
时间: 2023-08-07 22:08:17 浏览: 104
以下是matlab求解双自由度系统自振频率以及振型的代码:
```matlab
% 定义系统参数
m1 = 1; % 质量1
m2 = 2; % 质量2
k1 = 3; % 劲度系数1
k2 = 4; % 劲度系数2
c1 = 0.1; % 阻尼系数1
c2 = 0.2; % 阻尼系数2
% 定义状态空间矩阵A,B,C,D
A = [0 1 0 0; -k1/m1 -c1/m1 k1/m1 c1/m1; 0 0 0 1; k1/m2 c1/m2 -(k1+k2)/m2 -(c1+c2)/m2];
B = [0; 1/m1; 0; 0];
C = [1 0 0 0; 0 0 1 0];
D = [0; 0];
% 求解系统特征值与特征向量
[V, D] = eig(A);
% 取特征值中实部为零的部分
omega = sqrt(diag(D).^2);
omega = omega(imag(omega)==0);
% 求解振型
phi = C*V;
phi = phi./sqrt(sum(phi.^2)); % 归一化处理
```
在上述代码中,首先定义了双自由度系统的参数,然后根据状态空间法建立系统的状态空间矩阵A、B、C、D。接着使用eig函数求解系统的特征值与特征向量,取特征值中实部为零的部分计算自振频率。最后,使用C*V计算系统的振型,并进行归一化处理。
相关问题
matlab求解双自由度系统频率以及振型的实振型分析代码
以下是matlab求解双自由度系统频率以及振型的实振型分析代码:
```matlab
% 定义系统参数
m1 = 1; % 质量1
m2 = 2; % 质量2
k1 = 3; % 劲度系数1
k2 = 4; % 劲度系数2
c1 = 0.1; % 阻尼系数1
c2 = 0.2; % 阻尼系数2
% 定义状态空间矩阵A,B,C,D
A = [0 1 0 0; -k1/m1 -c1/m1 k1/m1 c1/m1; 0 0 0 1; k1/m2 c1/m2 -(k1+k2)/m2 -(c1+c2)/m2];
B = [0; 1/m1; 0; 0];
C = [1 0 0 0; 0 0 1 0];
D = [0; 0];
% 求解系统特征值与特征向量
[V, D] = eig(A);
% 取特征值中实部为零的部分
omega = sqrt(diag(D).^2);
omega = omega(imag(omega)==0);
% 求解振型
phi = C*V;
phi = phi./sqrt(sum(phi.^2)); % 归一化处理
% 绘制实振型分析图
figure;
subplot(2,1,1);
plot(phi(:,1),'r','LineWidth',2);
hold on;
plot(phi(:,2),'b','LineWidth',2);
title('振型');
ylabel('位移');
legend('模态1','模态2');
grid on;
subplot(2,1,2);
plot(omega,'ro','LineWidth',2);
title('频率');
ylabel('频率(rad/s)');
grid on;
```
在上述代码中,首先定义了双自由度系统的参数,然后根据状态空间法建立系统的状态空间矩阵A、B、C、D。接着使用eig函数求解系统的特征值与特征向量,取特征值中实部为零的部分计算自振频率。然后,使用C*V计算系统的振型,并进行归一化处理。最后,绘制实振型分析图,包括振型和频率两个子图。
matlab多自由度体系求自振频率和主振型 代码实现
以下是MATLAB代码实现多自由度体系求自振频率和主振型:
```matlab
% 假设有一个n自由度体系,其质量矩阵为M,刚度矩阵为K
n = 3; % 自由度个数
M = [1 0 0; 0 2 0; 0 0 3]; % 质量矩阵
K = [2 -1 0; -1 2 -1; 0 -1 1]; % 刚度矩阵
% 求解特征值和特征向量
[eig_vec, eig_val] = eig(K, M);
eig_freq = sqrt(diag(eig_val)); % 自振频率
[eig_freq, idx] = sort(eig_freq); % 从小到大排序
eig_vec = eig_vec(:, idx); % 对应的特征向量
% 输出自振频率和主振型
disp('自振频率:');
disp(eig_freq);
disp('主振型:');
disp(eig_vec);
```
运行以上代码,即可得到多自由度体系的自振频率和主振型。可以根据实际情况修改自由度个数和对应的质量矩阵和刚度矩阵。
阅读全文