首页/文章/ 详情

Python画弯矩图剪力图(二)

8月前浏览5945

平面刚架的内力图绘制绘制平面刚架(桁架)的变形图及内力图就是一系列数据的可视化过程。内力是基于杆的位置    的函数    ,由一系列的离散点组成矩阵

 

这里第三行无实际意义,仅作为辅助计算。

定义缩放矩阵

 

旋转矩阵

 

平移矩阵

 

以如图所示的刚架为例,在画单元的内力图时,通常是以单元起点为总体坐标系的坐标原点,杆轴沿着x轴正方向来计算内力矩阵A的(原因是对杆进行n等分时使用了x=np.linspace(0,l,n)这个方法,起始点为0)。故此时得到的矩阵A要通过缩放、旋转、平移操作,使之回到对应的位置上去。对于单元1,则需要作旋转操作(np.dot(R,A)),而单元2则需要作平移操作(np.dot(T,A))。缩放操作则根据图形是否协调适当考虑。

▲单元1内力图没经过旋转操作

▲单元1内力图经过旋转操作,回到对应的位置

▲单元2内力图没经过平移操作

▲单元2内力图经过平移操作,回到对应的位置


最终内力图



来源:数值分析与有限元编程
python
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-02
最近编辑:8月前
太白金星
本科 慢慢来
获赞 6粉丝 17文章 327课程 0
点赞
收藏
作者推荐

面向对象有限元编程|自定义求解器之共轭梯度法

共轭梯度法是方程组求解的一种迭代方法。这种方法特别适合有限元求解,因为该方法要求系数矩阵为对称正定矩阵,而有限元平衡方程的系数矩阵正好是对称正定矩阵(考虑边界条件)。同时,共轭梯度法也适合并行计算。算法原理对于方程组 ,假定 是对称正定矩阵,采用共轭梯度法算法步骤如下:取初始值 这里 迭代持续进行,直到向量 的模达到一个较小的值,也就是误差允许范围之内。python代码如下:import mathimport numpy as npclass solver: def __init__(self, A, b, eps, max_iter): self.A = A self.b = b self.eps = eps self.max_iter = max_iter def CGsolver (self): iter = 0 x0 = 0. g0 = -self.b r0 = self.b err = 1e6 while ( err > self.eps and iter < self.max_iter ): tmp1 = self.vec_dot(g0, g0) err = math.fabs(tmp1) tmp_row = np.dot(self.A, r0) tmp2 = self.vec_dot(tmp_row, r0) alpha = tmp1 / tmp2 x1 = x0 + alpha * r0 g1 = g0 + alpha * tmp_row tmp3 = self.vec_dot(g1, g1) beta = tmp3 / tmp1 r1 = -g1 + beta * r0 x0 = x1 r0 = r1 g0 = g1 iter += 1 return x1 #向量点乘 @staticmethod def vec_dot(v1, v2): assert len(v1) == len(v2), 'Length of vectors must be same' return sum( a * b for a, b in zip(v1, v2) ) 以上是求解器类,保存在Modsolver.py文件中。import numpy as npimport ModsolverA = np.array( [ [5, 7, 6, 5], [7, 10, 8, 7], [6, 8, 10, 9], [5, 7, 9, 10] ] )b = np.array( [62, 87, 91, 90] )cls = Modsolver.solver(A, b, 1e-4, 500) #创建一个求解器的实例clsx = cls.CGsolver() #调用共轭梯度法求解print(x) 以上是测试文件。实际在有限元分析使用时,A就是刚度矩阵,b就是整体节点力向量。来源:数值分析与有限元编程

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