双线性四边形等参单元是有限元分析中最常用的二维单元之一,通过自然坐标(ξ, η)与物理坐标(x, y)的映射,实现复杂形状的单元分析。MATLAB实现,包括形函数计算、坐标变换、雅可比矩阵构建、单元刚度矩阵求解等核心功能。
一、理论基础
1. 双线性四边形单元形函数
四节点四边形单元的自然坐标范围为\(ξ∈[-1,1],η∈[-1,1]\),形函数为双线性函数:

形函数性质:\(N_i(ξ_j,η_j)=δ_{ij}\)(克罗内克函数),且满足\(∑_{i=1}^4N_i=1\)。
2. 坐标变换与雅可比矩阵
物理坐标\((x,y)\)与自然坐标\((ξ,η)\)的映射关系:

其中\((x_i,y_i)\)为单元节点i的物理坐标。
雅可比矩阵J描述坐标变换的导数关系:

雅可比行列式\(detJ\)用于面积微元变换:\(dA=∣detJ∣dξdη\)。
3. 应变-位移矩阵(B矩阵)
平面问题中,应变\(ε=[ε_x,ε_y,γ_{xy}]^T\)与位移\(u=[u,v]^T\)的关系为\(ε=Bu\),其中\(B\)矩阵元素为:

通过链式法则转换导数:
,其中\(J_{ij}\)为雅可比矩阵元素。
4. 单元刚度矩阵

其中\(D\)为弹性矩阵(平面应力/应变)。高斯积分用于数值计算上述二重积分。
二、MATLAB程序实现
1. 核心函数:双线性四边形单元刚度矩阵计算
function Ke = Quad4_ElementStiffness(x, y, E, nu, thickness, problem_type)% 双线性四边形等参单元刚度矩阵计算% 输入参数:% x, y: 单元节点物理坐标 (4×1向量, [x1; y1; x2; y2; x3; y3; x4; y4])% E: 弹性模量 (Pa)% nu: 泊松比% thickness: 单元厚度 (m, 平面应力/应变时需指定)% problem_type: 问题类型 ('plane_stress' 或 'plane_strain')% 输出参数:% Ke: 4节点四边形单元刚度矩阵 (8×8, 按节点顺序[u1; v1; u2; v2; u3; v3; u4; v4])% 节点坐标整理 (4×2矩阵)nodes = [x(1) y(1); x(2) y(2); x(3) y(3); x(4) y(4)];% 高斯积分点 (2×2积分,精度足够)gauss_pts = [-1/sqrt(3), -1/sqrt(3); % (ξ1, η1)1/sqrt(3), -1/sqrt(3); % (ξ2, η2)1/sqrt(3), 1/sqrt(3); % (ξ3, η3)-1/sqrt(3), 1/sqrt(3)]; % (ξ4, η4)weights = [1, 1, 1, 1]; % 权重均为1% 初始化刚度矩阵Ke = zeros(8, 8);% 材料矩阵D (平面应力/应变)if strcmp(problem_type, 'plane_stress')D = E/(1-nu^2) * [1, nu, 0; nu, 1, 0; 0, 0, (1-nu)/2];elseif strcmp(problem_type, 'plane_strain')D = E/((1+nu)*(1-2*nu)) * [1-nu, nu, 0; nu, 1-nu, 0; 0, 0, (1-2*nu)/2];elseerror('问题类型必须为 ''plane_stress'' 或 ''plane_strain''');endD = thickness * D; % 考虑厚度 (平面问题)% 遍历所有高斯积分点for gp = 1:4xi = gauss_pts(gp, 1); % 当前积分点ξ坐标eta = gauss_pts(gp, 2); % 当前积分点η坐标w = weights(gp); % 当前积分点权重% 1. 计算形函数及其对ξ、η的偏导数[N, dN_dxi, dN_deta] = shapeFunctions(xi, eta);% 2. 计算雅可比矩阵J及其行列式detJJ = zeros(2, 2);for i = 1:4J(1,1) = J(1,1) + dN_dxi(i)*nodes(i,1); % dx/dξJ(1,2) = J(1,2) + dN_dxi(i)*nodes(i,2); % dy/dξJ(2,1) = J(2,1) + dN_deta(i)*nodes(i,1); % dx/dηJ(2,2) = J(2,2) + dN_deta(i)*nodes(i,2); % dy/dηenddetJ = det(J);if detJ <= 0error('雅可比行列式非正,单元畸变过大!');end% 3. 计算形函数对x、y的偏导数 (∂N/∂x, ∂N/∂y)invJ = inv(J); % 雅可比逆矩阵dN_dx = zeros(1, 4);dN_dy = zeros(1, 4);for i = 1:4dN_dx(i) = invJ(1,1)*dN_dxi(i) + invJ(1,2)*dN_deta(i);dN_dy(i) = invJ(2,1)*dN_dxi(i) + invJ(2,2)*dN_deta(i);end% 4. 构建应变-位移矩阵B (3×8)B = zeros(3, 8);for i = 1:4B(1, 2*i-1) = dN_dx(i); % εx = ∂u/∂x → u_i的x导数B(2, 2*i) = dN_dy(i); % εy = ∂v/∂y → v_i的y导数B(3, 2*i-1) = dN_dy(i); % γxy = ∂u/∂y + ∂v/∂x → u_i的y导数B(3, 2*i) = dN_dx(i); % → v_i的x导数end% 5. 累加积分贡献 (Ke += B^T*D*B*|detJ|*w)Ke = Ke + B' * D * B * detJ * w;end
end
2. 辅助函数:形函数及其导数计算
function [N, dN_dxi, dN_deta] = shapeFunctions(xi, eta)% 双线性四边形单元形函数及其对自然坐标的导数% 输入: xi, eta (自然坐标)% 输出: N(4×1形函数值), dN_dxi(4×1对ξ导数), dN_deta(4×1对η导数)N = zeros(4, 1);dN_dxi = zeros(4, 1);dN_deta = zeros(4, 1);% 节点1: (ξ=-1, η=-1)N(1) = 0.25*(1 - xi)*(1 - eta);dN_dxi(1) = -0.25*(1 - eta);dN_deta(1) = -0.25*(1 - xi);% 节点2: (ξ=1, η=-1)N(2) = 0.25*(1 + xi)*(1 - eta);dN_dxi(2) = 0.25*(1 - eta);dN_deta(2) = -0.25*(1 + xi);% 节点3: (ξ=1, η=1)N(3) = 0.25*(1 + xi)*(1 + eta);dN_dxi(3) = 0.25*(1 + eta);dN_deta(3) = 0.25*(1 + xi);% 节点4: (ξ=-1, η=1)N(4) = 0.25*(1 - xi)*(1 + eta);dN_dxi(4) = -0.25*(1 + eta);dN_deta(4) = 0.25*(1 - xi);
end
3. 示例:正方形单元刚度矩阵计算
% 示例:计算正方形单元的刚度矩阵
clear; clc;% 单元节点物理坐标 (4节点,正方形边长1m,左下角(0,0), 逆时针排列)
x_nodes = [0; 1; 1; 0]; % x坐标 [x1; x2; x3; x4]
y_nodes = [0; 0; 1; 1]; % y坐标 [y1; y2; y3; y4]% 材料参数 (钢材)
E = 210e9; % 弹性模量 (Pa)
nu = 0.3; % 泊松比
thickness = 0.1; % 厚度 (m)
problem_type = 'plane_stress'; % 平面应力问题% 调用单元刚度矩阵函数
Ke = Quad4_ElementStiffness(x_nodes, y_nodes, E, nu, thickness, problem_type);% 输出结果 (显示左上角5×5子矩阵)
disp('单元刚度矩阵Ke (8×8, Pa·m):');
disp(Ke(1:5, 1:5)); % 显示部分矩阵避免过长输出% 验证:理论解对比 (正方形单元在平面应力下的刚度矩阵已知)
% 此处省略理论解,可通过有限元教材核对
三、程序说明
1. 输入输出参数
- 输入:
x, y:单元4个节点的物理坐标(按逆时针顺序排列,8×1向量或4×2矩阵);E, nu:材料弹性模量和泊松比;thickness:单元厚度(平面应力/应变问题需指定);problem_type:问题类型('plane_stress'或'plane_strain')。 - 输出:
Ke:8×8单元刚度矩阵(按节点自由度顺序排列:[u1, v1, u2, v2, u3, v3, u4, v4])。
2. 高斯积分
采用2×2高斯积分(4个积分点),精度足以满足双线性单元的刚度矩阵计算。积分点坐标\(ξi,ηi=±1/\sqrt{3}\),权重均为1。
3. 关键步骤
- 形函数计算:根据自然坐标(ξ,η)计算4个节点的形函数Ni及其对ξ,η的偏导数;
- 雅可比矩阵:通过形函数导数和节点坐标计算坐标变换的雅可比矩阵及行列式;
- B矩阵构建:将自然坐标下的导数转换为物理坐标下的导数,组装应变-位移矩阵;
- 刚度矩阵积分:在高斯积分点上累加\(B^TDB\detJ\)的贡献,得到单元刚度矩阵。
四、扩展应用
1. 整体刚度矩阵组装
将单元刚度矩阵集成到整体刚度矩阵(需考虑节点编号对应关系):
% 假设有ne个单元,每个单元4个节点,整体节点数nn
K_global = zeros(2*nn, 2*nn); % 整体刚度矩阵 (2nn×2nn)
for e = 1:ne% 获取单元e的节点编号 local_nodes = [n1, n2, n3, n4]% 获取单元e的刚度矩阵 Ke (8×8)% 组装到整体矩阵dofs = [2*local_nodes(1)-1, 2*local_nodes(1), ...2*local_nodes(2)-1, 2*local_nodes(2), ...2*local_nodes(3)-1, 2*local_nodes(3), ...2*local_nodes(4)-1, 2*local_nodes(4)]; % 自由度编号K_global(dofs, dofs) = K_global(dofs, dofs) + Ke;
end
2. 载荷与边界条件处理
- 集中力:直接施加到对应节点自由度;
- 分布力:通过虚功原理转换为等效节点力;
- 边界条件:采用置1法或对角元乘大数法处理约束。
五、注意事项
- 节点顺序:必须按逆时针(或顺时针)顺序排列,否则雅可比行列式可能为负;
- 单元畸变:避免单元过度扭曲(如内角接近0°或180°),否则雅可比行列式可能非正;
- 材料矩阵:平面应力与应变状态下D矩阵不同,需正确选择;
- 数值精度:高斯积分点数可根据精度需求调整(如4×4积分),但双线性单元2×2已足够。
参考代码 双线性四边形等参单元程序 www.youwenfan.com/contentcnn/83706.html
六、总结
本程序实现了双线性四边形等参单元的核心功能,可直接用于有限元分析中的单元刚度矩阵计算。通过形函数映射和自然坐标积分,程序能处理任意四边形单元(只要节点按顺序排列),适用于平面应力/应变问题(如弹性力学、热传导等)。结合整体矩阵组装和边界条件处理,可进一步扩展为完整的有限元求解器。