Mathematica的符号运算是其核心功能之一,广泛用于代数化简、方程求解、微积分、矩阵操作等数学推导。本文用Mathematica推导梁单元刚度矩阵及等效节点荷载。
▲图1
考虑图1所示局部坐标系中的2节点梁单元。将节点横向位移及转角 作为自由度。梁单元的节点位移列阵为
构造坐标变换
将物理坐标系
梁单元具有4个自由度,可以唯一确定三次多项式。设
▲图2
转角
由(2)(3)知,在节点1,
在节点2,
(4)(5)是关于
将
(* 定义方程组 *)
equations = {
a - b + c - d == w1,
b - 2*c + 3*d == (θ1*L)/2,
a + b + c + d == w2,
b + 2*c + 3*d == (θ2*L)/2
};
(* 解方程组,得到 a, b, c, d 关于 w1, θ1, w2, θ2 的表达式 *)
coefficients = Solve[equations, {a, b, c, d}];
(* 提取解的具体表达式 *)
coeffValues = {a, b, c, d} /. coefficients[[1]];
(* 定义多项式 w(ξ) *)
w[ξ_] := a + b*ξ + c*ξ^2 + d*ξ^3;
(* 将解出的系数代入多项式 *)
wSimplified[ξ_] = w[ξ] /. Thread[{a, b, c, d} -> coeffValues];
(* 输出化简后的表达式 *)
Collect[wSimplified[ξ], {w1, θ1, w2, θ2 }]
最后得到
记
则
梁的应变为
(7)代入(8)得
平衡位置附近任意的虚变形
其中,
上述虚变形产生的广义虚应变
存在于单元中的应力
单元应力在上述虚应变中所作的虚功为
其中,
根据虚功原理
记
则(16)写成
Mathematica计算单元刚度矩阵
(*定义三个矩阵*)
l1 = -y / l;
BT = l1 * {{-6 ξ / l}, {3 ξ - 1}, {-6 ξ / l}, {3 ξ + 1}}; (*4×1 列向量*)
MD = {{E}}; (*1×1 矩阵*)
B = Transpose[BT]; (*1×4 行向量*)
(*矩阵相乘*)
result = BT.MD.B;
(*Integrate: 对变量 ξ在区间 [−1,1]上进行定积分。*)
result = Integrate[result, {ξ, -1, 1}];