有限元法(FEA,Finite Element Analysis)的基本概念是用较简单的问题代替复杂问题后再求解。它将求解域看成是由许多称为有限元的小的互连子域组成,对每一单元假定一个合适的(较简单的)近似解,然后推导求解这个域总的满足条件(如结构的平衡条件),从而得到问题的解。这个解不是准确解,而是近似解,因为实际问题被较简单的问题所代替。由于大多数实际问题难以得到准确解,而有限元不仅计算精度高,而且能适应各种复杂形状,因而成为行之有效的工程分析手段。
英文:Finite Element 有限单元法是随着电子计算机的发展而迅速发展起来的一种现代计算方法。它是50年代首先在连续体力学领域--飞机结构静、动态特性分析中应用的一种有效的数值分析方法,随后很快广泛的应用于求解热传导、电磁场、流体力学等连续性问题。 有限元法分析计算的思路和做法可归纳如下:
编辑本段1) 物体离散化
将某个工程结构离散为由各种单元组成的计算模型,这一步称作单元剖分。离散后单元与单元之间利用单元的节点相互连接起来;单元节点的设置、性质、数目等应视问题的性质,描述变形形态的需要和计算进度而定(一般情况单元划分越细则描述变形情况越精确,即越接近实际变形,但计算量越大)。所以有限元中分析的结构已不是原有的物体或结构物,而是同新材料的由众多单元以一定方式连接成的离散物体。这样,用有限元分析计算所获得的结果只是近似的。如果划分单元数目非常多而又合理,则所获得的结果就与实际情况相符合。
编辑本段2) 单元特性分析
A、 选择位移模式 在有限单元法中,选择节点位移作为基本未知量时称为位移法;选择节点力作为基本未知量时称为力法;取一部分节点力和一部分节点位移作为基本未知量时称为混合法。位移法易于实现计算自动化,所以,在有限单元法中位移法应用范围最广。 当采用位移法时,物体或结构物离散化之后,就可把单元总的一些物理量如位移,应变和应力等由节点位移来表示。这时可以对单元中位移的分布采用一些能逼近原函数的近似函数予以描述。通常,有限元法我们就将位移表示为坐标变量的简单函数。这种函数称为位移模式或位移函数。 B、 分析单元的力学性质 根据单元的材料性质、形状、尺寸、节点数目、位置及其含义等,找出单元节点力和节点位移的关系式,这是单元分析中的关键一步。此时需要应用d性力学中的几何方程和物理方程来建立力和位移的方程式,从而导出单元刚度矩阵,这是有限元法的基本步骤之一。 C、 计算等效节点力 物体离散化后,假定力是通过节点从一个单元传递到另一个单元。但是,对于实际的连续体,力是从单元的公共边传递到另一个单元中去的。因而,这种作用在单元边界上的表面力、体积力和集中力都需要等效的移到节点上去,也就是用等效的节点力来代替所有作用在单元上的力。
编辑本段3) 单元组集
利用结构力的平衡条件和边界条件把各个单元按原来的结构重新连接起来,形成整体的有限元方程 (1-1) 式中,K是整体结构的刚度矩阵;q是节点位移列阵;f是载荷列阵。
编辑本段4) 求解未知节点位移
解有限元方程式(1-1)得出位移。这里,可以根据方程组的具体特点来选择合适的计算方法。 通过上述分析,可以看出,有限单元法的基本思想是"一分一合",分是为了就进行单元分析,合则为了对整体结构进行综合分析。 有限元的发展概况 1943年 courant在论文中取定义在三角形域上分片连续函数,利用最小势能原理研究St.Venant的扭转问题。 1960年 clough的平......
用matlab进行有限元分析的步骤:(1) 单元划分(选择何种单元,分成多少个单元,标号) ;
(2) 构造单元刚度矩阵;
(3) 组装系统刚度矩阵(集成整体刚度矩阵) ;
(4) 引入边界条件(消除冗余方程);
(5) 解方程;
(6) 后处理(扩展计算)。
你提出的问题我之前刚好做过,使用有限元方法来进行桁架结构分析。
Matlab编程实现平面杆单元分析
首先,明确Matlab程序要实现的5个重要模块分别为:单元刚度矩阵的求解、单元组装、节点位移的求解、单元应力的求解、节点力的求解。下面给出这5个模块的实现。
1. 单元刚度矩阵求解
定义函数Bar2D2Node_Stiffness,该函数计算单元的刚度矩阵,输入d性模量E,横截面积A,两个节点坐标输出单元刚度矩阵k(4X4)。具体代码如下:
function k=Bar2D2Node_Stiffness(E,A,x1,y1,x2,y2)
L=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
x=acos((x2-x1)/L)
C=cos(x)
S=sin(x)
k=E*A/L*[C*C C*S -C*C -C*S C*S S*S -C*S -S*S
-C*C -C*S C*C C*S -C*S -S*S C*S S*S]
2. 单元组装
定义函数Bar2D2Node_Assembly,该函数进行单元刚度矩阵的组装,输入单元刚度矩阵k,单元的节点编号i、j。输出整体刚度矩阵KK,具体代码如下:
function z = Bar2D2Node_Assembly(KK,k,i,j)
DOF(1)=2*i-1
DOF(2)=2*i
DOF(3)=2*j-1
DOF(4)=2*j
for n1=1:4
for n2=1:4
KK(DOF(n1),DOF(n2))= KK(DOF(n1),DOF(n2))+k(n1,n2)
end
end
z=KK
3. 节点位移的求解
定义函数Bar2D2Node_Disp(KK,num,p),该函数输入KK为总体刚度矩阵;num为活动自由度编号数组;p为活动自由度方向上的节点力;输出节点位移列阵。具体代码如下:
function u = Bar2D2Node_Disp(KK,num,p)
k=KK(num,num)
u=k\p
4. 单元应力的求解
定义函数函数Bar2D2Node_Stress(E,x1,y1,x2,y2,u),该函数计算单元的应力输入d性模量E,第一个节点坐标(x1,y1),第二个节点坐标(x2,y2)单元节点位移矢量u,返回单元应力标量stress 。具体代码如下:
L=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
x=acos((x2-x1)/L)
C=cos(x)
S=sin(x)
stress=E/L*[-C -S C S]*u
5. 计算节点力
定义函数Bar2D2Node_Forces(KK,q),该函数用于计算节点力,KK为刚度矩阵,q为节点位移阵列
function P= Bar2D2Node_Forces(KK,q)
q=zeros(8,1)
q(num)=u
P=KK*q
至此,基于Matlab的杆单元有限元分析的程序设计已经完成,遇到实际问题时可以直接调用这些函数就可以解决问。
经典算例
如图所示的结构,各个杆的d性模量和横截面积都为 , 。试基于MATLAB平台求解该结构的节点位移、单元应力以及支反力。
四杆桁架结构
解答:对该问题进行有限元分析的过程如下
(1) 结构的离散化与编号
对该结构进行自然离散,节点编号和单元编号如上图所示
(2)计算各单元的刚度矩阵(基于国际标准单位)
输入d性模量E、横截面积A,各点坐标。然后分别针对单元1,2,3和4,调用4次Bar2D2Node_Stiffness,就可以得到单元的刚度矩阵。
对应的主程序中代码:
E=2.95e11A=0.0001x1=0y1=0x2=0.4y2=0x3=0.4y3=0.3x4=0y4=0.3
k1=Bar2D2Node_Stiffness (E,A,x1,y1,x2,y2)
k2=Bar2D2Node_Stiffness (E,A,x2,y2,x3,y3)
k3=Bar2D2Node_Stiffness (E,A,x1,y1,x3,y3)
k4=Bar2D2Node_Stiffness (E,A,x4,y4,x3,y3)
(3) 建立整体刚度方程
由于该结构共有4个节点,因此,设置结构总的刚度矩阵为KK(8×8),先对KK清零,然后四次调用函数Bar2D2Node _Assembly进行刚度矩阵的组装。相关主程序代码为:
KK=zeros(8,8)
KK=Bar2D2Node_Assembly (KK,k1,1,2)
KK=Bar2D2Node_Assembly (KK,k2,2,3)
KK=Bar2D2Node_Assembly (KK,k3,1,3)
KK=Bar2D2Node_Assembly (KK,k4,4,3)
(4)边界条件的处理及刚度方程的求解
由图可以看出,被约束的自由度有:节点1的x,y方向自由度,节点2的y方向自由度,4节点的x、y方向两个自由度。则活动自由度编号为3,5,6.活动自由度对应的节点载荷F3=20000N,F5=0N,F6=25000N,采用高斯消去法进行求解,对应的代码为:
num=[3,5,6]%可活动的自由度编号
p=[200000-25000]
u=Bar2D2Node_Disp(KK,num,p)
(5)支反力的计算
在得到整个结构的节点位移后,由原整体刚度方程就可以计算出对应的支反力。这部分对应的主程序的代码如下:
q=zeros(8,1)
q(num)=u%节点位移阵列
P=Bar2D2Node_Forces(KK,q)
(6)单元应力的计算
先从整体位移列阵q中提取出单元的位移列阵,然后,调用计算单元应力的函数Bar2D2Node_ElementStress,就可以得到各个单元的应力分量。
u1=[q(1)q(2)q(3)q(4)]
stress1=Bar2D2Node_Stress(E,x1,y1,x2,y2,u1)
u2=[q(3)q(4)q(5)q(6)]
stress2=Bar2D2Node_Stress(E,x2,y2,x3,y3,u2)
u3=[q(1)q(2)q(5)q(6)]
stress3=Bar2D2Node_Stress(E,x1,y1,x3,y3,u3)
u4=[q(7)q(8)q(5)q(6)]
stress4=Bar2D2Node_Stress(E,x4,y4,x3,y3,u4)
(7)计算结果的整理
通过主程序的运行得计算结果。
主程序
%计算各单元的刚度矩阵(以国际标准单位)
E=2.95e11
A=0.0001
x1=0
y1=0
x2=0.4
y2=0
x3=0.4
y3=0.3
x4=0
y4=0.3
k1=Bar2D2Node_Stiffness (E,A,x1,y1,x2,y2)
k2=Bar2D2Node_Stiffness (E,A,x2,y2,x3,y3)
k3=Bar2D2Node_Stiffness (E,A,x1,y1,x3,y3)
k4=Bar2D2Node_Stiffness (E,A,x4,y4,x3,y3)
%建立整体刚度方程
%由于该结构共有4个节点,因此,结构总的刚度矩阵为KK(8×8),先对K清零,然后四次调用函数Bar2D2Node _Assembly进行刚度矩阵的组装。
KK=zeros(8,8)
KK=Bar2D2Node_Assembly (KK,k1,1,2)
KK=Bar2D2Node_Assembly (KK,k2,2,3)
KK=Bar2D2Node_Assembly (KK,k3,1,3)
KK=Bar2D2Node_Assembly (KK,k4,4,3)
%边界条件的处理及刚度方程求解
num=[3,5,6]%可活动的自由度编号
p=[200000-25000]
u=Bar2D2Node_Disp(KK,num,p)
%支反力的计算
q=zeros(8,1)
q(num)=u%节点位移阵列
P=Bar2D2Node_Forces(KK,q)
%各单元的应力计算
u1=[q(1)q(2)q(3)q(4)]
stress1=Bar2D2Node_Stress(E,x1,y1,x2,y2,u1)
u2=[q(3)q(4)q(5)q(6)]
stress2=Bar2D2Node_Stress(E,x2,y2,x3,y3,u2)
u3=[q(1)q(2)q(5)q(6)]
stress3=Bar2D2Node_Stress(E,x1,y1,x3,y3,u3)
u4=[q(7)q(8)q(5)q(6)]
stress4=Bar2D2Node_Stress(E,x4,y4,x3,y3,u4)
说的可能有些罗嗦,注意其中有5个function,和最后一个主程序,计算的时候直接运行主程序就可以了。希望能帮助到你。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)