梁单元分析基础
在有限元分析中,梁单元每个节点通常有2个自由度(横向位移、转角)。对于欧拉-伯努利梁理论,其基本假设是梁截面在变形后仍保持平面且垂直于中性轴。
形函数(描述单元内位移的函数)采用三次Hermite多项式:
- N1=1−3ξ2+2ξ3N_1 = 1 - 3\xi^2 + 2\xi^3N1=1−3ξ2+2ξ3
- N2=L(ξ−2ξ2+ξ3)N_2 = L(\xi - 2\xi^2 + \xi^3)N2=L(ξ−2ξ2+ξ3)
- N3=3ξ2−2ξ3N_3 = 3\xi^2 - 2\xi^3N3=3ξ2−2ξ3
- N4=L(−ξ2+ξ3)N_4 = L(-\xi^2 + \xi^3)N4=L(−ξ2+ξ3)
其中 ξ=x/L\xi = x/Lξ=x/L 是自然坐标。
刚度矩阵计算原理
单元刚度矩阵由应变能推导,公式为:
ke=∫0LEI(d2Ndx2)Td2Ndx2dxk_e = \int_0^L EI \left( \frac{d^2N}{dx^2} \right)^T \frac{d^2N}{dx^2} dxke=∫0LEI(dx2d2N)Tdx2d2Ndx
其中(E)是弹性模量,(I)是截面惯性矩。
对于均匀梁,刚度矩阵有解析解:
matlab
k = E*I/(L^3) * [12 6*L -12 6*L;
6*L 4*L^2 -6*L 2*L^2;
-12 -6*L 12 -6*L;
6*L 2*L^2 -6*L 4*L^2];
质量矩阵类型与计算
质量矩阵主要有两种形式:
- 一致质量矩阵:基于形函数推导,公式为 ( m_e = \int_0^L \rho A N^T N dx ),其中(\rho)是密度,(A)是截面积。精度高但计算量稍大。
- 集中质量矩阵:将质量集中分布于节点平动自由度,忽略转动惯性或分配等效转动惯量。计算高效,适用于动力分析。
MATLAB代码实现
MATLAB梁单元类实现:
matlab
classdef BeamElement
properties
L % 单元长度
E % 弹性模量
I % 截面惯性矩
A % 横截面积
rho % 材料密度
end
methods
function obj = BeamElement(L, E, I, A, rho)
% 构造函数:初始化梁单元参数
obj.L = L;
obj.E = E;
obj.I = I;
obj.A = A;
obj.rho = rho;
end
function [N, dN] = shape_functions(obj, xi)
% 计算形函数及其导数
% xi: 自然坐标 [-1, 1]
x = (xi + 1) / 2; % 转换为 [0,1]
% 形函数
N1 = 1 - 3*x^2 + 2*x^3;
N2 = obj.L * (x - 2*x^2 + x^3);
N3 = 3*x^2 - 2*x^3;
N4 = obj.L * (-x^2 + x^3);
% 形函数导数
dN1_dx = (-6*x + 6*x^2) / obj.L * 2;
dN2_dx = (1 - 4*x + 3*x^2) * 2;
dN3_dx = (6*x - 6*x^2) / obj.L * 2;
dN4_dx = (-2*x + 3*x^2) * 2;
N = [N1, N2, N3, N4];
dN = [dN1_dx, dN2_dx, dN3_dx, dN4_dx];
end
function K = stiffness_matrix(obj)
% 计算单元刚度矩阵(高斯积分)
gauss_points = [-1/sqrt(3), 1/sqrt(3)];
gauss_weights = [1, 1];
K = zeros(4,4);
for i = 1:length(gauss_points)
xi = gauss_points(i);
weight = gauss_weights(i);
d2N_dx2 = obj.second_derivative(xi);
J = obj.L / 2; % 雅可比行列式
K = K + (obj.E * obj.I * (d2N_dx2' * d2N_dx2) * weight * J);
end
end
function d2N_dx2 = second_derivative(obj, xi)
% 计算形函数二阶导数
x = (xi + 1) / 2;
d2N1_dx2 = (-6 + 12*x) / (obj.L^2) * 4;
d2N2_dx2 = (-4 + 6*x) / obj.L * 4;
d2N3_dx2 = (6 - 12*x) / (obj.L^2) * 4;
d2N4_dx2 = (-2 + 6*x) / obj.L * 4;
d2N_dx2 = [d2N1_dx2; d2N2_dx2; d2N3_dx2; d2N4_dx2];
end
function M = mass_matrix(obj, mass_type)
% 计算单元质量矩阵
% mass_type: 'consistent' 或 'lumped'
if nargin < 2
mass_type = 'consistent';
end
switch lower(mass_type)
case 'consistent'
M = obj.consistent_mass_matrix();
case 'lumped'
M = obj.lumped_mass_matrix();
otherwise
error('类型必须是 ''consistent'' 或 ''lumped''');
end
end
function M = consistent_mass_matrix(obj)
% 一致质量矩阵
gauss_points = [-1/sqrt(3), 1/sqrt(3)];
gauss_weights = [1, 1];
M = zeros(4,4);
for i = 1:length(gauss_points)
xi = gauss_points(i);
weight = gauss_weights(i);
N = obj.shape_functions(xi);
J = obj.L / 2;
M = M + (obj.rho * obj.A * (N' * N) * weight * J);
end
end
function M = lumped_mass_matrix(obj)
% 集中质量矩阵
M = zeros(4,4);
total_mass = obj.rho * obj.A * obj.L;
% 质量平均分配到平动自由度
M(1,1) = total_mass / 2; % 节点1平动
M(3,3) = total_mass / 2; % 节点2平动
% 转动惯量(近似)
rotational_inertia = total_mass * obj.L^2 / 24;
M(2,2) = rotational_inertia; % 节点1转动
M(4,4) = rotational_inertia; % 节点2转动
end
end
end
示例应用
使用上述类进行计算的示例:
matlab
% 定义梁参数(钢梁示例)
L = 6.0; % 长度 (m)
E = 2.1e11; % 弹性模量 (Pa)
I = 8.33e-6; % 惯性矩 (m^4)
A = 0.005; % 横截面积 (m^2)
rho = 7850; % 密度 (kg/m^3)
% 创建梁单元
beam = BeamElement(L, E, I, A, rho);
% 计算矩阵
K = beam.stiffness_matrix();
M_consistent = beam.mass_matrix('consistent');
M_lumped = beam.mass_matrix('lumped');
% 显示结果
disp('刚度矩阵:'); disp(K);
disp('一致质量矩阵:'); disp(M_consistent);
disp('集中质量矩阵:'); disp(M_lumped);
参考代码 用于计算梁单元刚度和质量矩阵用于计算梁单元刚度和质量矩阵 www.youwenfan.com/contentcsk/78806.html
说明
- 矩阵特性 :刚度矩阵和质量矩阵均具有对称性 和正定性,这是物理特性的数学体现。
- 质量矩阵选择 :
- 一致质量矩阵通常能提供更精确的动力响应,特别是在低阶模态分析中。
- 集中质量矩阵在对角线上有非零元素,可能简化计算,但需注意其适用条件。
- 收敛性:单元尺寸会影响计算精度,通常需要足够的网格密度。
- 梁理论适用性:欧拉-伯努利梁理论适用于细长梁。对于短粗梁或需考虑剪切变形的情况,可选用Timoshenko梁理论。
扩展
计算出单元矩阵后,你可以:
- 通过组装总体矩阵分析复杂梁结构。
- 进行模态分析(求解特征值问题 (K - \\omega\^2 M)\\phi = 0 )。
- 进行动力响应分析(直接积分法或模态叠加法)。