之前介绍过由裴博士基于python的feon有限元库,下载链接在前面,这边补充下feon的网站
https://github.com/YaoyaoBae/Feon,想要了解的可以去购买他2017年编写的'python与有限元'。
相对的这次介绍的是matlab上的一个有限元库,年代比较悠久,但内容非常全面就是操手动作还是有些麻烦。
![](https://i-blog.csdnimg.cn/blog_migrate/ef94aa4ff531312832fbfd9cc5dc298c.png)
图1是一个用py进行的简单绘图的平面钢架结构,虽然很简单,我们尝试用matlab求解出底部节点的支反力。
先是图片代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
n1=(0,0)
n2=(0,3)
n3=(4,3)
n4=(4,0)
nds=[n1,n2,n3,n4]
k1=(-0.25,0)
k2=(0.25,0)
kds=[k1,k2]
k3=(4.25,0)
k4=(3.75,0)
kds2=[k3,k4]
#创建图标
fig=plt.figure()
ax=fig.add_subplot(111,aspect='equal')
ax.set_xlim(-1,5)
ax.set_ylim(-1,5)
ax.set_xticks([])
ax.set_yticks([])
#绘制直线
for i in range(3):
x,y=[nds[i][0],nds[i+1][0]],[nds[i][1],nds[i+1][1]]
line=Line2D(x,y,color='k',linewidth=1.5,marker='o',markeredgecolor='w',ms='6')
ax.add_line(line)
for i in range(1):
x1, y1 = [kds[i][0], kds[i + 1][0]], [kds[i][1], kds[i + 1][1]]
line = Line2D(x1, y1, color='k', linewidth=1.5, markeredgecolor='w', ms=6)
ax.add_line(line)
for i in range(1):
x2, y2 = [kds2[i][0], kds2[i + 1][0]], [kds2[i][1], kds2[i + 1][1]]
line = Line2D(x2, y2, color='k', linewidth=1.5, markeredgecolor='w', ms=6)
ax.add_line(line)
#绘制支座
ax.plot(n1[0],n1[1],'gs',ms=2)
ax.plot(n4[0],n4[1],'gs',ms=2)
plt.text(-0.5,3.25, r'20kN')
plt.text(4.25,3.25, r'20kN')
#绘制箭头
ax.arrow(4,3.6,0,-0.5,length_includes_head=True,head_length=0.1,head_width=0.05,color='r')
ax.arrow(0,3,-0.5,0,length_includes_head=True,head_length=0.1,head_width=0.05,color='r')
ax.arrow(0,0,-0.1,-0.1,length_includes_head=False,)
ax.arrow(0.25,0,-0.1,-0.1,length_includes_head=False,)
ax.arrow(-0.25,0,-0.1,-0.1,length_includes_head=False,)
ax.arrow(4,0,-0.1,-0.1,length_includes_head=False,)
ax.arrow(4.25,0,-0.1,-0.1,length_includes_head=False,)
ax.arrow(3.75,0,-0.1,-0.1,length_includes_head=False,)
plt.show()
接下来我们先创建脚本基本信息
E=210e6;A=2e-2;I=5e-5;L1=3;L2=4;L3=3;
这些图上没有标注因为太麻烦了,果然还是用专业的画图软件画会比较好。。。hhhh
接下来附上整体代码
addpath D:\matlab\toolbox\M-Files
%基本信息,
E=210e6;
A=2e-2;
I=5e-5;
L1=3;
L2=4;
L3=3;
%单根刚度计算
k1=PlaneFrameElementStiffness(E,A,I,L1,90);
k2=PlaneFrameElementStiffness(E,A,I,L2,0);
k3=PlaneFrameElementStiffness(E,A,I,L3,270);
%建立整体刚度矩阵
K=zeros(12,12);
K=PlaneFrameAssemble(K,k1,1,2);
K=PlaneFrameAssemble(K,k2,2,3);
K=PlaneFrameAssemble(K,k3,3,4)
%引入边界条件,如图每个力为20kN,支座固支
k=K(4:9,4:9)
f=[-20;0;0;0;-20;0]
u=k\f
%后处理
U=[0;0;0;u;0;0;0]
F=K*U
一个简单的前处理+后处理过程
首先我们得到的第一个就是刚度矩阵
![](https://i-blog.csdnimg.cn/blog_migrate/f6f807da066b8833c108fd3990570b3c.png)
是一个12*12的矩阵,因为4个点分别包括平面xy加上转角
![](https://i-blog.csdnimg.cn/blog_migrate/1d253338d8d75bc4dd73d5dcc05ed069.png)
求出了支点的位移
再根据F=K*U
![](https://i-blog.csdnimg.cn/blog_migrate/0392467d39a39a520c26ca0d7dd878d1.png)
求出了所有支点的受力情况。其实后处理还有很多功能,包括求单元力,以及绘制剪力弯矩图,这次就介绍到这,下次会用feon和abaqus软件进行计算对比。