基于Matlab语言的按平面三角形单元划分的结构有限元程序设计
基于Matlab语言的按平面三角形单元划分的结构有限元程序设计
基于Matlab说话的按平面三角形单元划分的构造有限元程序设计专业:建筑与土木匠程班级:建工研12-2姓名:韩志强学号:471220580基于Matlab说话的按平面三角形单元划分构造有限元程序设计一、有限单元发及Matlab说话概述1. 有限单元法跟着现代工业.临盆技巧的成长,不竭请求设计高质量.高程度的大型.庞杂和周详的机械及工程构造.为此目标,人们必须预先经由过程有用的盘算手腕,确实的猜测即将诞生的机械和工程构造,在将来工作时所产生的应力.应变和位移是以,须要追求一种简略而又准确的数值剖析办法.有限单元法恰是顺应这种请求而产生和成长起来的一种十分有用的数值盘算办法.有限元法把一个庞杂的构造分化成相对简略的“单元”,各单元之间经由过程结点互相衔接.单元内的物理量由单元结点上的物理量按必定的假设内插得到,如许就把一个庞杂构造从无穷多个自由度简化为有限个单元构成的构造.我们只要剖析每个单元的力学特征,然后按照有限元法的规矩把这些单元“拼装”成整体,就可以或许得到整体构造的力学特征.有限单元法根本步调如下:(1)构造离散:构造离散就是树立构造的有限元模子,又称为网格划分或单元划分,即将构造离散为由有限个单元构成的有限元模子.在该步调中,须要依据构造的几何特征.载荷情形等肯定单元体内随意率性一点的位移插值函数.(2)单元剖析:依据弹性力学的几何方程以及物理方程肯定单元的刚度矩阵.(3)整体剖析:把各个单元按本来的构造从新衔接起来,并在单元刚度矩阵的基本上肯定构造的总刚度矩阵,形成如下式所示的整体有限元线性方程:式中阵.(4)载荷移置:依据静力等效道理,将载荷移置到响应的节点上,形成节点载荷矩阵.(5)鸿沟前提处理:对式①所示的有限元线性方程进行鸿沟前提处理.(6)求解线性方程:求解式①所示的有限元线性方程,得到节点的位移.在该步调中,如有限元模子的节点越多,则线性方程的数目就越多,随之有限元剖析的盘算量也将越大.(7)求解单元应力及应变依据求出的节点位移求解单元的应力和应变.(8)成果处理与显示进入有限元剖析的后处理部分,对盘算出来的成果进行加工处理,并以各类情势将盘算成果显示出.在用有限元法进行构造剖析时,将会碰到大量的数值盘算,因而在实用上是必定要借助于盘算机和有限元程序,才干完成这些庞杂而沉重的数值盘算工作.而Matlab是当今国际科学界最具影响力和活气的软件.它来源于矩阵运算,并已经成长成一种高度集成的盘算机说话.它供给了壮大的科学盘算,灵巧的程序设计流程,高质量的图形可视化与界面设计,便捷的与其他程序和说话接口的功效.Matlab在列国高校与研讨单位起侧重大的感化.“工欲善其事,必先利其器”.假如有一种十分有用的对象能解决在教授教养与研讨中碰到的问题,那么Matlab说话恰是如许的一种对象.它可以将运用者从繁琐.无谓的底层编程中解放出来,把有限的珍贵时光更多地花在解决问题中,如许无疑会进步工作效力. 今朝,Matlab已经成为国际上最风行的科学与工程盘算的软件对象,如今的Matlab已经不但仅是一个“矩阵试验室”了,它已经成为了一种具有普遍运用远景的全新的盘算机高等编程说话了,有人称它为“第四代”盘算机说话,它在国表里高校和研讨部分正扮演侧重要的脚色.Matlab说话的功效也越来越壮大,不竭顺应新的请求提出新的解决办法.可以预感,在科学运算.主动掌握与科学画图范畴Matlab说话将长期保持其举世无双的地位.为此,本例采取Matlab说话编程,以运用其快捷壮大的矩阵数值盘算功效.二、问题描写一矩形薄板,一边固定,推却150kN分散荷载,构造简图及按平面三角形单元划分的有限元模子图如下所示.薄板厚在本例中,所取构造模子及数据重要用于程序设计理论剖析,与工程现实无关.三、参数输入:单元个数NELEM=4节点个数NNODE=6受束缚鸿沟点数NVFIX=2节点荷载个数NFORCE=1弹性模量YOUNG=2e8泊松比POISS=0.2厚度THICK=0.002单元节点编码数组节点坐标数组节点力数组FORCE =[4 0 -150]束缚信息数组以上数值数据为程序运行前输入的初始数据,存为“”文本格局,同时必须放在Matlab工作目次下,路径不合错误程序不克不及主动读取指定初始文件,运行出错.初始数据文本文件输入格局如下图:四、Matlab说话程序源代码:1.程序中变量解释NNODE 单元节点数NPION 总结点数NELEM 单元数NVFIX 受束缚鸿沟点数FIXED 束缚信息数组NFORCE 节点力数FORCE 节点力数组COORD 构造节点坐标数组LNODS 单元界说数组YOUNG 弹性模量POISS 泊松比THICK 厚度B 单元应变矩阵(3*6) D 单元弹性矩阵(3*3) S 单元应力矩阵(3*6) A单元面积ESTIF 单元刚度矩阵ASTIF 总体刚度矩阵ASLOD 总体荷载向量ASDISP 节点位移向量ELEDISP 单元节点位移向量STRESS 单元应力FP1 数据文件指针2.Matlab说话程序代码%****************************************************************************** %初始化及数据挪用format short e %设定输出类型clear %消除内存变量FP1=fopen('','rt'); %打开输入数据文件,读入掌握数据NELEM=fscanf(FP1,'%d',1), %单元个数(单元编码总数)NPION=fscanf(FP1,'%d',1), %结点个数(结点编码总数)NVFIX=fscanf(FP1,'%d',1)%受束缚鸿沟点数NFORCE=fscanf(FP1,'%d',1), %结点荷载个数YOUNG=fscanf(FP1,'%e',1), %弹性模量POISS=fscanf(FP1,'%f',1), %泊松比THICK=fscanf(FP1,'%f',1) %厚度LNODS=fscanf(FP1,'%d',[3,NELEM])' %单元界说数组(单元结点号)%响应为单元结点号(编码).按逆时针次序输入COORD=fscanf(FP1,'%f',[2,NPION])' %结点坐标数组%坐标:x,y坐标(共NPOIN组)FORCE=fscanf(FP1,'%f',[3,NFORCE])' %结点力数组(受力结点编号,x偏向,y偏向)FIXED=fscanf(FP1,'%d',[3,NVFIX])' %束缚信息(束缚点,x束缚,y束缚)%有束缚为1,无束缚为0%***************************************************************************** %生成单元刚度矩阵并构成总体刚度矩阵ASTIF=zeros(2*NPION,2*NPION); %生成特定大小总体刚度矩阵并置0%***************************************************************************** for i=1:NELEM%生成弹性矩阵DD= [1 POISS 0;POISS 1 0;0 0 (1-POISS)/2]*YOUNG/(1-POISS^2)%***************************************************************************** %盘算当前单元的面积AA=det([1 COORD(LNODS(i,1),1) COORD(LNODS(i,1),2);1 COORD(LNODS(i,2),1) COORD(LNODS(i,2),2);1 COORD(LNODS(i,3),1) COORD(LNODS(i,3),2)])/2%***************************************************************************** %生成应变矩阵Bfor j=0:2b(j+1)= COORD(LNODS(i,(rem((j+1),3))+1),2)-COORD(LNODS(i,(rem((j+2),3))+1),2);c(j+1)=-COORD(LNODS(i,(rem((j+1),3))+1),1)+COORD(LNODS(i,(rem((j+2),3))+1),1);endB=[b(1) 0 b(2) 0 b(3) 0;...0 c(1) 0 c(2) 0 c(3);...c(1) b(1) c(2) b(2) c(3) b(3)]/(2*A);B1( :,:,i)=B;%***************************************************************************** %求应力矩阵S=D*BS=D*B;ESTIF=B'*S*THICK*A; %求解单元刚度矩阵a=LNODS(i,:); %暂时向量,用来记载当前单元的节点编号for j=1:3for k=1:3ASTIF((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)…=ASTIF((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)+ESTIF(j*2-1:j*2,k*2-1:k*2); %依据节点编号对应关系将单元刚度分块叠加到总刚%度矩阵中endendend%***************************************************************************** %将束缚信息参加总体刚度矩阵(对角元素改一法)for i=1:NVFIXif FIXED(i,2)==1ASTIF(:,(FIXED(i,1)*2-1))=0; %一列为零ASTIF((FIXED(i,1)*2-1),:)=0; %一行动零ASTIF((FIXED(i,1)*2-1),(FIXED(i,1)*2-1))=1;%对角元素为1endif FIXED(i,3)==1ASTIF( :,FIXED(i,1)*2)=0; %一列为零ASTIF(FIXED(i,1)*2,:)=0; %一行动零ASTIF(FIXED(i,1)*2 ,FIXED(i,1)*2)=1; %对角元素为1endend%***************************************************************************** %生成荷载向量ASLOD(1:2*NPION)=0; %总体荷载向量置零for i=1:NFORCEASLOD((FORCE(i,1)*2-1):FORCE(i,1)*2)=FORCE(i,2:3);end%***************************************************************************** %求解内力ASDISP=ASTIF\ASLOD' %盘算节点位移向量ELEDISP(1:6)=0;%当前单元节点位移向量for i=1:NELEMfor j=1:3ELEDISP(j*2-1:j*2)=ASDISP(LNODS(i,j)*2-1:LNODS(i,j)*2);%掏出当前单元的节点位移向量endiSTRESS=D*B1(:, :, i)*ELEDISP' %求内力endfclose(FP1); %封闭数据文件五、程序运行成果NELEM =4NPION =6NVFIX =2NFORCE =1YOUNG =200000000POISS =THICK =LNODS =1 2 62 3 42 4 52 5 6COORD =0 01 02 02 11 10 1FORCE =4 0 -150FIXED =1 1 16 1 1D =2.0833e+008 4.1667e+007 0 4.1667e+007 2.0833e+008 00 0 8.3333e+007A =D =2.0833e+008 4.1667e+007 0 4.1667e+007 2.0833e+008 00 0 8.3333e+007A =D =2.0833e+008 4.1667e+007 0 4.1667e+007 2.0833e+008 00 0 8.3333e+007A =D =2.0833e+008 4.1667e+007 0 4.1667e+007 2.0833e+008 0 0 0 8.3333e+007A =ASDISP =(解释:以上12个ASDISP输出成果数据暗示节点位移向量,即各节点分离在X,Y偏向上产生的位移.)i =1STRESS =-1.6793e+005-3.3586e+004-1.3207e+005i =2STRESS =-5.5503e+004-5.5503e+004-5.5503e+004i =3STRESS =5.5503e+004-4.9526e+004-9.4497e+004i =4STRESS =1.6793e+005-2.7040e+004-1.7932e+004(解释:以上四组STRESS输出成果数据暗示单元应力SX,SY,SXY,i为单元号.)六、ANSYS建模比较剖析运用ANSYS有限元剖析软件,完整按照前面Matlab程序设计的各项前提参数以及单元划分方法树立ANSYS模子,其求解成果与以上程序盘算成果比较,验证程序是否准确.ANSYS模子节点单元如下图所示:ANSYS模子求解变形图如下所示:ANSYS求解节点位移成果列表显示如下:(单位:m)PRINT U NODAL SOLUTION PER NODE***** POST1 NODAL DEGREE OF FREEDOM LISTING *****THE FOLLOWING DEGREE OF FREEDOM RESULTS ARE IN THE GLOBAL COORDINATESYSTEMNODE UX UY UZ USUM1 0.0000 0.0000 0.0000 0.00006 0.0000 0.0000 0.0000 0.0000MAXIMUM ABSOLUTE VALUESNODE 4 4 0 4ANSYS求解单元应力成果列表显示如下:(单位:KN/m2)PRINT S ELEMENT SOLUTION PER ELEMENT***** POST1 ELEMENT NODAL STRESS LISTING *****THE FOLLOWING X,Y,Z VALUES ARE IN GLOBAL COORDINATESELEMENT= 1 PLANE182NODE SX SY SZ SXY SYZ1 -0.16793E+06 -33586. 0.0000 -0.13207E+06 0.00002 -0.16793E+06 -33586. 0.0000 -0.13207E+06 0.0000 6 -0.16793E+06 -33586. 0.0000 -0.13207E+06 0.0000 ELEMENT= 2 PLANE182NODE SX SY SZ SXY SYZ2 -55503. -55503. 0.0000 -55503. 0.00003 -55503. -55503. 0.0000 -55503. 0.00004 -55503. -55503. 0.0000 -55503. 0.0000 ELEMENT= 3 PLANE182NODE SX SY SZ SXY SYZ2 55503. -49526. 0.0000 -94497. 0.00004 55503. -49526. 0.0000 -94497. 0.00005 55503. -49526. 0.0000 -94497. 0.0000 ELEMENT= 4 PLANE182NODE SX SY SZ SXY SYZ2 0.16793E+06 -27040. 0.0000 -17932. 0.00005 0.16793E+06 -27040. 0.0000 -17932. 0.00006 0.16793E+06 -27040. 0.0000 -17932. 0.0000结论经由过程比较Matlab说话设计程序运行成果和ANSYS建模剖析成果可知,两种方法算出的成果完整一致,说程序设计准确.所以本程序实用于按三角形单元划分的平面构造有限元剖析.format short eclearFP1=fopen('LinearTriangleElement of Thin plate.txt','rt');NELEM=fscanf(FP1,'%d',1)NPION=fscanf(FP1,'%d',1)NVFIX=fscanf(FP1,'%d',1)NFORCE=fscanf(FP1,'%d',1)YOUNG=fscanf(FP1,'%e',1)POISS=fscanf(FP1,'%f',1)THICK=fscanf(FP1,'%f',1)LNODS=fscanf(FP1,'%d',[3,NELEM])COORD=fscanf(FP1,'%f',[2,NPION])FORCE=fscanf(FP1,'%f',[3,NFORCE])FIXED=fscanf(FP1,'%d',[3,NVFIX])ASTIF=zeros(2*NPION,2*NPION); %生成特定大小总体刚度矩阵并置0for i=1:NELEM%生成弹性矩阵DD= YOUNG/(1-POISS^2)*[1 POISS 0;POISS 1 0;0 0 (1-POISS)/2]%盘算当前单元的面积AA=det([1 COORD(LNODS(i,1),1) COORD(LNODS(i,1),2);1 COORD(LNODS(i,2),1) COORD(LNODS(i,2),2);1 COORD(LNODS(i,3),1) COORD(LNODS(i,3),2)])/2%生成应变矩阵Bfor j=0:2b(j+1)= COORD(LNODS(i,(rem((j+1),3))+1),2)-COORD(LNODS(i,(rem((j+2),3))+1),2);c(j+1)=-COORD(LNODS(i,(rem((j+1),3))+1),1)+COORD(LNODS(i,(rem((j+2),3))+1),1); endB=[b(1) 0 b(2) 0 b(3) 0;...0 c(1) 0 c(2) 0 c(3);...c(1) b(1) c(2) b(2) c(3) b(3)]/(2*A);B1( :,:,i)=B;%求应力矩阵S=D*BS=D*B;ESTIF=B'*S*THICK*A;a=LNODS(i,:);for j=1:3for k=1:3ASTIF((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)…=ASTIF((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)+ESTIF(j*2-1:j*2,k*2-1:k*2);endendend%将束缚信息参加总体刚度矩阵for i=1:NVFIXif FIXED(i,2)==1ASTIF(:,(FIXED(i,1)*2-1))=0;ASTIF((FIXED(i,1)*2-1),:)=0;ASTIF((FIXED(i,1)*2-1),(FIXED(i,1)*2-1))=1;endif FIXED(i,3)==1ASTIF( :,FIXED(i,1)*2)=0;ASTIF(FIXED(i,1)*2,:)=0;ASTIF(FIXED(i,1)*2 ,FIXED(i,1)*2)=1;endend%生成荷载向量ASLOD(1:2*NPION)=0;for i=1:NFORCEASLOD((FORCE(i,1)*2-1):FORCE(i,1)*2)=FORCE(i,2:3)end%求解内力ASDISP=ASTIF\ASLOD'ELEDISP(1:6)=0;for i=1:NELEMfor j=1:3ELEDISP(j*2-1:j*2)=ASDISP(LNODS(i,j)*2-1:LNODS(i,j)*2);endiSTRESS=D*B1(:, :, i)*ELEDISP'endfclose(FP1);format short eclearFP1=fopen('LinearTriangleElement of Thin plate.txt','rt'); NELEM=fscanf(FP1,'%d',1)NPION=fscanf(FP1,'%d',1)NVFIX=fscanf(FP1,'%d',1)NFORCE=fscanf(FP1,'%d',1)YOUNG=fscanf(FP1,'%e',1)POISS=fscanf(FP1,'%f',1)THICK=fscanf(FP1,'%f',1)LNODS=fscanf(FP1,'%d',[NELEM,3])COORD=fscanf(FP1,'%f',[NPION,2])FORCE=fscanf(FP1,'%f',[NFORCE,3])FIXED=fscanf(FP1,'%d',[NVFIX,3])ASTIF=zeros(2*NPION,2*NPION); %生成特定大小总体刚度矩阵并置0 for i=1:NELEM%生成弹性矩阵DD= YOUNG/(1-POISS^2)*[1 POISS 0;POISS 1 0;0 0 (1-POISS)/2]%盘算当前单元的面积AA=det([1 COORD(LNODS(i,1),1) COORD(LNODS(i,1),2);1 COORD(LNODS(i,2),1) COORD(LNODS(i,2),2);1 COORD(LNODS(i,3),1) COORD(LNODS(i,3),2)])/2%生成应变矩阵Bfor j=0:2b(j+1)= COORD(LNODS(i,(rem((j+1),3))+1),2)-COORD(LNODS(i,(rem((j+2),3))+1),2);c(j+1)=-COORD(LNODS(i,(rem((j+1),3))+1),1)+COORD(LNODS(i,(rem((j+2),3))+1),1); endB=[b(1) 0 b(2) 0 b(3) 0;...0 c(1) 0 c(2) 0 c(3);...c(1) b(1) c(2) b(2) c(3) b(3)]/(2*A);B1( :,:,i)=B;%求应力矩阵S=D*BS=D*B;ESTIF=B'*S*THICK*A;a=LNODS(i,:);for j=1:3for k=1:3ASTIF((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)…=ASTIF((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)+ESTIF(j*2-1:j*2,k*2-1:k*2);endendend%将束缚信息参加总体刚度矩阵for i=1:NVFIXif FIXED(i,2)==1ASTIF(:,(FIXED(i,1)*2-1))=0;ASTIF((FIXED(i,1)*2-1),:)=0;ASTIF((FIXED(i,1)*2-1),(FIXED(i,1)*2-1))=1;endif FIXED(i,3)==1ASTIF( :,FIXED(i,1)*2)=0;ASTIF(FIXED(i,1)*2,:)=0;ASTIF(FIXED(i,1)*2 ,FIXED(i,1)*2)=1;endend%生成荷载向量ASLOD(1:2*NPION)=0;for i=1:NFORCEASLOD((FORCE(i,1)*2-1):FORCE(i,1)*2)=FORCE(i,2:3)end%求解内力ASDISP=ASTIF\ASLOD'ELEDISP(1:6)=0;for i=1:NELEMfor j=1:3ELEDISP(j*2-1:j*2)=ASDISP(LNODS(i,j)*2-1:LNODS(i,j)*2); endiSTRESS=D*B1(:, :, i)*ELEDISP'endfclose(FP1);。
平面三角形单元有限元程序设计
平面三角形单元有限元程序设计P9 m 9 m一、题目如图1所示,一个厚度均匀的三角形薄板,在顶点作用沿板厚方向均匀分布的竖向载荷。
已知:P=150N/m,E=200GPa,=0、25,t=0、1m,忽略自重。
试计算薄板的位移及应力分布。
要求:1.编写有限元计算机程序,计算节点位移及单元应力。
(划分三角形单元,单元数不得少于30个);2.采用有限元软件分析该问题(有限元软件网格与程序设计网格必须一致),详细给出有限元软件每一步的操作过程,并将结果与程序计算结果进行对比(任选取三个点,对比位移值);3.提交程序编写过程的详细报告及计算机程序;4.所有同学参加答辩,并演示有限元计算程序。
有限元法中三节点三角形分析结构的步骤如下:1)整理原始数据,如材料性质、荷载条件、约束条件等,离散结构并进行单元编码、结点编码、结点位移编码、选取坐标系。
2)单元分析,建立单元刚度矩阵。
3)整体分析,建立总刚矩阵。
4)建立整体结构的等效节点荷载与总荷载矩阵5)边界条件处理。
6)解方程,求出节点位移。
7)求出各单元的单元应力。
8)计算结果整理。
一、程序设计网格划分如图,将薄板如图划分为6行,并建立坐标系,则刚度矩阵的集成建立与总刚度矩阵等维数的空矩阵,已变单元刚度矩阵的集成。
由单元分析已知节点、单元的排布规律,继而通过循环计算求得每个单元对应的节点序号。
通过循环逐个计算:(1)每个单元对应2种单元刚度矩阵中的哪一种; (2)该单元对应总刚度矩阵的那几行哪几列 (3)将该单元的单元刚度矩阵加入总刚度矩阵的对应行列循环又分为3层循环:(1)最外层:逐行计算(2)中间层:该行逐个计算(3)最里层:区分为第 奇/偶 数个计算XYPXYP节点编号单元编号单元刚度的集成:[][][][][][]''''''215656665656266256561661eZeeeZeZeeeekkkKkkkkkk+⋯++=⇓=⇒==⇒==⇒=⨯⨯⨯⨯⨯⨯M边界约束的处理:划0置1法适用:这种方法适用于边界节点位移分量为已知(含为0)的各种约束。
有限元平面问题MATLAB程序
计算力学(有限元方法部分) 程序设计程序说明书程序1:平面问题的有限元分析文件名:h01.m算例文本:h01.txt输出文本:result1.txt使用前请先将h01.txt放入默认的文本读取路径(我的要求与m文件在同一文件夹内)!文本输入顺序:材料信息(编号、弹性模量、泊松比)注意:材料编号须按1、2、3、4……的顺序排列节点信息(编号、x坐标、y坐标)注意:节点编号须按1、2、3、4……的顺序排列约束信息(约束节点号、x方向有无约束、y方向有无约束、x方向位移、y 方向位移)有约束处填一正数,无约束处填0。
无约束处请勿输入位移。
单元信息(厚度、材料编号、节点编号,若为3节点单元,则第四个编号填0)注意:单元编号须按1、2、3、4……的顺序排列集中力(作用节点号、x方向力、y方向力)线荷载(作用边上的两个节点号、x方向分布力、y方向分布力)面荷载(作用单元号、x方向分布力、y方向分布力)程序可调部分:4-6行中可以指定输出哪些图像(按顺序依次为节点、单元图像,x、y方向位移图像,xx、yy、xy方向应力图像),第7行中可以指定输入的.txt文本名称。
文本输出内容:结点位移信息(节点号、x方向位移、y方向位移)单元形心处的应变信息(单元号、x方向正应变、y方向正应变、xy方向工程切应变)单元形心处的应力信息(单元号、x方向正应力、y方向正应力、xy方向切应力)本程序附有三角形单元自动加密前处理部分h01auto.m,其算例文本:h01coarse.txt,输出文本:h01new.txt。
它可以适用于本题的要求,在已给定本题所需全部信息的情况下将已有的单元加密为三角形单元。
其输出文本可直接作为上面程序的输入文本。
h01.m h01.txt h01auto.m h01coarse.txt欢迎交流与提问!附上邮箱:***************。
祝力学学习顺利!。
matlab有限元三单元编程
matlab有限元三单元编程MATLAB是一种功能强大的编程语言和环境,广泛用于工程和科学领域的数值计算、数据分析和可视化。
在有限元分析中,MATLAB的强大功能和直观的语法使其成为一个理想的选择。
在本文中,我们将讨论MATLAB中有限元三单元的编程方法和实践。
有限元分析是一种数值方法,用于解决连续介质的力学问题。
它将一个复杂的结构分解成更简单的有限元单元,然后通过求解线性代数方程组来得到结构的应力和位移解。
在有限元分析中,三角形和四边形单元是最常用的有限元单元之一。
本文将重点讨论三角形单元的编程实现。
首先,我们需要定义一个三角形单元的几何信息。
在三角形单元中,我们有三个顶点,每个顶点有两个坐标。
我们可以使用一个3x2的矩阵来表示这些坐标。
例如,定义三角形ABC的顶点坐标矩阵为P:P = [x_A, y_A;x_B, y_B;x_C, y_C];接下来,我们需要定义三角形单元的连接性信息。
在MATLAB中,我们可以使用一个3x1的向量来表示三个顶点的连接性。
例如,定义三角形ABC的连接性向量为E:E = [1;2;3];然后,我们可以定义三角形单元材料属性和载荷信息。
这些信息包括杨氏模量、泊松比和外力向量。
我们可以将这些信息存储在一个结构体中,例如:properties.E = 210e9; % 杨氏模量properties.v = 0.3; % 泊松比properties.f = [0; -1000; 0]; % 外力向量接下来,我们可以使用这些信息来计算三角形单元的刚度矩阵和力向量。
刚度矩阵是一个3x3的矩阵,力向量是一个3x1的向量。
我们可以使用以下公式来计算它们:K = (E/(1-v^2)) * [1 v 0;v 1 0;0 0 (1-v)/2] * A;f = (A/3) * [1; 1; 1] * properties.f;其中,A是三角形的面积。
我们可以使用以下公式来计算它:A = abs(det([1, 1, 1;x_A, x_B, x_C;y_A, y_B, y_C])) / 2;最后,我们可以使用这些信息来求解三角形单元的位移解。
matlab有限元三角形单元编程
matlab有限元三角形单元编程
在MATLAB中进行有限元分析,可以使用其自带的有限元分析工具箱(FEATool)进行编程。
以下是一个简单的例子,演示如何使用三角形单元进行有限元分析:
1. 打开MATLAB,进入FEATool环境。
2. 创建新的有限元模型。
选择“Model”菜单下的“New Model”选项,进入“Model Builder”界面。
3. 在“Model Builder”界面中,选择“2D Triangle”单元类型,并在绘图区域中绘制出三角形网格。
4. 在“Model Builder”界面中,设置材料属性、边界条件和载荷等参数。
5. 运行有限元分析。
选择“Model”菜单下的“Solve”选项,进行有限元求解。
6. 查看结果。
选择“Model”菜单下的“Results”选项,可以查看位移、应力、应变等结果。
以上是一个简单的例子,演示了如何使用三角形单元进行有限元分析。
在实际应用中,还需要根据具体问题进行详细的建模和计算。
matlab有限元三角形单元程序
matlab有限元三角形单元程序以下是一个简单的 MATLAB 有限元三角形单元程序的示例:```matlab% 定义模型参数E = 1000; % 弹性模量nu = 0.3; % 泊松比thickness = 1; % 板的厚度% 定义节点坐标nodes = [0, 0; 1, 0; 1, 1; 0, 1; 0.5, 0.5];% 定义单元连接关系connectivity = [1, 2, 5; 2, 3, 5; 3, 4, 5; 4, 1, 5];% 计算总节点数和总单元数numNodes = size(nodes, 1);numElements = size(connectivity, 1);% 初始化全局刚度矩阵和载荷向量K = zeros(numNodes);F = zeros(numNodes, 1);% 循环遍历每个单元for i = 1:numElements% 查找当前单元的节点编号nodesIndex = connectivity(i, :);% 根据节点编号从全局坐标矩阵中取出节点坐标coordinates = nodes(nodesIndex, :);% 计算当前单元的局部刚度矩阵localK = calculateLocalStiffness(E, nu, thickness, coordinates);% 组装局部刚度矩阵到全局刚度矩阵中K(nodesIndex, nodesIndex) = K(nodesIndex, nodesIndex) + localK;% 计算当前单元的局部载荷向量localF = calculateLocalLoad(thickness, coordinates);% 组装局部载荷向量到全局载荷向量中F(nodesIndex) = F(nodesIndex) + localF;end% 边界条件:节点1固定K(1, :) = 0;K(1, 1) = 1;F(1) = 0;% 解线性方程组U = K \ F;% 输出位移结果disp('节点位移:');disp(U);% 计算应力结果stress = calculateStress(E, nu, thickness, nodes, connectivity, U);% 输出应力结果disp('节点应力:');disp(stress);% 计算局部刚度矩阵的函数function localK = calculateLocalStiffness(E, nu, thickness, coordinates)% 计算单元的雅可比矩阵J = (1/2) * [coordinates(2,1)-coordinates(1,1), coordinates(3,1)-coordinates(1,1);coordinates(2,2)-coordinates(1,2), coordinates(3,2)-coordinates(1,2)];% 计算雅可比矩阵的逆矩阵invJ = inv(J);% 计算单元刚度矩阵B = invJ * [-1, 1, 0; -1, 0, 1];D = (E/(1-nu^2)) * [1, nu, 0; nu, 1, 0; 0, 0, (1-nu)/2]; localK = thickness * abs(det(J)) * (B' * D * B);end% 计算局部载荷向量的函数function localF = calculateLocalLoad(thickness, coordinates) localF = zeros(3, 1);midPoint = [sum(coordinates(:,1))/3,sum(coordinates(:,2))/3];localF(3) = thickness * 1 * det([coordinates(1,:); coordinates(2,:); midPoint]);end% 计算各节点应力的函数function stress = calculateStress(E, nu, thickness, nodes, connectivity, U)stress = zeros(size(nodes, 1), 3);for i = 1:size(connectivity, 1)nodesIndex = connectivity(i, :);coordinates = nodes(nodesIndex, :);Ke = calculateLocalStiffness(E, nu, thickness, coordinates);Ue = U(nodesIndex);stress(nodesIndex, :) = stress(nodesIndex, :) + (Ke * Ue)';endstress = stress / thickness;end```这个程序实现了一个简单的平面三角形单元有限元分析,包括定义节点坐标和单元连接关系、计算全局刚度矩阵和载荷向量、施加边界条件、解线性方程组、计算节点位移和应力等。
三角形单元有限元程序设计
三角形单元有限元程序设计一、引言
⑴文档背景
⑵文档目的
⑶读者对象
⑷名词解释
二、程序结构设计
⑴程序流程图
⑵程序组成模块描述
⑶主要数据结构设计
⑷代码逻辑设计
三、数据预处理
⑴数据输入格式与读取
⑵数据清洗与去噪
⑶数据预处理方法
⑷数据分割与划分
四、网格
⑴网格算法介绍
⑵网格质量评估与改善
⑶网格的实现方法
五、有限元方法
⑴有限元离散的原理
⑵有限元单元的选择
⑶有限元离散的网格节点选取
⑷有限元插值函数的计算六、模型求解
⑴线性方程组的求解方法
⑵模型参数的设置与调整
⑶迭代算法的选择与实现七、模型评估与验证
⑴结果评估指标的选择
⑵模型验证方法
⑶结果可视化与分析
八、性能优化
⑴程序性能分析与评估
⑵程序高效化的方法与技巧
⑶并行计算与优化
九、实例与案例
⑴实例介绍与问题描述
⑵实例数据处理过程
⑶实例模型求解与结果分析十、总结与展望
⑴工作总结
⑵程序改进与优化展望
⑶研究方向与发展趋势
十一、附件
●附件1、程序源代码
●附件2、输入数据样例文件
●附件3、网格结果数据文件附录:法律名词及注释
●法律名词1、注释1
●法律名词2、注释2
●法律名词3、注释3
请注意,附件的具体文件名和数据内容将根据你的实际情况进行调整。
法律名词及注释部分需要根据实际需要进行扩充和修改。
请合理对文档结构和章节内容进行调整,以符合你的具体要求。
第六章三角形单元的有限元法程序设计
从第j列的主对角线元素起到该列上方第一个非零 元素为止,所含元素的个数称为第j列的列高,记为hj ; 如果把第j列上方第1个非零元素的行号记为mj,则第j 列的列高为 hj = j - mj + 1 其实,hj就是第j行的左带宽,因而必有 UBW= max(hj)
j=1,2, …,N
利用节点位移信息数组 ID (去约束后节点位移自 由度编码),可容易地确定刚度矩阵 [K] 任何一列的 列高。
{ } [S ]{ }
例1:对角受压的正方形薄板,载 荷沿厚度均匀分布,为2N/m。由 于对称性,取1/4部分作为计算对
2N/m y x
象,试用有限元程序进行计算。
2N/m 2m 2m
h 1.0m, E 1.0, 0.0
例2:简支梁,梁高3m,跨度18m,厚度1m,承 受均布荷载10N/m2。已知 E 2 1010 N / m2 , 0.167
y为挤压应力,属次要应 力。材料力学不考虑 , FEM与弹性力学误差较大。
6.2 提高计算精度的方法
(1) 计算结果的整理 计算结果包括位移和应力两个方面。在位移方 面,一般无须进行整理工作。应力结果则需要 整理。通常认为计算出的应力是三角形单元形 心处的应力。而相邻单元之间的应力存在突变, 甚至正、负符号都不相同。为了由计算结果推 算出结构内某一点的接接实际的应力,必须通 过某种平均计算。通常可采用两单元平均法或 绕结点平均法。
平均法整理单元应力
两单元平均法:把两个相邻单元中的常应力加 以平均,用来表示公共边界中点处的应力。 绕结点平均法:把环绕某一结点的各单元常应 力加以平均,用以表示该结点的应力。在内结 点效果较好,而在边界结点可能很差,一般改 为应由内结点的应力外推计算出来。 (2)网格的细分 通过网格的细分,使每个单元的面积缩小,那 么尽管每个单元是应变、常应力单元,仍可较 好地反映结构中的应力变化,使得到的解答收 敛于问题的精确解。
平面三角形单元Matlab程序
%变量说明%NPOIN NELEM NVFIX NFORCE NNODE%总结点数,单元数,受约束边界点数,结点力数, 单元结点数%COORD LNODS YOUNG POISS THICK %结构结点坐标数组,单元定义数组,弹性模量,泊松比,厚度%FORCE FIXED BMATX DMATX SMATX %节点力数组,约束信息数组,单元应变矩阵,单元弹性矩阵,单元应力矩阵%AREA HK ASLOD ASDISP FP1%单元面积,总体刚度矩阵,总体荷载向量,结点位移向量,数据文件指针format short eclearFP1=fopen('C:\Users\Administrator\Desktop\input.txt','rt');NPION=fscanf(FP1,'%d',1); %结点个数(结点编码总数)NELEM=fscanf(FP1,'%d',1); %单元个数(单元编码总数)NFORCE=fscanf(FP1,'%d',1); %结点荷载个数NVFIX=fscanf(FP1,'%d',1); %受约束边界点数YOUNG=fscanf(FP1,'%e',1); %弹性模量POISS=fscanf(FP1,'%f',1); %泊松比THICK=fscanf(FP1,'%d',1); %厚度LNODS=fscanf(FP1,'%d',[3,NELEM])'; %单元定义数组(单元结点号)COORD=fscanf(FP1,'%f',[2,NPION])'; %结点坐标数组FORCE=fscanf(FP1,'%f',[3,NFORCE])'; %结点力数组FIXED=fscanf(FP1,'%d',[3,inf])'; %约束信息数组%引用所需的全局变量%global NPION NELEM COORD LNODS YOUNG POISS %global BMATX DMATX SMATX AREA%生成弹性矩阵Da=YOUNG/(1-POISS^2);DMATX(1,1)=1*a;DMATX(1,2)=POISS*a;DMATX(2,1)=POISS*a;DMATX(2,2)=1*a;DMATX(3,3)=(1-POISS)*a/2;for i=1:NELEM; %i为当前所计算的单元号%计算当前单元的面积AREA=det([1 COORD(LNODS(i,1),1) COORD(LNODS(i,1),2);...1 COORD(LNODS(i,2),1) COORD(LNODS(i,2),2);...1 COORD(LNODS(i,3),1) COORD(LNODS(i,3),2);])/2; end%生成应变矩阵Bfor j=0:2b(j+1)=COORD(LNODS(i,(rem((j+1),3))+1),2)-COORD(LNODS(i,(rem((j+2),3))+1),2) ;c(j+1)=-COORD(LNODS(i,(rem((j+1),3))+1),1)+COORD(LNODS(i,(rem((j+2),3))+1), 1);endBMATX=[b(1) 0 b(2) 0 b(3) 0;...0 c(1) 0 c(2) 0 c(3);...c(1) b(1) c(2) b(2) c(3) b(3)]/(2*AREA);SMATX=DMATX*BMATX; %求应力矩阵S=D*B% 所引用的全局变量:%global NPION NELEM NVFIX LNODS ASTIF THICK%global BMATX SMATX AREA FIXEDHK=seros(2*NPION,2*NPION); %张成特定大小总刚矩阵并置0for i=1:NELEMEK=BMATX'*SMATX*THICK*AREA; %求解单元刚度矩阵a=LNODS(i,:); %临时向量,用来记录当前单元的节点编号for j=1:3for k=1:3HK((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)=HK((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)+EK(j*2-1:j*2,k*2-1:k*2);%跟据节点编号对应关系将单元刚度分块叠加到总刚矩阵中endendend%将约束信息加入总刚(置0置1法)NUM=1; %计数器(当前已分析的节点数)i=0; %计数器(当前已处理的约束数)tmp(NVFIX)=0; %临时存被约束的序号while i<NVFIXfor j=-1:0if FIXED(NUM,j+3)==1 %若发现约束i=i+1; %计数器自增tmp(i)=FIXED(NUM)*2+j; %求约束序号endendNUM=NUM+1;endfor i=1:NVFIXHK(1:2*NPION,tmp(i))=0; %将一约束序号处的总刚列向量清0 HK(tmp(i),1:2*NPION)=0; %.将一约束序号处的总刚行向量清0 HK(tmp(i),tmp(i))=1; %将行列交叉处的元素置为1end%所需引用的全局变量%global ASLOD NPION NFORCE FORCEASLOD(1:2*NPION)=0; %张成特定大小的0向量for i=1:NFORCEASLOD((FORCE(i,1)*2-1):FORCE(i,1)*2)=FORCE(i,2:3);end%将有约束处的荷载置为0NUM=1;i=0;tmp(NVFIX)=0;while i<NVFIXfor j=-1:0if FIXED(NUM,j+3)==1i=i+1;tmp(i)=FIXED(NUM)*2+j;endendNUM=NUM+1;endfor i=1:NVFIXASLOD(tmp(i))=0;endASDISP=HK\ASLOD'; %计算结点位移向量%所引用的全局变量%global NELEM NPION SMATX ASDISP LNODSELEDISP(1:6)=0; %当前单元的结点位移向量for i=1:NELEMfor j=1:3ELEDISP(j*2-1:j*2)=ASDISP(LNODS(i,j)*2-1:LNODS(i,j)*2);endSTRESS=SMATX*ELEDISP'; %求内力endTHANKS !!!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考。
平面三角形单元常应变单元matlab程序的编制
三角形常应变单元程序的编制与使用有限元法是求解微分方程边值问题的一种通用数值方法,该方法是一种基于变分法(或变分里兹法)而发展起来的求解微分方程的数值计算方法,以计算机为手段,采用分片近似,进而逼近整体的研究思想求解物理问题。
有限元分析的基本步骤可归纳为三大步:结构离散、单元分析和整体分析。
对于平面问题,结构离散常用的网格形状有三角形、矩形、任意四边形,以三个顶点为节点的三角形单元是最简单的平面单元,它较矩形或四边形对曲边边界有更好的适应性,而矩形或四边形单元较三节点三角形有更高的计算精度。
Matlab语言是进行矩阵运算的强大工具,因此,用Matlab语言编写有限元中平面问题的程序有优越性。
本章将详细介绍如何利用Matlab语言编制三角形常应变单元的计算程序,程序流程图见图1。
有限元法中三节点三角形分析结构的步骤如下:1)整理原始数据,如材料性质、荷载条件、约束条件等,离散结构并进行单元编码、结点编码、结点位移编码、选取坐标系。
2)单元分析,建立单元刚度矩阵。
3)整体分析,建立总刚矩阵。
4)建立整体结构的等效节点荷载和总荷载矩阵5)边界条件处理。
6)解方程,求出节点位移。
7)求出各单元的单元应力。
8)计算结果整理。
计算结果整理包括位移和应力两个方面;位移计算结果一般不需要特别的处理,利用计算出的节点位移分量,就可画出结构任意方向的位移云图;而应力解的误差表现在单元内部不满足平衡方程,单元与单元边界处应力一般不连续,在边界上应力解一般与力的边界条件不相符合。
图1 程序流程图1.1 程序说明%******************************************************************* % 三角形常应变单元求解结构主程序%******************************************************************* ●功能:运用有限元法中三角形常应变单元解平面问题的计算主程序。
matlab编译平面有限元计算
matlab编译平面有限元计算编译平面有限元计算是一种常用的数值计算方法,可以用于求解各种复杂的工程问题。
在本文中,我们将介绍如何使用MATLAB编写平面有限元计算程序,并通过一个实例来说明其应用。
让我们了解一下有限元方法的基本原理。
有限元方法是一种将连续体划分为有限个单元,根据物理方程和边界条件,在每个单元上建立离散方程组,最终求解得到整个连续体的近似解的方法。
在平面问题中,连续体被划分为三角形或四边形单元。
MATLAB是一种功能强大的数值计算软件,它提供了丰富的工具箱和函数,可以方便地进行有限元计算。
下面我们将以求解平面弹性力学问题为例,介绍如何使用MATLAB编写平面有限元计算程序。
我们需要定义问题的几何信息、边界条件和材料参数。
在MATLAB中,可以通过定义节点坐标、单元连接关系、边界条件和材料参数来描述问题。
节点坐标可以用一个矩阵表示,其中每一行代表一个节点的坐标。
单元连接关系可以用一个矩阵表示,其中每一行代表一个单元的节点编号。
边界条件可以用一个向量表示,其中每个元素代表一个节点的边界条件。
材料参数可以用一个矩阵表示,其中每一行代表一个单元的材料参数。
接下来,我们需要建立有限元离散方程组。
在平面弹性力学问题中,离散方程组可以通过组装单元刚度矩阵和外力向量得到。
单元刚度矩阵可以通过单元的几何信息和材料参数计算得到。
外力向量可以根据边界条件和载荷信息计算得到。
最终,我们可以通过求解离散方程组得到节点的位移解。
我们可以根据节点的位移解计算出单元的应力和应变。
在平面弹性力学问题中,应力可以通过单元的几何信息和位移解计算得到。
应变可以通过应力和材料参数计算得到。
通过计算应力和应变,我们可以评估结构的稳定性和性能。
MATLAB编译平面有限元计算程序是一种强大的工具,可以用于求解各种复杂的工程问题。
通过定义几何信息、边界条件和材料参数,建立有限元离散方程组,求解得到节点的位移解,最终计算出单元的应力和应变。
有限元课程设计matlab
有限元课程设计matlab一、课程目标知识目标:1. 学生能理解有限元分析的基本原理,掌握运用MATLAB进行有限元建模和求解的基本步骤。
2. 学生能够运用MATLAB软件进行简单物理场的有限元模拟,并解释模拟结果。
3. 学生掌握如何将实际问题抽象为有限元模型,并能够运用MATLAB进行模型参数的设定和调整。
技能目标:1. 学生能够独立操作MATLAB软件,进行有限元模型的构建和求解。
2. 学生能够通过MATLAB编程实现有限元模型的自动化处理,包括前处理、求解和后处理。
3. 学生通过解决实际问题,提高数值分析能力和计算机应用能力。
情感态度价值观目标:1. 学生培养对科学研究的兴趣,特别是在工程计算和仿真领域。
2. 学生通过解决实际问题,体会数学和工程结合的美,增强对工程问题的探究欲望。
3. 学生通过团队合作解决问题,培养协作精神和解决问题的能力。
本课程针对高年级本科生或研究生,他们具备一定的数学基础和编程能力。
课程性质偏重实践,旨在通过MATLAB这一工具将有限元理论应用于具体问题的求解。
课程目标旨在使学生不仅掌握理论知识,而且能够实际操作,将理论知识转化为解决实际问题的技能。
通过课程学习,学生应能够将所学知识应用于未来的学术研究或工程实践中。
二、教学内容1. 有限元方法基本原理回顾:包括有限元离散化、单元划分、形函数、刚度矩阵和载荷向量等概念。
- 教材章节:第二章 有限元方法基础2. MATLAB编程基础:介绍MATLAB的基本操作、数据结构、流程控制、函数编写等。
- 教材章节:第三章 MATLAB编程基础3. MATLAB中的有限元工具箱使用:学习如何使用MATLAB内置的有限元工具箱进行建模和求解。
- 教材章节:第四章 MATLAB有限元工具箱介绍4. 有限元模型构建与求解:结合实际问题,学习如何构建有限元模型,并进行求解。
- 教材章节:第五章 有限元模型构建与求解5. 实例分析与上机操作:通过案例分析,让学生实际操作MATLAB软件,解决具体的有限元问题。
基于Matlab语言的按平面三角形单元划分的结构有限元程序设计
基于Matlab语言的按平面三角形单元划分的结构有限元程序设计专业:建筑与土木工程班级:建工研12-2姓名:韩志强学号:471220580基于Matlab语言的按平面三角形单元划分结构有限元程序设计一、有限单元发及Matlab语言概述1. 有限单元法随着现代工业、生产技术的发展,不断要求设计高质量、高水平的大型、复杂和精密的机械及工程结构。
为此目的,人们必须预先通过有效的计算手段,确切的预测即将诞生的机械和工程结构,在未来工作时所发生的应力、应变和位移因此,需要寻求一种简单而又精确的数值分析方法。
有限单元法正是适应这种要求而产生和发展起来的一种十分有效的数值计算方法。
有限元法把一个复杂的结构分解成相对简单的“单元”,各单元之间通过结点相互连接。
单元内的物理量由单元结点上的物理量按一定的假设内插得到,这样就把一个复杂结构从无限多个自由度简化为有限个单元组成的结构。
我们只要分析每个单元的力学特性,然后按照有限元法的规则把这些单元“拼装”成整体,就能够得到整体结构的力学特性。
有限单元法基本步骤如下:(1)结构离散:结构离散就是建立结构的有限元模型,又称为网格划分或单元划分,即将结构离散为由有限个单元组成的有限元模型。
在该步骤中,需要根据结构的几何特性、载荷情况等确定单元体内任意一点的位移插值函数。
(2)单元分析:根据弹性力学的几何方程以及物理方程确定单元的刚度矩阵。
(3)整体分析:把各个单元按原来的结构重新连接起来,并在单元刚度矩阵的基础上确定结构的总刚度矩阵,形成如下式所示的整体有限元线性方程:{}[]{}δF=①K式中,{}F是载荷矩阵,[]K是整体结构的刚度矩阵,{}δ是节点位移矩阵。
(4)载荷移置:根据静力等效原理,将载荷移置到相应的节点上,形成节点载荷矩阵。
(5)边界条件处理:对式①所示的有限元线性方程进行边界条件处理。
(6)求解线性方程:求解式①所示的有限元线性方程,得到节点的位移。
在该步骤中,若有限元模型的节点越多,则线性方程的数量就越多,随之有限元分析的计算量也将越大。
基于MATLAB和矩阵位移法的平面杆系结构有限元程序设计
基于MATLAB和矩阵位移法的平面杆系结构有限元程序设计阙仁波【摘要】基于MATLAB语言和矩阵位移法思想,进行了平面杆系结构有限元程序设计,并结合实例阐释了其编制思想和使用方法.该程序按分析刚架的一般模式编写,而将连续梁和桁架看作特殊的刚架,从而使其通用于分析刚架、连续梁、桁架及组合结构,对不同类型的结构,都采用统一的分析模式,这对分析组合结构尤其具有优势.该程序充分发挥了MATLAB-矩阵实验室擅长矩阵计算的优势,代码简洁,数据准备简单、计算流程清晰、结果输出可选,可作为矩阵位移法原理教学之外的一种实践补充,与教材紧密配套,切入方便快捷,以较低的门槛,引领学生初窥有限元.【期刊名称】《福建建筑》【年(卷),期】2019(000)005【总页数】8页(P109-116)【关键词】MATLAB;矩阵位移法;平面杆系结构;有限元【作者】阙仁波【作者单位】厦门大学嘉庚学院土木系福建漳州363105【正文语种】中文【中图分类】TU30 引言在结构力学发展史上,为了解超静定结构,19世纪建立了力法。
但用于解之后大量出现的高次超静定刚架,仍显繁琐。
在20世纪初,以力法为基础,发展求解高次超静定结构比力法更具优势的位移法[1],但随着基本未知量的增多,位移法的手算法依然让人不堪重负。
随着计算机的发展,位移法被以矩阵的方式来表达,即矩阵位移法,以适合编程计算,从而在传统手算法的基础上,发展了程序结构力学,极大地增强了求解高次超静定结构的能力,并将设计者很大程度地从繁琐的计算中解放出来,将更多的精力用于概念设计和定性分析 [1-2]。
在适合杆件结构的矩阵位移法的启示下,又发展了适合连续体的矩阵方法——有限元法,故把矩阵位移法称为杆件有限元法[3-6],但相对于连续体有限元法,门槛低,故若由此入门,将其核心思想、计算流程和程序编制掌握,然后,再拾阶而上,在求同中类比而广义化,在变异中对比而延拓,从一维杆件、线性(线性代数之线性、本构关系之线性)到多维连续体、非线性,不断朝横向和纵深发展,不仅难度梯度比直接由弹性力学有限元入门小得多,亦容易建构起合理而有序的知识体系。
平面三角形单元常应变单元matlab程序的编制
———————————————————————————————— 作者:
———————————————————————————————— 日期:
ﻩ
三角形常应变单元程序的编制与使用
有限元法是求解微分方程边值问题的一种通用数值方法,该方法是一种基于变分法(或变分里兹法)而发展起来的求解微分方程的数值计算方法,以计算机为手段,采用分片近似,进而逼近整体的研究思想求解物理问题。
有限元法中三节点三角形分析结构的步骤如下:
1)整理原始数据,如材料性质、荷载条件、约束条件等,离散结构并进行单元编码、结点编码、结点位移编码、选取坐标系。
2)单元分析,建立单元刚度矩阵。
3)整体分析,建立总刚矩阵。
4)建立整体结构的等效。
POISS=fscanf(FP1,'%f',1)%泊松比
THICK=fscanf(FP1,'%d',1)%厚度
LNODS=fscanf(FP1,'%d',[3,NELEM])'%单元定义数组(单元结点号)
功能:运用有限元法中三角形常应变单元解平面问题的计算主程序。
基本思想:单元结点按右手法则顺序编号。
荷载类型:可计算结点荷载。
说明:主程序的作用是通过赋值语句、读取和写入文件、函数调用等完成算法的全过程,即实现程序流程图的程序表达。
%-----------------------------------------------------------------------------------------------------
globalFORCEFIXED
globalBMATXDMATXSMATXAREA
《有限元方法与MATLAB程序设计》-课件--4-平面问题
x j ym xm y j ( y j ym )x (xm x j ) y
ai bi x ci y
L1
L2
1 2A
ai
a
j
bi bj
ci 1
c
j
x
L3
am bm cm y
1 1
x
xi
1 xj
1 xm
L1 L2
y yi y j ym L3
0 Ni
假设位移模式 u(x, y) 1 2x 3 y
m (xm , ym )
v(x, y) 4 5x 6 y
结点位移
j(xj, yj )
ui u(xi , yi ) 1 2 xi 3 yi
vi v(xi , yi ) 4 5xi 6 yi o
x
u j u(x j , y j ) 1 2 x j 3 y j
3
bi 0
3
3
3
3
3
2 Ai (x, y) (ai bi x ci y) ai bi x ci y 2A
i 1
i 1
i 1
i 1
i 1
i 1
3
ci 0
i 1
3
ai 2A
i 1
8
面积坐标
1x y 2Ai (x, y) 1 x j y j
1 xm ym
Ai (xi , yi ) 2 A Ai (x j , y j ) 0 Ai (xm , ym ) 0
x
Ni y
Ni y
Ni x
N j x
N j y
N j y
N j x
Nm x
Nm y
ui
Nm y
Nm x
平面三角形3结点有限元程序
一、平面三角形3结点有限元程序1、程序名:,FEM3.EXE2、程序功能本程序能计算弹性力学的平面应力问题和平面应变问题;能考虑自重和结点集中力两种荷载的作用,在计算自重时y轴取垂直向上为正;能处理非零已知位移,如支座沉降的作用。
主要输出的内容包括:结点位移、单元应力、主应力、第一主应力与x轴的夹角以及约束结点的支座反力。
程序采用Visual Fortran 5.0编制而成,输入数据全部采用自由格式。
3、程序流程及框图图1-1 程序流程图图1-2 程序框图其中,各子程序的功能如下:INPUT——输入结点坐标、单元信息和材料参数;MR——形成结点自由度序号矩阵;FORMMA——形成指标矩阵MA(N)并调用其他功能子程序,相当于主控程序;DIV——取出单元的3个结点号码和该单元的材料号并计算单元的b i,c i等;MGK——形成整体劲度矩阵并按一维存放在SK(NH)中;LOAD——形成整体结点荷载列阵F;OUTPUT——输出结点位移或结点荷载;TREAT——由于有非零已知位移,对K和F进行处理;DECOMP——整体劲度矩阵的分解运算;FOBA——前代、回代求出未知结点位移 ;ERFAC——计算约束结点的支座反力;KRS——计算单元劲度矩阵中的子块K rs。
4、输入数据及变量说明当程序开始运行时,按屏幕提示,键入数据文件的名字。
在运行程序之前,必须根据程序中输入要求建立一个存放原始数据的文件,这个文件的名字由少于8个字符或数字组成。
数据文件包括如下内容:⑴总控信息,共一条,9个数据NP,NE,NM,NR,NI,NL,NG,ND,NCNP——结点总数;NE——单元总数;NM——材料类型总数;NR ——约束结点总数;NI ——问题类型标识,0为平面应力问题,1为平面应变问题;NL ——受荷载作用的结点的数目;NG ——考虑自重作用为1,不计自重为0;ND ——非零已知位移结点的数目;NC ——要计算支座约束力的结点数目。
利用Maple编制平面问题有限元程序
第15卷第2期 2007年4月安徽建筑工业学院学报(自然科学版)Journal of Anhui Institute of Architecture &IndustryVol.15No.2 Apr.2007 收稿日期:2006201223作者简介:凡大林(1981-)男,硕士研究生,主要研究方向为工程结构分析与计算机辅助设计、仿真。
利用Maple 编制平面问题有限元程序凡大林, 方诗圣(合肥工业大学土木建筑工程学院,合肥 230009)摘 要:文章通过分别使用Maple 与Fortran 语言编程解决同一问题的比较,使读者可以容易地了解到Maple 软件比其他计算机语言进行编程时,更简洁、直观,而且降低了对编程者的数学要求,并且结合具体算例进一步介绍了如何应用Maple 的这些优点,编制有限元程序,解决工程中常遇到的平面问题。
为应用Maple 软件编制有限元计算程序提供一种可借鉴的模式。
关键词:Maple ;平面问题;有限元程序中图分类号:TP311.1 文献标识码:A 文章编号:100624540(2007)022081204Application of maple to make f inite element programFAN Da 2lin , FAN G Shi 2sheng(School of Civil Engineering ,Hefei University of Technology ,Hefei 230009,China )Abstract :This paper make t he reader known maple ’s advantages such as int uitive exp ression form ,lit 2tle mat he t heory demand Easily by solving t he same p roblem in Maple and Fort ran.The paper int ro 2duces how to use t hese advantages to make Finite Elment Program to solve plannar problem This st udy p rovides a good reference mode for making Finite Elment Program in Maple.K ey w ords :Maple ;plane problem ;Finite Element Program Maple 软件是由加拿大沃特卢(Waterloo )大学研发的一个具有强大符号运算能力、数值运算能力、图形处理能力的交互式计算机代数系统[1]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Matlab语言的按平面三角形单元划分的结构有限元程序设计专业:建筑与土木工程班级:姓名:学号:基于Matlab语言的按平面三角形单元划分结构有限元程序设计一、有限单元发及Matlab语言概述1. 有限单元法随着现代工业、生产技术的发展,不断要求设计高质量、高水平的大型、复杂和精密的机械及工程结构。
为此目的,人们必须预先通过有效的计算手段,确切的预测即将诞生的机械和工程结构,在未来工作时所发生的应力、应变和位移因此,需要寻求一种简单而又精确的数值分析方法。
有限单元法正是适应这种要求而产生和发展起来的一种十分有效的数值计算方法。
有限元法把一个复杂的结构分解成相对简单的“单元”,各单元之间通过结点相互连接。
单元内的物理量由单元结点上的物理量按一定的假设内插得到,这样就把一个复杂结构从无限多个自由度简化为有限个单元组成的结构。
我们只要分析每个单元的力学特性,然后按照有限元法的规则把这些单元“拼装”成整体,就能够得到整体结构的力学特性。
有限单元法基本步骤如下:(1)结构离散:结构离散就是建立结构的有限元模型,又称为网格划分或单元划分,即将结构离散为由有限个单元组成的有限元模型。
在该步骤中,需要根据结构的几何特性、载荷情况等确定单元体内任意一点的位移插值函数。
(2)单元分析:根据弹性力学的几何方程以及物理方程确定单元的刚度矩阵。
(3)整体分析:把各个单元按原来的结构重新连接起来,并在单元刚度矩阵的基础上确定结构的总刚度矩阵,形成如下式所示的整体有限元线性方程:{}[]{}δF=①K式中,{}F是载荷矩阵,[]K是整体结构的刚度矩阵,{}δ是节点位移矩阵。
(4)载荷移置:根据静力等效原理,将载荷移置到相应的节点上,形成节点载荷矩阵。
(5)边界条件处理:对式①所示的有限元线性方程进行边界条件处理。
(6)求解线性方程:求解式①所示的有限元线性方程,得到节点的位移。
在该步骤中,若有限元模型的节点越多,则线性方程的数量就越多,随之有限元分析的计算量也将越大。
(7)求解单元应力及应变根据求出的节点位移求解单元的应力和应变。
(8)结果处理与显示 进入有限元分析的后处理部分,对计算出来的结果进行加工处理,并以各种形式将计算结果显示出。
2. Matlab 简介在用有限元法进行结构分析时,将会遇到大量的数值计算,因而在实用上是一定要借助于计算机和有限元程序,才能完成这些复杂而繁重的数值计算工作。
而Matlab 是当今国际科学界最具影响力和活力的软件。
它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。
它提供了强大的科学计算,灵活的程序设计流程,高质量的图形可视化与界面设计,便捷的与其他程序和语言接口的功能。
Matlab 在各国高校与研究单位起着重大的作用。
“工欲善其事,必先利其器”。
如果有一种十分有效的工具能解决在教学与研究中遇到的问题,那么Matlab 语言正是这样的一种工具。
它可以将使用者从繁琐、无谓的底层编程中解放出来,把有限的宝贵时间更多地花在解决问题中,这样无疑会提高工作效率。
目前,Matlab 已经成为国际上最流行的科学与工程计算的软件工具,现在的Matlab 已经不仅仅是一个“矩阵实验室”了,它已经成为了一种具有广泛应用前景的全新的计算机高级编程语言了,有人称它为“第四代”计算机语言,它在国内外高校和研究部门正扮演着重要的角色。
Matlab 语言的功能也越来越强大,不断适应新的要求提出新的解决方法。
可以预见,在科学运算、自动控制与科学绘图领域Matlab 语言将长期保持其独一无二的地位。
为此,本例采用Matlab 语言编程,以利用其快捷强大的矩阵数值计算功能。
二、 问题描述一矩形薄板,一边固定,承受150kN 集中荷载,结构简图及按平面三角形单元划分的有限元模型图如下所示。
材料参数:弹性模量28/102m KN E ⨯=;泊松比:2.0=μ;薄板厚度mm 2。
在本例中,所取结构模型及数据主要用于程序设计理论分析,与工程实际无关。
1443212356三、参数输入:单元个数NELEM=4节点个数NNODE=6受约束边界点数NVFIX=2节点荷载个数NFORCE=1弹性模量YOUNG=2e8泊松比POISS=0.2厚度THICK=0.002单元节点编码数组LNODS =⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡652542432621节点坐标数组COORD =⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡1 01 11 20 2 0 1 0 0节点力数组FORCE =[4 0 -150]约束信息数组FIXED =⎥⎦⎤⎢⎣⎡1 1 6 1 1 1 以上数值数据为程序运行前输入的初始数据,存为“471220580.txt ”文本格式,同时必须放在Matlab 工作目录下,路径不对程序不能自动读取指定初始文件,运行出错。
初始数据文本文件输入格式如下图:四、Matlab语言程序源代码:1.程序中变量说明NNODE 单元节点数NPION 总结点数NELEM 单元数NVFIX 受约束边界点数FIXED 约束信息数组NFORCE 节点力数FORCE 节点力数组COORD 结构节点坐标数组LNODS 单元定义数组YOUNG 弹性模量POISS 泊松比THICK 厚度B 单元应变矩阵(3*6) D 单元弹性矩阵(3*3) S 单元应力矩阵(3*6) A 单元面积ESTIF 单元刚度矩阵ASTIF 总体刚度矩阵ASLOD 总体荷载向量ASDISP 节点位移向量ELEDISP 单元节点位移向量STRESS 单元应力FP1 数据文件指针2.Matlab语言程序代码%****************************************************************************** %初始化及数据调用format short e %设定输出类型clear %清除内存变量FP1=fopen('471220580.txt','rt'); %打开输入数据文件,读入控制数据NELEM=fscanf(FP1,'%d',1), %单元个数(单元编码总数)NPION=fscanf(FP1,'%d',1), %结点个数(结点编码总数)NVFIX=fscanf(FP1,'%d',1) %受约束边界点数NFORCE=fscanf(FP1,'%d',1), %结点荷载个数YOUNG=fscanf(FP1,'%e',1), %弹性模量POISS=fscanf(FP1,'%f',1), %泊松比THICK=fscanf(FP1,'%f',1) %厚度LNODS=fscanf(FP1,'%d',[3,NELEM])' %单元定义数组(单元结点号)%相应为单元结点号(编码)、按逆时针顺序输入COORD=fscanf(FP1,'%f',[2,NPION])' %结点坐标数组%坐标:x,y坐标(共NPOIN组)FORCE=fscanf(FP1,'%f',[3,NFORCE])' %结点力数组(受力结点编号, x方向,y方向)FIXED=fscanf(FP1,'%d',[3,NVFIX])' %约束信息(约束点,x约束,y约束)%有约束为1,无约束为0%***************************************************************************** %生成单元刚度矩阵并组成总体刚度矩阵ASTIF=zeros(2*NPION,2*NPION); %生成特定大小总体刚度矩阵并置0%*****************************************************************************for i=1:NELEM%生成弹性矩阵DD= [1 POISS 0;POISS 1 0;0 0 (1-POISS)/2]*YOUNG/(1-POISS^2)%***************************************************************************** %计算当前单元的面积A=det([1 COORD(LNODS(i,1),1) COORD(LNODS(i,1),2);1 COORD(LNODS(i,2),1) COORD(LNODS(i,2),2);1 COORD(LNODS(i,3),1) COORD(LNODS(i,3),2)])/2%***************************************************************************** %生成应变矩阵Bfor j=0:2b(j+1)=COORD(LNODS(i,(rem((j+1),3))+1),2)-COORD(LNODS(i,(rem((j+2),3))+1),2);c(j+1)=-COORD(LNODS(i,(rem((j+1),3))+1),1)+COORD(LNODS(i,(rem((j+2),3))+1),1); endB=[b(1) 0 b(2) 0 b(3) 0;...0 c(1) 0 c(2) 0 c(3);...c(1) b(1) c(2) b(2) c(3) b(3)]/(2*A);B1( :,:,i)=B;%***************************************************************************** %求应力矩阵S=D*BS=D*B;ESTIF=B'*S*THICK*A; %求解单元刚度矩阵a=LNODS(i,:); %临时向量,用来记录当前单元的节点编号for j=1:3for k=1:3ASTIF((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)...=ASTIF((a(j)*2-1):a(j)*2,(a(k)*2-1):a(k)*2)+ESTIF(j*2-1:j*2,k*2-1:k*2); %根据节点编号对应关系将单元刚度分块叠加到总刚%度矩阵中endendend%***************************************************************************** %将约束信息加入总体刚度矩阵(对角元素改一法)for i=1:NVFIXif FIXED(i,2)==1ASTIF(:,(FIXED(i,1)*2-1))=0; %一列为零ASTIF((FIXED(i,1)*2-1),:)=0; %一行为零ASTIF((FIXED(i,1)*2-1),(FIXED(i,1)*2-1))=1; %对角元素为1endif FIXED(i,3)==1ASTIF( :,FIXED(i,1)*2)=0; %一列为零ASTIF(FIXED(i,1)*2,:)=0; %一行为零ASTIF(FIXED(i,1)*2 ,FIXED(i,1)*2)=1; %对角元素为1endend%***************************************************************************** %生成荷载向量ASLOD(1:2*NPION)=0; %总体荷载向量置零for i=1:NFORCEASLOD((FORCE(i,1)*2-1):FORCE(i,1)*2)=FORCE(i,2:3);end%***************************************************************************** %求解内力ASDISP=ASTIF\ASLOD' %计算节点位移向量ELEDISP(1:6)=0; %当前单元节点位移向量for i=1:NELEMfor j=1:3ELEDISP(j*2-1:j*2)=ASDISP(LNODS(i,j)*2-1:LNODS(i,j)*2);%取出当前单元的节点位移向量endiSTRESS=D*B1(:, :, i)*ELEDISP' %求内力endfclose(FP1); %关闭数据文件五、程序运行结果NELEM =4NPION =6NVFIX =2NFORCE =1YOUNG =200000000POISS =2.0000e-001THICK =2.0000e-003LNODS =1 2 62 3 42 4 52 5 6COORD =0 01 02 02 11 10 1FORCE =4 0 -150FIXED =1 1 16 1 1D =2.0833e+008 4.1667e+007 0 4.1667e+007 2.0833e+008 00 0 8.3333e+007A =5.0000e-001D =2.0833e+008 4.1667e+007 0 4.1667e+007 2.0833e+008 00 0 8.3333e+007A =5.0000e-001D =2.0833e+008 4.1667e+007 0 4.1667e+007 2.0833e+008 00 0 8.3333e+007A =5.0000e-001D =2.0833e+008 4.1667e+007 0 4.1667e+007 2.0833e+008 00 0 8.3333e+007A =5.0000e-001ASDISP =-8.0607e-004-1.5848e-003-1.0281e-003-4.4727e-0031.1937e-003-4.6947e-0038.6670e-004-1.8880e-003(说明:以上12个ASDISP输出结果数据表示节点位移向量,即各节点分别在X,Y方向上产生的位移。