MATLAB 有限元计算程序3
Matlab PDE工具箱有限元法求解偏微分方程
在科学技术各领域中,有很多问题都可以归结为偏微分方程问题。
在物理专业的力学、热学、电学、光学、近代物理课程中都可遇见偏微分方程。
偏微分方程,再加上边界条件、初始条件构成的数学模型,只有在很特殊情况下才可求得解析解。
随着计算机技术的发展,采用数值计算方法,可以得到其数值解。
偏微分方程基本形式而以上的偏微分方程都能利用PDE工具箱求解。
PDE工具箱PDE工具箱的使用步骤体现了有限元法求解问题的基本思路,包括如下基本步骤:1) 建立几何模型2) 定义边界条件3) 定义PDE类型和PDE系数4) 三角形网格划分5) 有限元求解6) 解的图形表达以上步骤充分体现在PDE工具箱的菜单栏和工具栏顺序上,如下具体实现如下。
打开工具箱输入pdetool可以打开偏微分方程求解工具箱,如下首先需要选择应用模式,工具箱根据实际问题的不同提供了很多应用模式,用户可以基于适当的模式进行建模和分析。
在Options菜单的Application菜单项下可以做选择,如下或者直接在工具栏上选择,如下列表框中各应用模式的意义为:① Generic Scalar:一般标量模式(为默认选项)。
② Generic System:一般系统模式。
③ Structural Mech.,Plane Stress:结构力学平面应力。
④ Structural Mech.,Plane Strain:结构力学平面应变。
⑤ Electrostatics:静电学。
⑥ Magnetostatics:电磁学。
⑦ Ac Power Electromagnetics:交流电电磁学。
⑧ Conductive Media DC:直流导电介质。
⑨ Heat Tranfer:热传导。
⑩ Diffusion:扩散。
可以根据自己的具体问题做相应的选择,这里要求解偏微分方程,故使用默认值。
此外,对于其他具体的工程应用模式,此工具箱已经发展到了Comsol Multiphysics软件,它提供了更强大的建模、求解功能。
matlab桁架结构有限元计算
matlab桁架结构有限元计算摘要:一、引言- 介绍MATLAB在桁架结构有限元计算中的应用- 说明本文的主要内容和结构二、有限元计算原理- 有限元方法的背景和基本原理- 有限元方法在桁架结构分析中的应用三、MATLAB实现桁架结构有限元计算- MATLAB的基本操作和编程基础- 使用MATLAB进行桁架结构有限元计算的步骤和示例四、MATLAB桁架结构有限元计算的应用- 分析不同桁架结构的特点和计算结果- 探讨MATLAB在桁架结构有限元计算中的优势和局限五、结论- 总结MATLAB在桁架结构有限元计算中的应用和优势- 展望MATLAB在桁架结构分析中的未来发展方向正文:一、引言随着计算机技术的不断发展,有限元方法已经成为工程界解决复杂问题的重要手段。
MATLAB作为一款功能强大的数学软件,可以方便地实现桁架结构的有限元计算。
本文将介绍MATLAB在桁架结构有限元计算中的应用,并详细阐述其操作方法和计算原理。
二、有限元计算原理1.有限元方法的背景和基本原理有限元法是一种数值分析方法,通过将连续的求解域离散为离散的单元,将复杂的问题转化为求解单元的线性或非线性方程组。
有限元方法具有适应性强、精度高、计算效率高等优点,广泛应用于固体力学、流体力学、传热等领域。
2.有限元方法在桁架结构分析中的应用桁架结构是一种由杆件组成的结构,其节点只有三个自由度。
有限元方法可以有效地分析桁架结构的强度、刚度和稳定性,为工程设计提供理论依据。
三、MATLAB实现桁架结构有限元计算1.MATLAB的基本操作和编程基础MATLAB是一种功能强大的数学软件,可以进行矩阵运算、绘制图形、编写程序等操作。
在MATLAB中,用户可以通过编写脚本文件或使用图形界面进行各种计算和分析。
2.使用MATLAB进行桁架结构有限元计算的步骤和示例(1) 建立桁架结构模型:根据实际结构绘制桁架的节点和杆件,确定各节点的三自由度。
(2) 离散化:将桁架结构离散为有限个单元,每个单元包含若干个节点。
Matlab 有限元法计算分析程序编写
6) M函数文件 与命令文件不同,函数文件从外界只能看到传给它的输入 量和送出来的计算结果,而内部运作是看不见的。它的特 点是 (1)从形式上看,与命令文件不同,函数文件的第一行总是以 “function”引导的“函数申明行”。 (2)从运行上看,与命令文件运行不同,每当函数文件运行, MATLAB就会专门为它开辟临时工作空间,所有中间变量 都存放在函数工作空间中,当执行完文件最后一条指令和 遇到return时,就结束该函数文件的执行,同时该临时函数 工作空间及其所有的中间变量立即被清除。 (3)对于函数文件中的变量,如果不作特别说明,默认为临时 局部变量,这些临时变量就存放在函数的临时工作空间中, 当函数结束时他们被立即清除。与之相对应的是全局变量, 他们是通过global指令进行特别申明,这些全局变量可被几 个不同的函数共享。 • 函数文件的编辑也可用MATLAB editor/debugger。
有限元法计算分析程序编写
结构参数输入,包括
1)节点坐标值 2)单元类型以及连接信息 3)各单元的弹性模量、截面积(厚度)等 4)荷载形式以及作用位置、作用方向、荷载值 5)约束条件 6)输出信息
m j
对节点和单元分别编号 每个节点的自由度根据 节点号计算得到
i
y
o
x
计算结构的刚度矩阵
对各单元作如下的计算 a)计算单元刚度矩阵 b)计算坐标转换矩阵(如果需要) c)作坐标转换计算(如果需要) d)按自由度顺序叠加到总刚度矩阵中
MATLAB的使用方法
1) 最简单的计算器使用法 求[12+2×(7-4)]÷32的算术运算结果 (1)用键盘在MATLAB指令窗中输入一下内容 (12+2*(7-4))/3^2 (2)在上述表达式输入完成后,按【Enter】键,该指令被执行 (3)在指令执行后,MATLAB指令窗中将显示一下内容 ans = 2 [说明] 加 + 减 乘 * 除 / 或 \ (这两个符号对于数组有不同的含义) 幂 ^ “ans”是answer的缩写,其含义是运算答案,它是MATLAB的一个默 认变量
Matlab有限元分析操作基础
Matlab有限元分析操作基础Matlab 有限元分析20140226为了用Matlab 进行有限元分析,首先要学会Matlab 基本操作,还要学会使用Matlab 进行有限元分析的基本操作。
1. 复习:上节课分析了弹簧系统x 推导了系统刚度矩阵1122121200k k k k k k k k ----+??2. Matlab有限元分析的基本操作(1)单元划分(选择何种单元,分成多少个单元,标号)(2)构造单元刚度矩阵(列出…)(3)组装系统刚度矩阵(集成整体刚度矩阵)(4)引入边界条件(消除冗余方程)(5)解方程(6)后处理(扩展计算)3. Matlab有限元分析实战【实例1】分析:步骤一:单元划分步骤二:构造单元刚度矩阵>>k1=SpringElementStiffness(100) >>…?步骤三:构造系统刚度矩阵a) 分析SpringAssemble库函数function y = SpringAssemble(K,k,i,j)% This function assembles the element stiffness% matrix k of the spring with nodes i and j into the % global stiffness matrix K.% function returns the global stiffness matrix K% after the element stiffness matrix k is assembled. K(i,i) = K(i,i) + k(1,1);K(i,j) = K(i,j) + k(1,2);K(j,i) = K(j,i) + k(2,1);K(j,j) = K(j,j) + k(2,2);y = K;b) K是多大矩阵?今天的系统刚度矩阵是什么?因为11221212k kk kk k k k----+所以10001000200200 100200300----c) K=SpringAssemble(K,k1,1,2) function y = SpringAssemble(K,k,i,j) K(i,i) = K(i,i) + k(1,1);K(i,j) = K(i,j) + k(1,2);K(j,i) = K(j,i) + k(2,1);K(j,j) = K(j,j) + k(2,2); 1100100100100k -??=??-??10010001001000000K -??=-??K=SpringAssemble(K,k2,2,3) 1200200200200k -??10010001003002000200200K -??=---??1001000100010010030020002002000200200100200300----≠----步骤四:引入边界条件,消除冗余方程>>k=K(2:3,2:3)%构造不含冗余的方程>>f=[0;15]%构造外力列阵步骤五:解方程引例:已知1212u 31u u u +=??-=?,求 12u u 和解:类似求解KU=F ,输入下列Matlab 命令:>> K=[1 1;1,-1]>> F=[3;1]>> U=inv(K)*F>> U=K \F(继续弹簧系统求解)>>u=k \f %使用高斯消去法求解>>U=[0 ; u]%构造原方程组>>F=K*U %求出所有外力,含多余计算步骤六:后处理、扩展计算>>u1=[0;U(2)]%构造单元位移>>f1=SpringElementForces(k1,u1)%求单元1内力>>u2=[U(2) ; U(3)]%构造单元2位移>>f2=SpringElementForces(k2,u2)%求单元2内力4. 总结clck1=SpringElementStiffness(100)%创建单元刚度矩阵 1 k2=SpringElementStiffness(200)%创建单元刚度矩阵 2 K=zeros(3,3)%创建空白整体刚度矩阵K=SpringAssemble(K,k1,1,2)%按节点装入单元矩阵 1 K=SpringAssemble(K,k2,2,3)%按节点装入单元矩阵2 k=K(2:3,2:3)%构造不含冗余的方程f=[0;15]%构造外力列阵u=k\f%使用高斯消去法求解U=[0 ; u]%构造系统节点位移列阵F=K*U%求出所有外力,含多余计算u1=[0;U(2)]%构造单元位移f1=SpringElementForces(k1,u1)%求单元1内力u2=[U(2) ; U(3)]%构造单元2位移f2=SpringElementForces(k2,u2)%求单元2内力5. 练习1 Danyi 132 dan 34 3dan 35 4dan 35 dan5 54 dan6 42。
平面梁单元MATLAB有限元程序
平面梁单元MATLAB有限元程序function []=beam2n()clear allclose allclearclose%------------------------ BEAM2 ---------------------------disp('========================================'); disp(' PROGRAM BEAM2 '); disp(' Beam Bending Analysis '); disp(' T.R.Chandrupatla and A.D.Belegundu '); disp('========================================');InputData;Bandwidth;Stiffness;ModifyForBC;BandSolver;ReactionCalc;Output;%------------------------ function InputData ---------------------------function [] = InputData();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTglobal TITLE FILE1 FILE2global LINP LOUTglobal NQdisp(blanks(1));FILE1 = input('Input Data File Name ','s'); LINP = fopen(FILE1,'r');FILE2 = input('Output Data File Name ','s'); LOUT = fopen(FILE2,'w');DUMMY = fgets(LINP);TITLE = fgets(LINP);DUMMY = fgets(LINP);TMP = str2num(fgets(LINP));[NN, NE, NM, NDIM, NEN, NDN] =deal(TMP(1),TMP(2),TMP(3),TMP(4),TMP(5),TMP(6));NQ = NDN * NN;DUMMY = fgets(LINP);TMP = str2num(fgets(LINP));[ND, NL, NMPC]= deal(TMP(1),TMP(2),TMP(3));NPR=1; % E%----- Coordinates -----DUMMY = fgets(LINP);for I=1:NNTMP = str2num(fgets(LINP));[N, X(N,:)]=deal(TMP(1),TMP(2:1+NDIM)); end%----- Connectivity -----DUMMY = fgets(LINP);for I=1:NETMP = str2num(fgets(LINP));[N,NOC(N,:), MAT(N), SMI(N)] = ...deal(TMP(1),TMP(2:1+NEN), TMP(2+NEN), TMP(3+NEN));end%----- Specified Displacements ----- DUMMY = fgets(LINP); for I=1:NDTMP = str2num(fgets(LINP));[NU(I,:),U(I,:)] = deal(TMP(1), TMP(2)); end%----- Component Loads -----DUMMY = fgets(LINP);F = zeros(NQ,1);for I=1:NLTMP = str2num(fgets(LINP));[N,F(N)]=deal(TMP(1),TMP(2)); end%----- Material Properties ----- DUMMY = fgets(LINP);for I=1:NMTMP = str2num(fgets(LINP));[N, PM(N,:)] = deal(TMP(1), TMP(2:NPR+1));end%----- Multi-point Constraints B1*Qi+B2*Qj=B0if NMPC > 0DUMMY = fgets(LINP);for I=1:NMPCTMP = str2num(fgets(LINP));[BT(I,1), MPC(I,1), BT(I,2), MPC(I,2), BT(I,3)] = ...deal(TMP(1),TMP(2),TMP(3),TMP(4),TMP(5));endendfclose(LINP);%------------------------ function Bandwidth ---------------------------function []=Bandwidth();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBW global X NOC F AREA MAT SMI S global PM NU U MPC BT STRESS REACT global CNSTglobal TITLE FILE1 FILE2global LINP LOUT%----- Bandwidth Evaluation ----- NBW = 0;for N=1:NENABS = NDN*(abs(NOC(N, 1) - NOC(N, 2)) + 1);if (NBW < NABS)NBW = NABS;endendfor I=1:NMPCNABS = abs(MPC(I, 1) - MPC(I, 2)) + 1;if (NBW < NABS)NBW = NABS;endenddisp(sprintf('Bandwidth = %d', NBW));%------------------------ function Stiffness ---------------------------function []=Stiffness();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBW global X NOC F AREA MAT SMI S global PM NU U MPC BT REACTglobal CNSTglobal NQ%----- Global Stiffness Matrix S = zeros(NQ,NBW);for N = 1:NEdisp(sprintf('Forming Stiffness Matrix of Element %d', N));%-------- Element Stiffness and Temperature Load -----N1 = NOC(N, 1);N2 = NOC(N, 2);M = MAT(N);EL = abs(X(N1) - X(N2));EIL = PM(M, 1) * SMI(N) / EL^3;SE(1, 1) = 12 * EIL;SE(1, 2) = EIL * 6 * EL;SE(1, 3) = -12 * EIL;SE(1, 4) = EIL * 6 * EL;SE(2, 1) = SE(1, 2);SE(2, 2) = EIL * 4 * EL * EL;SE(2, 3) = -EIL * 6 * EL;SE(2, 4) = EIL * 2 * EL * EL;SE(3, 1) = SE(1, 3);SE(3, 2) = SE(2, 3);SE(3, 3) = EIL * 12;SE(3, 4) = -EIL * 6 * EL;SE(4, 1) = SE(1, 4);SE(4, 2) = SE(2, 4);SE(4, 3) = SE(3, 4);SE(4, 4) = EIL * 4 * EL * EL;disp('.... Placing in Global Locations'); for II = 1:NENNRT = NDN * (NOC(N, II) - 1);for IT = 1:NDNNR = NRT + IT;I = NDN * (II - 1) + IT;for JJ = 1:NENNCT = NDN * (NOC(N, JJ) - 1);for JT = 1:NDNJ = NDN * (JJ - 1) + JT;NC = NCT + JT - NR + 1;if (NC > 0)S(NR, NC) = S(NR, NC) + SE(I, J);endendendendendend%------------------------ function ModifyForBC ---------------------------function []=ModifyForBC();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTglobal NQ%----- Decide Penalty Parameter CNST ----- CNST = 0;for I = 1:NQif CNST < S(I, 1); CNST = S(I, 1); end endCNST = CNST * 10000;%----- Modify for Boundary Conditions ----- % --- Displacement BC ---for I = 1:NDN = NU(I);S(N, 1) = S(N, 1) + CNST;F(N) = F(N) + CNST * U(I);end%--- Multi-point Constraints ---for I = 1:NMPCI1 = MPC(I, 1);I2 = MPC(I, 2);S(I1, 1) = S(I1, 1) + CNST * BT(I, 1) * BT(I, 1);S(I2, 1) = S(I2, 1) + CNST * BT(I, 2) * BT(I, 2);IR = I1;if IR > I2; IR = I2; endIC = abs(I2 - I1) + 1;S(IR, IC) = S(IR, IC) + CNST * BT(I, 1) * BT(I, 2);F(I1) = F(I1) + CNST * BT(I, 1) * BT(I, 3);F(I2) = F(I2) + CNST * BT(I, 2) * BT(I, 3); end%------------------------ function BandSolver ---------------------------function []=BandSolver();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTglobal NQ%----- Equation Solving using Band Solver ----- disp('Solving using Band Solver(bansol.m)');[F] = bansol(NQ,NBW,S,F);%------------------------ function ReactionCalc ---------------------------function []=ReactionCalc();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTfor I = 1:NDN = NU(I);REACT(I) = CNST * (U(I) - F(N));end%------------------------ function Output ---------------------------function []=Output();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTglobal TITLE FILE1 FILE2global LINP LOUTdisp(sprintf('Output for Input Data from file %s\n',FILE1)); fprintf(LOUT,'Output for Input Data from file %s\n',FILE1);disp(TITLE);fprintf(LOUT,'%s\n',TITLE);disp(' Node# X-Displ Rotation');fprintf(LOUT,' Node# X-Displ Rotation\n'); I=[1:NN]';% print a matrixdisp(sprintf(' %4d %15.4E %15.4E\n',[I,F(2*I-1),F(2*I)]')); fprintf(LOUT,' %4d %15.4E %15.4E\n',[I,F(2*I-1),F(2*I)]');%----- Reaction Calculation -----disp(sprintf(' DOF# Reaction'));fprintf(LOUT,' DOF# Reaction\n');for I = 1:NDN = NU(I);R = CNST * (U(I) - F(N));disp(sprintf(' %4d %15.4E',N,REACT(I)));fprintf(LOUT,' %4d %15.4E\n',N,REACT(I)); endfclose(LOUT);disp(sprintf('The Results are available in the text file %s', FILE2));。
《有限元基础教程》_【MATLAB算例】3.3.7(2) 三梁平面框架结构的有限元分析(Beam2D2Node)
【MATLAB 算例】3.3.7(2) 三梁平面框架结构的有限元分析(Beam2D2Node)如图3-19所示的框架结构,其顶端受均布力作用,结构中各个截面的参数都为:113.010Pa E =⨯,746.510I m -=⨯,426.810A m -=⨯。
试基于MA TLAB 平台求解该结构的节点位移以及支反力。
图3-19 框架结构受一均布力作用解答:对该问题进行有限元分析的过程如下。
(1) 结构的离散化与编号将该结构离散为3个单元,节点位移及单元编号如图3-20所示,有关节点和单元的信息见表3-5。
(a ) 节点位移及单元编号(b ) 等效在节点上的外力图3-20 单元划分、节点位移及节点上的外载(2) 各个单元的描述首先在MA TLAB 环境下,输入弹性模量E 、横截面积A 、惯性矩I 和长度L ,然后针对单元1,单元2和单元3,分别二次调用函数Beam2D2Node_ElementStiffness ,就可以得到单元的刚度矩阵k1(6×6)和k2(6×6),且单元2和单元3的刚度矩阵相同。
>> E=3E11;>> I=6.5E-7;>> A=6.8E-4;>> L1=1.44;>> L2=0.96;>> k1=Beam2D2Node_Stiffness(E,I,A,L1);>> k2=Beam2D2Node_Stiffness(E,I,A,L2);(3) 建立整体刚度方程将单元2和单元3的刚度矩阵转换成整体坐标下的形式。
由于该结构共有4个节点,则总共的自由度数为12,因此,结构总的刚度矩阵为KK(12×12),对KK 清零,然后两次调用函数Beam2D2Node_Assemble 进行刚度矩阵的组装。
>> T=[0,1,0,0,0,0;-1,0,0,0,0,0;0,0,1,0,0,0;0,0,0,0,1,0;0,0,0,-1,0,0;0,0,0,0,0,1];>> k3=T'*k2*T;>> KK=zeros(12,12);>> KK=Beam2D2Node_Assemble(KK,k1,1,2);>> KK=Beam2D2Node_Assemble(KK,k3,3,1);>> KK=Beam2D2Node_Assemble(KK,k3,4,2)KK = 1.0e+008 *1.4431 0 0.0127 -1.4167 0 0 -0.0264 0 0.0127 0 0 0 02.1328 0.0056 0 -0.0078 0.0056 0 -2.1250 0 0 0 0 0.0127 0.0056 0.0135 0 -0.0056 0.0027 -0.0127 0 0.0041 0 0 0 -1.4167 0 0 1.4431 0 0.0127 0 0 0 -0.0264 0 0.0127 0 -0.0078 -0.0056 0 2.1328 -0.0056 0 0 0 0 -2.1250 0 0 0.0056 0.0027 0.0127 -0.0056 0.0135 0 0 0 -0.0127 0 0.0041 -0.0264 0 -0.0127 0 0 0 0.0264 0 -0.0127 0 0 0 0 -2.1250 0 0 0 0 0 2.1250 0 0 0 0 0.0127 0 0.0041 0 0 0 -0.0127 0 0.0081 0 0 0 0 0 0 -0.0264 0 -0.0127 0 0 0 0.0264 0 -0.0127 0 0 0 0 -2.1250 0 0 0 0 0 2.1250 0 0 0 0 0.0127 0 0.0041 0 0 0 -0.0127 0 0.0081(4) 边界条件的处理及刚度方程求解该问题的位移边界条件为0444333======θθv u v u 。
现行三角元有限元MATLAB源程序
傻瓜运行程序,全自动过程首先建立一个数据输入的M文件:syms o;p=1;E=210e6;%输入弹性模量;NU=0.3;%输入泊松比;t=0.025;%输入材料厚度;x=[0,0.5;0.25,0.5;0.125,0.375;0,0.25;0.25,0.25;0.125,0.125;0,0;0.25,0;0.375,0.125;0.5,0.25;0.5,0]; %输入每个结点的坐标值;ff=[1,3,2;1,4,3;3,5,2;3,4,5;4,6,5;4,7,6;5,6,8;6,7,8;5,8,9;5,9,10;8,11,9;9,11,10];%输入每个单元的信息;F=[o;o;0;0;0;0;o;o;0;-12.5;0;0;o;o;0;0;0;0;0;0;0;0];%输入总体结点载荷矢量,其中未知量用符号变量'o'表示;U=[0;0;o;o;o;o;0;0;o;o;o;o;0;0;o;o;o;o;o;o;o;o];%输入总体结点位移矢量,其中未知量用符号变量'o'表示;然后建立一个运行程序的M文件:K=zeros(2*size(x),2*size(x));%生成初始整体刚度矩阵;sigma=zeros(size(ff),3);%生成初始单元应力矩阵;s=zeros(size(ff),3);%生成初始单元主应力应力及主应力方向角矩阵;for i=1:size(ff)%i表示第i个单元;kk=LinearTriangleElementStiffness(E,NU,t,x(ff(i,1),1),x(ff(i,1),2),x(ff(i,2),1),x(ff(i,2),2),x(ff(i,3), 1),x(ff(i,3),2),p);%计算每个单元的单元刚度矩阵;K=LinearTriangleAssemble(K,kk,ff(i,1),ff(i,2),ff(i,3));%集成整体刚度矩阵;end%根据每个单元的单元刚度矩阵,循环集成整体刚度矩阵;k=K;for i=1:size(U)if U(i)==0F(i)=0;k(i,:)=0;k(:,i)=0;k(i,i)=1;elseendend%将未知的结点载荷及其对应的总体刚度的行和列定义为0,并定义对应的i行i列为1;U=k\F;F=K*U;%计算总体结点载荷矢量for i=1:size(ff)l=ff(i,1);m=ff(i,2);n=ff(i,3);uu=[U(2*l-1);U(2*l);U(2*m-1);U(2*m);U(2*n-1);U(2*n)];%建立单元结点位移矢量;ss=LinearTriangleElementStresses(E,NU,x(ff(i,1),1),x(ff(i,1),2),x(ff(i,2),1),x(ff(i,2),2),x(ff(i,3),1), x(ff(i,3),2),p,uu);%计算单元应力;sss=LinearTriangleElementPStresses(ss);%计算单元主应力和主应力方向角;sigma(i,1)=double(ss(1,1));sigma(i,2)=double(ss(2,1));sigma(i,3)=double(ss(3,1));%将每个单元应力赋值到单元应力矩阵sigma中;s(i,1)=double(sss(1,1));s(i,2)=double(sss(2,1));s(i,3)=double(sss(3,1));%将每个单元主应力和主应力方向角赋值到单元主应力应力及主应力方向角矩阵s中;endU=double(U);F=double(F);uu=double(uu);K%以下程序输出结点信息到‘节点信息.txt’中;fid=fopen('C:\Documents and Settings\LXY\桌面\节点信息.txt','wt');fprintf(fid,'\n%s\n','-------------------------------------------------------节点信息----------------------------------------------------------');fprintf(fid,'\n%s\n',' 节点号x坐标y坐标x位移y位移水平支反力垂直支反力');for i=1:size(x)fprintf(fid,'%10d%18.8f%18.8f%18.8f%18.8f%18.8f%18.8f\n',i,x(i,1),x(i,2),U(2*(i-1)+1),U(2*(i-1)+2),F(2*(i-1)+1),F(2*(i-1)+2));endfclose(fid);%以下程序输出单元信息到‘单元信息.txt’中;fid=fopen('C:\Documents and Settings\LXY\桌面\单元信息.txt','wt');fprintf(fid,'\n%s\n','---------------------------------------------------------------单元信息----------------------------------------------------------------------');fprintf(fid,'\n%s\n',' 单元号结点1 结点2 结点3 x方向拉应力y方向拉应力剪应力主应力方向角'); for i=1:size(ff)fprintf(fid,'%10d%18.8f%18.8f%18.8f%18.8f%18.8f%18.8f%18.8f\n',i,ff(i,1),ff(i,2),ff(i,3),sigma( i,1),sigma(i,2),sigma(i,3),s(i,3));endfclose(fid);。
有限元MATLAB源程序
MATLAB源程序(把程序部分复制进入MATLAB,直接运行就可得到结果。
)第1章假定P=-100,L=10m,E=3e11,梁截面是正方形其宽度为h=5e-2m,根据上述数据编制MATLAB程序如下:clearsyms x L EIw='c1'*sin(pi*x/(2*L))+'c2'*sin(3*pi*x/(2*L))+'c3'*sin(5*pi*x/(2*L))+'c4'*sin(7*pi*x/(2*L));kk=int(EI/2*(diff(w,x,2))^2-'P'*w,0,L);[c1,c2,c3,c4]=solve(diff(kk,'c1'),diff(kk,'c2'),diff(kk,'c3'),diff(kk,'c4'),'c1,c2,c3,c4')[c1,c2,c3,c4]根据运行结果得出的[c1,c2,c,3,c4]接着进行下列编程:P=-100;L=10;E=3e11;h=5e-3;I=h^4/12EI=E*I;x=0:L;c1=64*P*L^4/EI/pi^5c2=64/243*P*L^4/EI/pi^5c3=64/3125*P*L^4/EI/pi^5c4=64/16807*P*L^4/EI/pi^5w=c1*sin(pi*x/(2*L))+c2*sin(3*pi*x/(2*L))+c3*sin(5*pi*x/(2*L))+c4*sin(7*pi*x/(2*L))w=1e-4*wplot(x,w,'k','linewidth',2)gridxlabel('L')ylabel('w')y=P*L^3/(3*EI)[y w(10)]假定P=-100,L=10m,E=3e11,梁截面是正方形其宽度为h=5e-2m,根据上述数据编制MATLAB程序如下:clearsyms x EI Lw='c1'*x^2+'c2'*x^3+'c3'*x^4+'c4'*x^5kk=int(EI/2*(diff(w,x,2))^2-'P'*w,0,L)[c1,c2,c3,c4]=solve(diff(kk,'c1'),diff(kk,'c2'),diff(kk,'c3'),diff(kk,'c4'),’c1,c2,c3,c4’)根据运行结果得出的[c1,c2,c,3,c4]接着进行下列编程:P=-100;L=10;EI=1.56e5;x=0:L;c1=1/4*L^2*P/EIc2=-1/6*L*P/EIc3=1/24*P/EIc4=0w=c1*x.^2+c2*x.^3+c3*x.^4+c4*x.^5plot(x,w,'k')gridxlabel('L')ylabel('w')y=P*L^3/(3*EI)[y w(11)]以形函数(Shape Function)为试探函数形函数f1代表左侧节点的位移函数,f2代表右侧节点的位移函数,f3代表左侧节点的斜率函数,f4代表右侧节点的斜率函数。
matlab有限元计算程序3
hFrac1=[hFrac1;(diams(i)/l)*hFrac(i)];
end
j=j+1;
if j<=4
k=abs(params.SubTriangles(TList(i),j));
% If requested, assign the old estimated errors
% and the diameters of the parent triangles to
% each triangle in the new mesh:
if nargin==7 && nargout>=2
d0=d0(params.SuperTriangle);
d=d(params.SuperTriangle);
d0(j)=d(params.SuperTriangle(j));
end
% Stop if the maximum number of triangles has been reached:
% T, refining each triangle whose index belongs to TList.
% Each T_i, i=TList(j), is refined until it is partitioned
% into subtriangles whose diameters are all less than
function [T,esterrs0,d0]=LocalRefine1(T,TList,hFrac,esterrs0,,d1]=LocalRefine1(T,TList,hFrac,esterrs,d0,d)
有限元的MATLAB解法
有限元的MATLAB解法1.打开MATLAB。
2.输入“pdetool”再回车,会跳出PDE Toolbox的窗口(PDE意为偏微分方程,是partial differential equations的缩写),需要的话可点击Options菜单下Grid命令,打开栅格。
3.完成平面几何模型:在PDE Toolbox的窗口中,点击工具栏下的矩形几何模型进行制作模型,可画矩形R,椭圆E,圆C,然后在Set formula栏进行编辑并(如双脊波导R1+R2+R3改为RI-R2-R3,设定a、b、s/a、d/b的值从而方便下步设定坐标)用算术运算符将图形对象名称连接起来,若还需要,可进行储存,形成M文件。
4.用左键双击矩形进行坐标设置:将大的矩形left和bottom都设为0,width是矩形波导的X轴的长度,height是矩形波导的y轴的长度,以大的矩形左下角点为原点坐标为参考设置其他矩形坐标。
5.进行边界设置:点击“Boundary”中的“Boundary Mode”,再点击“Boundary”中的“Specify Boundary Conditions”,选择符合的边界条件,Neumann为诺曼条件,Dirichlet为狄利克雷条件,边界颜色显示为红色。
6.进入PDE模式:点击"PDE"菜单下“PDE Mode”命令,进入PDE 模式,单击“PDE Specification”,设置方程类型,“Elliptic”为椭圆型,“Parabolic”为抛物型,“Hyperbolic”为双曲型,“Eigenmodes”为特征值问题。
7.对模型进行剖分:点击“Mesh”中“Initialize Mesh”进行初次剖分,若要剖的更细,再点击“Refine Mesh”进行网格加密。
8.进行计算:点击“Solve”中“Solve PDE”,解偏微分方程并显示图形解,u值即为Hz或者Ez。
9.单击“Plot”菜单下“Parameters”选项,打开“Plot Selection”对话框。
MATLAB有限元分析与应用可编辑全文
%
modulus of elasticity E, cross-sectional
%
area A, and length L. The size of the
%
element stiffness matrix is 2 x 2.
y = [E*A/L -E*A/L ; -E*A/L E*A/L];
2019/11/28
y = k * u/A;
2019/11/28
18
§3-2 线性杆元
3、实例计算分析应用
如图所示二线性杆元结构,假定E=210MPa,A=0.003m^2,P=10kN, 节点3的右位移为0.002m。
求:系统的整体刚度矩阵; 节点2的位移; 节点1、3的支反力; 每个杆件的应力
解:
步骤1:离散化域
%LinearBarElementStresses This function returns the element nodal
%
stress vector given the element stiffness
%
matrix k, the element nodal displacement
%
vector u, and the cross-sectional area A.
? ?
?
? ?
?
10??
630000 ????0.002?? ?? F3 ??
线性杆元也是总体和局部坐标一致的一维有限单元,用线性函数描述
每个线性杆元有两个节点(node)
? EA
单刚矩阵为:k
?
? ?
L
???
EA L
?
EA L
? ? ?
有限元的MATLAB解法
有限元的MATLAB解法1.打开MATLAB。
2.输入“pdetool”再回车,会跳出PDE Toolbox的窗口(PDE意为偏微分方程,是partial differential equations的缩写),需要的话可点击Options菜单下Grid命令,打开栅格。
3.完成平面几何模型:在PDE Toolbox的窗口中,点击工具栏下的矩形几何模型进行制作模型,可画矩形R,椭圆E,圆C,然后在Set formula栏进行编辑并(如双脊波导R1+R2+R3改为RI-R2-R3,设定a、b、s/a、d/b的值从而方便下步设定坐标)用算术运算符将图形对象名称连接起来,若还需要,可进行储存,形成M文件。
4.用左键双击矩形进行坐标设置:将大的矩形left和bottom都设为0,width是矩形波导的X轴的长度,height是矩形波导的y轴的长度,以大的矩形左下角点为原点坐标为参考设置其他矩形坐标。
5.进行边界设置:点击“Boundary”中的“Boundary Mode”,再点击“Boundary”中的“Specify Boundary Conditions”,选择符合的边界条件,Neumann为诺曼条件,Dirichlet为狄利克雷条件,边界颜色显示为红色。
6.进入PDE模式:点击"PDE"菜单下“PDE Mode”命令,进入PDE 模式,单击“PDE Specification”,设置方程类型,“Elliptic”为椭圆型,“Parabolic”为抛物型,“Hyperbolic”为双曲型,“Eigenmodes”为特征值问题。
7.对模型进行剖分:点击“Mesh”中“Initialize Mesh”进行初次剖分,若要剖的更细,再点击“Refine Mesh”进行网格加密。
8.进行计算:点击“Solve”中“Solve PDE”,解偏微分方程并显示图形解,u值即为Hz或者Ez。
9.单击“Plot”菜单下“Parameters”选项,打开“Plot Selection”对话框。
平面梁单元MATLAB有限元程序
平面梁单元MATLAB有限元程序function []=beam2n()clear allclose allclearclose%------------------------ BEAM2 ---------------------------disp('========================================'); disp(' PROGRAM BEAM2 '); disp(' Beam Bending Analysis '); disp(' T.R.Chandrupatla and A.D.Belegundu '); disp('========================================');InputData;Bandwidth;Stiffness;ModifyForBC;BandSolver;ReactionCalc;Output;%------------------------ function InputData ---------------------------function [] = InputData();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTglobal TITLE FILE1 FILE2global LINP LOUTglobal NQdisp(blanks(1));FILE1 = input('Input Data File Name ','s'); LINP = fopen(FILE1,'r');FILE2 = input('Output Data File Name ','s'); LOUT = fopen(FILE2,'w');DUMMY = fgets(LINP);TITLE = fgets(LINP);DUMMY = fgets(LINP);TMP = str2num(fgets(LINP));[NN, NE, NM, NDIM, NEN, NDN] =deal(TMP(1),TMP(2),TMP(3),TMP(4),TMP(5),TMP(6));NQ = NDN * NN;DUMMY = fgets(LINP);TMP = str2num(fgets(LINP));[ND, NL, NMPC]= deal(TMP(1),TMP(2),TMP(3));NPR=1; % E%----- Coordinates -----DUMMY = fgets(LINP);for I=1:NNTMP = str2num(fgets(LINP));[N, X(N,:)]=deal(TMP(1),TMP(2:1+NDIM)); end%----- Connectivity -----DUMMY = fgets(LINP);for I=1:NETMP = str2num(fgets(LINP));[N,NOC(N,:), MAT(N), SMI(N)] = ...deal(TMP(1),TMP(2:1+NEN), TMP(2+NEN), TMP(3+NEN));end%----- Specified Displacements ----- DUMMY = fgets(LINP); for I=1:NDTMP = str2num(fgets(LINP));[NU(I,:),U(I,:)] = deal(TMP(1), TMP(2)); end%----- Component Loads -----DUMMY = fgets(LINP);F = zeros(NQ,1);for I=1:NLTMP = str2num(fgets(LINP));[N,F(N)]=deal(TMP(1),TMP(2)); end%----- Material Properties ----- DUMMY = fgets(LINP);for I=1:NMTMP = str2num(fgets(LINP));[N, PM(N,:)] = deal(TMP(1), TMP(2:NPR+1));end%----- Multi-point Constraints B1*Qi+B2*Qj=B0if NMPC > 0DUMMY = fgets(LINP);for I=1:NMPCTMP = str2num(fgets(LINP));[BT(I,1), MPC(I,1), BT(I,2), MPC(I,2), BT(I,3)] = ...deal(TMP(1),TMP(2),TMP(3),TMP(4),TMP(5));endendfclose(LINP);%------------------------ function Bandwidth ---------------------------function []=Bandwidth();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBW global X NOC F AREA MAT SMI S global PM NU U MPC BT STRESS REACT global CNSTglobal TITLE FILE1 FILE2global LINP LOUT%----- Bandwidth Evaluation ----- NBW = 0;for N=1:NENABS = NDN*(abs(NOC(N, 1) - NOC(N, 2)) + 1);if (NBW < NABS)NBW = NABS;endendfor I=1:NMPCNABS = abs(MPC(I, 1) - MPC(I, 2)) + 1;if (NBW < NABS)NBW = NABS;endenddisp(sprintf('Bandwidth = %d', NBW));%------------------------ function Stiffness ---------------------------function []=Stiffness();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBW global X NOC F AREA MAT SMI S global PM NU U MPC BT REACTglobal CNSTglobal NQ%----- Global Stiffness Matrix S = zeros(NQ,NBW);for N = 1:NEdisp(sprintf('Forming Stiffness Matrix of Element %d', N));%-------- Element Stiffness and Temperature Load -----N1 = NOC(N, 1);N2 = NOC(N, 2);M = MAT(N);EL = abs(X(N1) - X(N2));EIL = PM(M, 1) * SMI(N) / EL^3;SE(1, 1) = 12 * EIL;SE(1, 2) = EIL * 6 * EL;SE(1, 3) = -12 * EIL;SE(1, 4) = EIL * 6 * EL;SE(2, 1) = SE(1, 2);SE(2, 2) = EIL * 4 * EL * EL;SE(2, 3) = -EIL * 6 * EL;SE(2, 4) = EIL * 2 * EL * EL;SE(3, 1) = SE(1, 3);SE(3, 2) = SE(2, 3);SE(3, 3) = EIL * 12;SE(3, 4) = -EIL * 6 * EL;SE(4, 1) = SE(1, 4);SE(4, 2) = SE(2, 4);SE(4, 3) = SE(3, 4);SE(4, 4) = EIL * 4 * EL * EL;disp('.... Placing in Global Locations'); for II = 1:NENNRT = NDN * (NOC(N, II) - 1);for IT = 1:NDNNR = NRT + IT;I = NDN * (II - 1) + IT;for JJ = 1:NENNCT = NDN * (NOC(N, JJ) - 1);for JT = 1:NDNJ = NDN * (JJ - 1) + JT;NC = NCT + JT - NR + 1;if (NC > 0)S(NR, NC) = S(NR, NC) + SE(I, J);endendendendendend%------------------------ function ModifyForBC ---------------------------function []=ModifyForBC();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTglobal NQ%----- Decide Penalty Parameter CNST ----- CNST = 0;for I = 1:NQif CNST < S(I, 1); CNST = S(I, 1); end endCNST = CNST * 10000;%----- Modify for Boundary Conditions ----- % --- Displacement BC ---for I = 1:NDN = NU(I);S(N, 1) = S(N, 1) + CNST;F(N) = F(N) + CNST * U(I);end%--- Multi-point Constraints ---for I = 1:NMPCI1 = MPC(I, 1);I2 = MPC(I, 2);S(I1, 1) = S(I1, 1) + CNST * BT(I, 1) * BT(I, 1);S(I2, 1) = S(I2, 1) + CNST * BT(I, 2) * BT(I, 2);IR = I1;if IR > I2; IR = I2; endIC = abs(I2 - I1) + 1;S(IR, IC) = S(IR, IC) + CNST * BT(I, 1) * BT(I, 2);F(I1) = F(I1) + CNST * BT(I, 1) * BT(I, 3);F(I2) = F(I2) + CNST * BT(I, 2) * BT(I, 3); end%------------------------ function BandSolver ---------------------------function []=BandSolver();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTglobal NQ%----- Equation Solving using Band Solver ----- disp('Solving using Band Solver(bansol.m)');[F] = bansol(NQ,NBW,S,F);%------------------------ function ReactionCalc ---------------------------function []=ReactionCalc();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTfor I = 1:NDN = NU(I);REACT(I) = CNST * (U(I) - F(N));end%------------------------ function Output ---------------------------function []=Output();global NN NE NM NDIM NEN NDNglobal ND NL NCH NPR NMPC NBWglobal X NOC F AREA MAT SMI Sglobal PM NU U MPC BT REACTglobal CNSTglobal TITLE FILE1 FILE2global LINP LOUTdisp(sprintf('Output for Input Data from file %s\n',FILE1)); fprintf(LOUT,'Output for Input Data from file %s\n',FILE1);disp(TITLE);fprintf(LOUT,'%s\n',TITLE);disp(' Node# X-Displ Rotation');fprintf(LOUT,' Node# X-Displ Rotation\n'); I=[1:NN]';% print a matrixdisp(sprintf(' %4d %15.4E %15.4E\n',[I,F(2*I-1),F(2*I)]')); fprintf(LOUT,' %4d %15.4E %15.4E\n',[I,F(2*I-1),F(2*I)]');%----- Reaction Calculation -----disp(sprintf(' DOF# Reaction'));fprintf(LOUT,' DOF# Reaction\n');for I = 1:NDN = NU(I);R = CNST * (U(I) - F(N));disp(sprintf(' %4d %15.4E',N,REACT(I)));fprintf(LOUT,' %4d %15.4E\n',N,REACT(I)); endfclose(LOUT);disp(sprintf('The Results are available in the text file %s', FILE2));。
matlaB程序的有限元法解泊松方程
基于matlaB 编程的有限元法一、待求问题:泛定方程:2=x ϕ-∇边界条件:以(0,-1),(0,1),(1,0)为顶点的三角形区域边界上=0ϕ二、编程思路及方法1、给节点和三角形单元编号,并设定节点坐标画出以(0,-1),(0,1),(1,0)为顶点的三角形区域figure1由于积分区域规则,故采用特殊剖分单元,将区域沿水平竖直方向分等份,此时所有单元都是等腰直角三角形,剖分单元个数由自己输入,但竖直方向份数(用Jmax 表示)必须是水平方向份数(Imax )的两倍,所以用户只需输入水平方向的份数Imax 。
采用上述剖分方法,节点位置也比较规则。
然后利用循环从区域内部(非边界)的节点开始编号,格式为NN(i,j)=n1,i ,j 分别表示节点所在列数与行数,并将节点坐标存入相应矩阵X(n1),Y(n1)。
由于区域上下两部分形状不同因此,分两个循环分别编号赋值,然后再对边界节点编号赋值。
然后再每个单元的节点进行局部编号,由于求解区域和剖分单元的特殊性,分别对内部节点对应左上角正方形的两个三角形单元,上左,左上,下斜边界节点要对应三个单元,上左,左上,左下,右顶点的左下、左上,右上边界的左上,分别编号以保证覆盖整个区域。
2、求解泊松方程首先一次获得每个单元节点的整体编号,然后根据其坐标求出每个三角形单元的面积。
利用有限元方法的原理,分别求出系数矩阵和右端项,并且由于边界,因此做积分时只需对场域单元积分而不必对边界单元积条件特殊,边界上=0分。
求的两个矩阵后很容易得到节点电位向量,即泊松方程的解。
3、画解函数的平面图和曲面图由节点单位向量得到,j行i列节点的电位,然后调用绘图函数imagesc(NNV)与surf(X1,Y1,NNV')分别得到解函数的平面图figure2和曲面图figure3。
4、将结果输出为文本文件输出节点编号,坐标,电位值三、计算结果1、积分区域:2、f=1,x 方向75份,y 方向150份时,解函数平面图和曲面图20406080100120140102030405060700.0050.010.0150.020.0250.0320.0050.010.0150.020.0250.03对比:当f=1时,界函数平面图20406080100120140102030405060700.010.020.030.040.050.060.073、输出文本文件由于节点多较大,列在本文最末四、结果简析由于三角形区域分布的是正电荷,因此必定电位最高点在区域中部,且沿x 轴对称,三角形边界电位最低等于零。
计算力学(有限元)matlab编程大作业(空间网架)
逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:1 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:1 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:1 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:1 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:1 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:0 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:1 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:0 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:1 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:1 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:1 逐一输入第 i 个节点和其他节点的连接情况,若连接,输入 1,否则输入 0,令和自身连接情况为 0:0 输入结构约束总数:11 按照编号逐一输入结构约束编号(先输入节点号) ) :1 输入约束节点对应的位移号(输入范围:1~3) ) :1 按照编号逐一输入结构约束编号(先输入节点号) ) :1 输入约束节点对应的位移号(输入范围:1~3) ) :2 按照编号逐一输入结构约束编号(先输入节点号) ) :1 输入约束节点对应的位移号(输入范围:1~3) ) :3 按照编号逐一输入结构约束编号(先输入节点号) ) :3 输入约束节点对应的位移号(输入范围:1~3) ) :1 按照编号逐一输入结构约束编号(先输入节点号) ) :3 输入约束节点对应的位移号(输入范围:1~3) ) :2 按照编号逐一输入结构约束编号(先输入节点号) ) :3 输入约束节点对应的位移号(输入范围:1~3) ) :3 按照编号逐一输入结构约束编号(先输入节点号) ) :4 输入约束节点对应的位移号(输入范围:1~3) ) :1 按照编号逐一输入结构约束编号(先输入节点号) ) :4 输入约束节点对应的位移号(输入范围:1~3) ) :2 按照编号逐一输入结构约束编号(先输入节点号) ) :5 输入约束节点对应的位移号(输入范围:1~3) ) :1 按照编号逐一输入结构约束编号(先输入节点号) ) :5 输入约束节点对应的位移号(输入范围:1~3) ) :2 按照编号逐一输入结构约束编号(先输入节点号) ) :5 输入约束节点对应的位移号(输入范围:1~3) ) :3 输入施加在结构上的总的力的个数:3 按照编号逐一输入力作用节点编号(先输入节点号) ) :2 逐一输入力对应的向量中的坐标值:0 逐一输入力对应的向量中的坐标值:0 逐一输入力对应的向量中的坐标值:-1 输入力的大小:1000 按照编号逐一输入力作用节点编号(先输入节点号) ) :2 逐一输入力对应的向量中的坐标值:0 逐一输入力对应的向量中的坐标值:1
有限元的matlab编程
本程序的网架位移求解函数附在主程序后面,主程序运行时调用该函数。
完整ppt
14
几何建模 定义荷载
用自定义输入
加下划线的为单元编号
完整ppt
5
形成等效荷载列阵
f=[0;0;0;a;0;0;0;a;0;0;0;a;0;0;0;a;0;0;0;a];%每个节点两个自由度,a 为之前输入的节点力
集成总刚:
获取单元两端节点坐标
xi = Node( Element( ie, 1 ), 1 ) ;%ie为单元号,以下相同 yi = Node( Element( ie, 1 ), 2 ) ; xj = Node( Element( ie, 2 ), 1 ) ; yj = Node( Element( ie, 2 ), 2 ) ;
节点号:',num2str(Element(ie,2)),' 轴力:',num2str(nodef(1))] ) ;
完整ppt
12
end
例二:网架
完整ppt
13
思路分析
几点说明
网架是由多根杆件按照一定的网格形式通过节点连结而成的空间结构。构成 网架的基本单元有三角锥,三棱体,正方体,截头四角锥等。鉴于网架的形 式较多,本程序提供一种通用的网架输入方法,但录入较为繁琐,同时提供 一种正放四角锥网架的简易输入方法作为典型。
有限元编程示例
完整ppt
1
例一:桁架
题目描述:
如下图所示的平面桁架,杆件长度、弹性模量、截 面积以及所受节点力P的大小可以自行定义。求节 点位移及杆件轴力。
matlab 有限元 编程
MATLAB 是一种高级编程语言和交互式环境,常用于数值计算、数据分析、算法开发、数据可视化以及应用开发等。
在有限元分析(FEA)中,MATLAB 可以用来编写和运行有限元程序。
以下是一个简单的 MATLAB 有限元分析编程示例:这个例子假设你正在解决一个一维拉普拉斯方程,其形式为 -d^2u/dx^2 = f,在区间 [0, 1] 上。
```matlab% 参数定义L = 1; % 长度h = 0.01; % 步长N = L/h; % 元素数量x = linspace(0, L, N+1); % x 向量% 创建有限元网格nodes = x(1:N+1);elements = [nodes(2:end-1) nodes(1:end-1) nodes(2:end)]; % 定义载荷向量 ff = sin(pi*x);% 定义刚度矩阵 A 和载荷向量 FA = zeros(N, N);F = zeros(N, 1);for i = 1:Nfor j = 1:i-1A(i, j) = A(j, i) = h^2/(6*(x(i)-x(j))^2);endF(i) = -f(i)*h/2;end% 使用 MATLAB 的线性方程求解器u = A\F;% 绘制结果plot(x, u);xlabel('x');ylabel('u');title('有限元解');```这个代码首先定义了问题的参数,然后创建了一个有限元网格。
然后,它定义了刚度矩阵 A 和载荷向量 F。
最后,它使用 MATLAB 的线性方程求解器来求解方程,并绘制结果。
请注意,这只是一个非常简单的例子。
在实际的有限元分析中,问题可能会更复杂,并且需要更多的编程工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function FemModel(a,b,h,m,n,E,mu,load,p,bc)
% 定义有限元模型
% 输入参数:
% a --------- 板x方向宽度
% b --------- 板y方向长度
% h --------- 板z方向厚度
i*(m+1)+j+1,...
i*(m+1)+j ] ;
end
end
gElement( :, 5 ) = 1 ;
% 定义网格密度
m = 16 ; % x方向单元数目
n = 16 ; % y方向单元数目
% 定义材料性质
E = 2.1e11 ; % 弹性模量
mu = 0.3 ; % 泊松比
% 荷载参数
end
for i=1:m
gBC1( (n+1)*2+m+1+i, : ) = [n*(m+1)+i, 1, 0] ; % y=b/2的边界上挠度为零
end
elseif bc == '固支'
gBC1 = zeros( m*4+(n+1)*3+n, 3 ) ;
% step2. 计算单元刚度矩阵,并集成到整体刚度矩阵中
[element_number,dummy] = size( gElement ) ;
for ie=1:1:element_number
disp( sprintf( '计算单元刚度矩阵并集成,当前单元: %d', ie ) ) ;
function exam7_1
% 本程序为第七章的第一个算例,采用薄板矩形单元计算矩形板的弯曲
% 输入参数:
% 无
% 定义板的尺寸
a = 1 ; % 板x方向宽度
b = 1 ; % 板y方向长度
h = 0.01 ; % 板z方向厚度
end
end
% 确定载荷
if load == '均布力'
gNF = [] ;
gDF = gElement ;
gDF(:,5) = p ;
elseif load == '集中力'
gDF = [] ;
f( node*3-1 ) = f( node*3-1 ) + edf( 2:3:11 ) ;
f( node*3 ) = f( node*3 ) + edf( 3:3:12 ) ;
end
for i=1:n+1
gBC1( m+n+(n+1)*2+i, : ) = [i*(m+1), 3, 0 ] ; % x=a/2的边界上绕y轴的转角为零
end
for i=1:m
gBC1( m+n+(n+1)*3+i, : ) = [n*(m+1)+i, 1, 0] ; % y=b/2的边界上挠度为零
% 定义单元
gElement = zeros( n*n, 5 ) ;
for i=1:n
for j=1:m
gElement( (i-1)*m+j, 1:4) = [ (i-1)*(m+1)+j, ...
(i-1)*(m+1)+j+1, ...
% m --------- x方向单元数目
% n --------- y方向单元数目
% E --------- 弹性模量
% mu --------- 泊松比
% load ------- 载荷类型
% p --------- 载荷大小
% 输出文件名称
file_out = 'exam7_1.mat' ;
% 检查输出文件是否存在
file_prompt = 0 ;
if exist( file_out ) ~= 0 & file_prompt == 1
answer = input( sprintf( '文件 %s 已经存在,是否覆盖? ( Yes / [No] ): ', file_out ), 's' ) ;
disp( sprintf( '请使用另外的文件名,或备份已有的文件' ) ) ;
disp( sprintf( '程序终止' ) );
return ;
end
end
FemModel(a,b,h,m,n,E,mu,load,p,bc) ; % 定义有限元模型
gNode = zeros( (m+1)*(n+1), 2 ) ;
for i=1:n+1
for j=1:m+1
gNode( (i-1)*(m+1)+j, : ) = [dx*(j-1),dy*(i-1)] ;
end
end
if length( answer ) == 0
answer = 'no' ;
end
answer = lower( answer ) ;
if answer ~= 'y' | answer ~= 'yes'
end
for i=1:n+1
gBC1( m+n+i, : ) = [i*(m+1), 1, 0 ] ; % x=a/2的边界上挠度为零
end
for i=1:n+1
gBC1( m+n+n+1+i, : ) = [i*(m+1), 2, 0 ] ; % x=a/2的边界上绕x轴的转角为零
for idf = 1:1:df_number
edf = EquivalentDistPressure( gDF(idf,1:4), gDF(idf,5) ) ;
node = gDF( idf, 1:4 ) ;
f( node*3-2 ) = f( node*3-2 ) + edf( 1:3:10 ) ;
load = '均布力' ; % 也可以是 集中力
%load = '集中力' ;
p = 1e6 ; % 载荷大小
% 边界条件
%bc = '简支' ; % 也可以是 固支
bc = '固支' ;
k = StiffnessMatrix( ie ) ;
AssembleStiffnessMatrix( ie, k ) ;
end
% step3. 计算分布压力的等效节点力,并集成到整体节点力向量中
[df_number, dummy] = size( gDF ) ;
end
for i=1:n+1
gBC1( (m+1)+i, : ) = [(i-1)*(m+1)+1, 3, 0] ; % y=0的边界上绕y轴的转角等于零
end
for i=1:n+1
gBC1( m+n+2+i, : ) = [i*(m+1), 1, 0 ] ; % x=a/2的边界上挠度为零
% 定义材料
gMaterial = [ E, mu, h] ;
% 确定边界条件
if bc == '简支'
gBC1 = zeros( (n+1)*2+m*2+1, 3 ) ;
for i=1:m+1
gBC1( i, : ) = [i, 2, 0] ; % x=0的边界上绕x轴的转角等于零
% step1. 定义整体刚度矩阵和节点力向量
[node_number,dummy] = size( gNode ) ;
gK = sparse( Fra bibliotekode_number * 3, node_number * 3 ) ;
f = sparse( node_number * 3, 1) ;
SolveModel ; % 求解有限元模型
SaveResults( file_out ) ; % 保存计算结果
DisplayResults(a,b,h,m,n,E,mu,load,p,bc) ; % 把计算结果显示出来
% 2. 计算单元的等效节点力,集成整体节点力向量
% 3. 处理约束条件,修改整体刚度矩阵和节点力向量
% 4. 求解方程组,得到整体节点位移向量
global gNode gElement gMaterial gBC1 gDF gNF gK gDelta gElementMoment gNodeMoment
for i=1:m
gBC1( i, : ) = [i, 2, 0] ; % x=0的边界上绕x轴的转角等于零
end
for i=1:n
gBC1( m+i, : ) = [(i-1)*(m+1)+1, 3, 0] ; % y=0的边界上绕y轴的转角等于零
% bc --------- 边界条件
% 返回值:
% 无
global gNode gElement gMaterial gBC1 gDF gNF gK
% 计算结点坐标
dx = a / m / 2 ; % 取板的1/4进行分析
dy = b / n / 2 ;