首页/文章/ 详情

Mathematica推导梁单元刚度矩阵

6月前浏览1459

 

‌Mathematica的符号运算‌是其核心功能之一,广泛用于代数化简、方程求解、微积分、矩阵操作等数学推导。本文用Mathematica推导梁单元刚度矩阵及等效节点荷载。

▲图1

考虑图1所示局部坐标系中的2节点梁单元。将节点横向位移及转角  作为自由度。梁单元的节点位移列阵为

构造坐标变换

将物理坐标系  映射到自然坐标系  。  为单元长度,  

梁单元具有4个自由度,可以唯一确定三次多项式。设

▲图2

转角  的符号与坐标系有关,对于图1的坐标系,当w为正时,转角也为正,如图2所示

由(2)(3)知,在节点1,  ,

在节点2,  ,

(4)(5)是关于  的方程组,用Mathematica求解,并代入(2)
将  化简为关于  的表达式。

  (* 定义方程组 *)
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}];

 


来源:数值分析与有限元编程
Mathematica
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-05-12
最近编辑:6月前
译码当先
本科 慢慢来
获赞 14粉丝 32文章 402课程 0
点赞
收藏
作者推荐

概率的本质

概率论本质上是一种简化为计算的常识。这就是拉普拉斯的“常识演算化”观点。日常生活中经常听到这样的描述,投掷一枚(均匀的)硬币,落地时正面朝上的概率是50%。但这究竟意味着什么呢?实际上,对概率存在两种不同的解释。一种被称为频率学派(frequentist)解释。在频率学派的观点中,概率表示可能多次发生的事件的长期频率。例如,上面的说法意味着,如果多次投掷硬币,那么预计硬币落地时大约有一半机会正面朝上。另一种被称为概率的贝叶斯学派(Bayesian)解释。在贝叶斯学派的观点中,概率被用来量化我们对某事的不确定性(uncertainty)或未知性(ignorance)。因此,概率从根本上与信息有关,而与重复试验关系不大。在贝叶斯学派的观点中,上述说法意味着我们相信硬币在下一次投掷时正面向上落地或反面向上落地的概率相同。在基于频率的解释中, 被认为是无限次重复试验时事件 发生的频率,例如,当我们说随机抛硬币出现正面的概率为 ,是指当重复抛硬币足够多次时,出现正面的频率趋近于 。这种解释在一些重复试验困难的问题中面临挑战,例如,假如我们要预测明天下雨的概率,频率的解释就无能为力了--显然,明天的天气是不可重复的。而基于信度的解释认为 是观察者认为事件 发生的可信程度。这两种解释实际上分别对应了频率学派和贝叶斯学派。贝叶斯学派解释的一大优势在于,对于不存在长期频率的一次性事件,这种解释可以用来对其不确定性进行建模。例如,我们可能想预测某桥梁在地震作用下垮塌的概率。该事件将发生0次或1次,但不可能重复发生。下面用python模拟抛硬币实验import matplotlib.pyplot as pltimport numpy as npdef coin_flip(size): flips = np.random.randint(0, 2, size=size) return flips.mean()vec_coin_flip = np.frompyfunc(coin_flip, 1, 1)x = np.arange(10, 100001, 20) #x中每一个值都表示一次随机试验,比如10就代表抛掷硬币10次y = vec_coin_flip(x) #x中一次随机试验,正面朝上的频率plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] fig, ax = plt.subplots()ax.plot(x, y)ax.axhline(y = 0.5, color = 'r', linestyle = '--', linewidth = 2)ax.set_xscale('log')ax.set( title = '抛硬币模拟图')ax.set_xlabel('实验次数')ax.set_ylabel('频率变化')fig.savefig("z216.png",dpi = 300)plt.show() 上述代码中,coin_flip函数接受一个参数size,表示抛掷硬币的次数。它使用np.random.randint(0, 2, size=size)生成size个0或1的随机整数,其中0表示反面,1表示正面。然后返回这些随机数的平均值,即正面朝上的频率。使用np.frompyfunc将coin_flip函数转换为一个NumPy的通用函数vec_coin_flip,使之向量化,具体见文末附录。np.arange(10, 10000, 50)生成一个从10到100000的整数数组,表示抛掷硬币的次数。 最后分别调用vec_coin_flip通用函数两次,计算不同抛掷次数下正面朝上的频率,得到y。 ▲图1一个常见的误解是,如果你抛一枚公平的硬币10或20次,正面的比例接近一半.记住这只有在大样本才能实现,如图1所示。附录python自定义函数并调用:def func_x(a): y = a + 1 return y# 调用print( func_x(1) ) #结果:2 但是如果a不是一个数,而是一个向量/数组呢?这时候就需要借助Numpy中的通用函数np.frompyfunc(func, 1, 1)这里的参数func指的是你要使用的函数,第二个参数为func中的参数个数,第三个参数为func中的返回值的个数。假设A=[0,1,2]def func_x(a): y = a + 1 return yA = [0, 1, 2]vec_func = np.frompyfunc(func_x, 1, 1)y = vec_func(A)print(y)#结果: [1,2,3]来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈