基于matlab的梁的振型仿真。 利用有限元理论,求二维梁的固有频率和振型。 短边固定,给定长度、横截面积,弹性模量及材料密度已知。 并对比理论计算结果进行分析。 各参数自己设定。 程序已调通,可直接运行。

最近在搞梁振动仿真,用Matlab撸了个有限元分析程序挺有意思。就拿一根2米长的钢梁来说吧,截面尺寸20x50mm,弹性模量210GPa,密度7850kg/m³,左端固定。先上个效果图镇楼:

![前三阶振型动图]

(假装这里有动图)

模型搭建

先划分网格,这里简单点用20个欧拉梁单元。每个节点两个自由度(挠度+转角),总刚度矩阵K和质量矩阵M的维度是(2(n+1))x(2(n+1))。

核心代码片段:

L = 2; % 梁长
E = 210e9; 
rho = 7850;
A = 0.02*0.05; % 截面积
I = 0.02*0.05^3/12; % 截面惯性矩
n = 20; % 单元数

% 单元刚度矩阵
le = L/n;
k_local = E*I/(le^3)*[12   6*le   -12   6*le;
                      6*le 4*le^2 -6*le 2*le^2;
                      -12  -6*le   12   -6*le;
                      6*le 2*le^2 -6*le 4*le^2];

% 质量矩阵(一致质量)
m_local = rho*A*le/420*[156   22*le   54    -13*le;
                         22*le 4*le^2 13*le -3*le^2;
                         54    13*le   156   -22*le;
                         -13*le -3*le^2 -22*le 4*le^2];

这里用了经典的欧拉梁单元刚度矩阵,质量矩阵选择一致质量矩阵而不是集中质量,更贴近连续体特性。

基于matlab的梁的振型仿真。 利用有限元理论,求二维梁的固有频率和振型。 短边固定,给定长度、横截面积,弹性模量及材料密度已知。 并对比理论计算结果进行分析。 各参数自己设定。 程序已调通,可直接运行。

总装与求解

组装全局矩阵时要注意自由度映射。固定端处理直接划去前两行/列:

% 划除固定端自由度
K_red = K(3:end,3:end);
M_red = M(3:end,3:end);

% 求解特征值问题
[V,D] = eig(K_red,M_red);
freq = sqrt(diag(D))/(2*pi); 

这里特征值开根号得到角频率,记得除以2π转换到Hz。实际跑出来的前三阶频率:

仿真值:12.4Hz, 77.8Hz, 216.3Hz
理论值:12.8Hz, 80.1Hz, 224.5Hz

误差主要来自网格不够细,特别是高阶频率对网格更敏感。

振型可视化技巧

提取特征向量后需要还原被划去的固定端位移:

% 补零处理
mode_shapes = zeros(2*(n+1),3);
mode_shapes(3:end,:) = V(:,1:3); 

% 绘制振型
x = linspace(0,L,50);
for i=1:3
    yy = mode_shapes(1:2:end,i); % 提取挠度分量
    plot(x,interp1(linspace(0,L,n+1),yy,x,'spline'));
end

用样条插值让曲线更光滑。第一阶是典型的单波腹振动,第二阶出现节点,第三阶有两个节点——这和理论振型完全吻合。

理论解对照

悬臂梁频率理论解公式:

f_n = (β_n^2)/(2πL²) * sqrt(EI/(ρA))

前三个β²值分别是3.516、22.03、61.70。代入参数计算得理论频率,与仿真误差在3%以内。说明网格划分合理,但想要更高精度需要加密网格或者改用铁木辛柯梁模型。

完整代码已打包(需要的话私信),运行后会自动对比理论/仿真频率并生成振型动画。搞有限元就像搭乐高,单元矩阵是积木,总装规则是说明书,边界条件就是最后那几颗关键卡扣——扣错了整个模型就崩啦!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐