PDE的Galerkin和有限元的MATLAB程序
- 格式:docx
- 大小:11.57 KB
- 文档页数:2
matlab 程序2d有限元方法全文共四篇示例,供读者参考第一篇示例:有限元方法是一种数值计算方法,旨在解决工程结构、力学和热力学等领域的复杂问题。
这种方法通过将一个连续的问题离散化为无限多的小单元,然后通过求解每个小单元的方程来逼近整个问题的解。
有限元方法在解决非线性、非定常、多物理场耦合等复杂问题上表现出色,因此在工程领域得到了广泛应用。
2D有限元方法是指在二维平面上建立有限元模型,然后求解其方程得到问题的解。
在MATLAB中,构建2D有限元模型的步骤大致分为三个阶段:几何建模、网格剖分和有限元分析。
首先是几何建模阶段,即对求解问题的几何形状进行建模。
这一步通常通过MATLAB中的绘图函数绘制图形,定义节点和单元信息。
这个阶段的难点在于如何准确表达问题的几何形状和边界条件,因为这将直接影响到后续的网格划分和求解结果的准确性。
接着是网格剖分阶段,即将几何形状离散化为小单元。
在MATLAB中,可以利用自带的网格生成函数或者第三方的网格生成工具箱来生成有限元网格。
网格的质量和密度对求解结果的准确性有很大影响,因此在网格剖分时需要谨慎选择参数和方法。
最后是有限元分析阶段,即对离散化后的有限元模型进行求解。
在MATLAB中,可以利用现成的有限元求解函数来求解线性或非线性方程。
在求解过程中,需要考虑边界条件的处理、材料参数的输入和求解精度的控制等因素,以保证求解的准确性和稳定性。
在实际应用中,2D有限元方法常用于解决板、壳结构的弯曲、扭转、振动等问题,以及流体动力学、电磁场等问题。
MATLAB提供了丰富的工具箱和函数库,使得有限元方法的实现更加简单和高效。
通过合理的建模、网格剖分和求解方法,我们可以快速地解决复杂的工程问题,提高工程设计的效率和精度。
2D有限元方法结合MATLAB工具的应用为工程领域提供了一种高效、准确和可靠的计算方法。
通过不断学习和实践,我们可以更好地利用有限元方法解决实际工程问题,推动工程技术的发展和进步。
Matlab有限元分析20140226为了用Matlab进行有限元分析,首先要学会Matlab基本操作,还要学会使用Matlab进行有限元分析的基本操作。
1. 复习:上节课分析了弹簧系统x推导了系统刚度矩阵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);K=SpringAssemble(K,k2,2,3)步骤四:引入边界条件,消除冗余方程>>k=K(2:3,2:3)%构造不含冗余的方程>>f=[0;15]%构造外力列阵步骤五:解方程引例:已知1212u31uu 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. 总结clccleark1=SpringElementStiffness(100)%创建单元刚度矩阵1 k2=SpringElementStiffness(200)%创建单元刚度矩阵2 K=zeros(3,3)%创建空白整体刚度矩阵K=SpringAssemble(K,k1,1,2)%按节点装入单元矩阵1K=SpringAssemble(K,k2,2,3)%按节点装入单元矩阵2k=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希望以上资料对你有所帮助,附励志名言3条:1、生气,就是拿别人的过错来惩罚自己。
function K=Stiffness2(T,fnk % K=Stiffness2(T,fnk % % Assembles the stiffness matrix for the elliptic PDE % % -div(k*grad u=f in Omega, % u=g on Gamma, %k*du/dn=h on Bndy(Omega-Gamma. % % The coefficient k(x,y must be implemented in the % function fnk; if k is constant, then fnk can be a % positive scalar. If fnk is omitted, k is taken to be % the constant 1. T describes the triangulation of Omega. % % See "help Mesh2" for a description of the data structure T. % This routine is part of the MATLAB Fem code that % accompanies "Understanding and Implementing the Finite % Element Method" by Mark S. Gockenbach (copyright SIAM 2006. if nargin<2 | isempty(fnk fnk=1.0; end if isnumeric(fnk nkflag=1; else nkflag=0; end % Get the number of free nodes and initialize the stiffness % matrix to zero: Nf=length(T.FNodePtrs; K=sparse(Nf,Nf; % Get the number of triangles: Nt=size(T.Elements,1; % d is the degree of the elements(1=linear, 2=quadratic,etc.. d=T.Degree; % id is the number of nodes per triangle.id=round((d+2*(d+1/2; % Create the reference triangle and the quadrature weights and nodes % on it. TR=RefTri(d; [qpts,qwts]=DunavantData(2*d-2; npts=length(qwts; % Evaluate the gradients of all the basis functions at all % of the quadrature nodes:[Vs,Vt]=EvalNodalBasisGrads(getNodes(TR,1,qpts; % Add the contributions from each element for i=1:Nt % Get the coordinates and pointers of the nodes:[coords,ll]=getNodes(T,i; % Extract the coordinates of the vertices of the triangle:c=coords(1:d:2*d+1,1:2; % Transform the triangle to the reference triangle: % (The object trans is a struct that describes the % transformation (matrix J, etc.. See TransToRefTri % for details. trans=TransToRefTri(c; % Transform the gradients to the reference triangle: Grads1=zeros(2,npts,id; for ii=1:id Grads1(:,:,ii=trans.J'\[Vs(:,ii';Vt(:,ii']; end % Compute all the quadrature nodes on T: z=trans.z1*ones(1,npts+trans.J*qpts'; % Compute quantities common to the integrals: if nkflag scale=fnk*trans.j; ghat=qwts; else scale=trans.j;ghat=feval(fnk,z(1,:',z(2,:'.*qwts; end % Loop over all possible combinations of (global indices related % to this triangle. for r=1:id llr=ll(r; if llr>0 for s=r:id lls=ll(s; if lls>0 % Estimate the integral: I=scale*((Grads1(1,:,r.*Grads1(1,:,s+...Grads1(2,:,r.*Grads1(2,:,s*ghat; ii=min(llr,lls;jj=max(llr,lls; K(ii,jj=K(ii,jj+I; end end end end end % Fill in the lower triangle of K. K=K + triu(K,1';。
pde garlerkin方法
PDE(偏微分方程)Galerkin方法是求解偏微分方程的一种数值方法。
该方法基于Galerkin的弱形式,通过选取一组适当的基函数来逼近原问题的解,然后通过求解相应的线性方程组得到近似解。
PDE Galerkin方法的基本步骤如下:
1. 选择基函数:选择一组适当的基函数来逼近原问题的解。
这些基函数通常是一些已知的函数,例如多项式、三角函数等。
2. 建立弱形式:将原问题转化为一个弱形式的问题,即将偏微分方程转化为一个积分方程。
这一步是通过将偏微分方程与基函数进行内积来实现的。
3. 求解线性方程组:通过求解相应的线性方程组得到近似解。
这一步是通过构造一个矩阵(称为系数矩阵)和一个向量(称为右侧向量),然后求解该线性方程组。
PDE Galerkin方法具有一些优点,例如易于实现、计算稳定、能够处理复
杂的边界条件等。
然而,该方法也存在一些局限性,例如对于某些复杂的问题可能需要选择更多的基函数才能得到满意的近似解。
Matlab中有限元脚本程序的编程¹王述成詹琼华(华中科技大学武汉430074)摘要介绍在MATLAB中进行有限元计算时脚本编程的方法。
脚本编程方法比使用图形界面作图方法求解更加灵活,对复杂的边界条件处理更加容易控制,它扩展了MATLAB在有限元计算方面的应用范围。
关键词:MATLAB脚本有限元中图法分类号:TP301Pr ogramming of the Finite Element Method with Script in MATLABWang Shucheng Zhan Qionghua(Huazhong University of Science&Technology,Wuhan430074)Abstr act:This paper introduces the pr ogramming of the finite element method with MATLAB.The computat ion method by writing scr ipt is mor e agile t han one of Graphical User Interface and this can dispo se the complicated boundary problem easily.The application of MATLAB on the finite element met hod i s extended.Key words:MATLAB,script,finite element methodClass number:TP3011引言MATLAB是一种以矩阵为基本编程单位的数值计算工具[1-2],既有高效的科学计算功能,又有强大的图形处理功能,是工程应用中广泛使用的软件。
MATLAB中自带了有限元的工具)))偏微分方程工具箱(Partial Differential Equation TOOL2 BOX)。
解决可压缩流驱问题的有限元和间断galerkin方法解决可压缩流驱问题的有限元和间断Galerkin方法1. 引言可压缩流驱问题是流体力学中的重要研究领域,涉及到气体、液体等可压缩流体在固体表面运动的过程。
该问题的解决对于工程领域的气动设计、燃烧动力学等具有重要意义。
在本文中,我们将讨论解决可压缩流驱问题的两种数值方法:有限元方法和间断Galerkin方法。
2. 有限元方法有限元方法是一种常用的数值方法,用于解决偏微分方程问题。
在可压缩流驱问题中,我们将流场分为离散的有限元单元,每个单元上的流场变量可以用插值函数逼近。
通过将偏微分方程离散化为代数方程,在整个流场中求解流场变量的近似解。
2.1 基本原理有限元方法的基本原理是建立变分问题,通过最小化问题的变分形式,求解问题的近似解。
对于可压缩流驱问题,我们可以建立Navier-Stokes方程的变分问题。
通过引入试验函数和权重函数,将原始偏微分方程转化为一组线性方程。
2.2 空间离散化在有限元方法中,将流场分割为小的有限元单元是关键步骤。
常见的有限元形状包括三角形和四边形。
每个单元上的流场变量可以由节点上的值通过插值函数逼近,形成离散化的流场。
2.3 时间积分对于可压缩流驱问题,时间的积分也是必要的。
常见的时间积分方法包括显式和隐式方法。
显式方法根据时间步长逐步迭代,但对于大的时间步长可能会导致不稳定性。
隐式方法更为稳定,但需要解一个非线性方程组。
3. 间断Galerkin方法间断Galerkin方法是一种基于有限元方法的数值方法,用于解决守恒定律形式的偏微分方程问题。
该方法将流场分割为离散的有限元单元,通过在单元之间引入间断,从而提高了数值解的精度和稳定性。
3.1 基本原理间断Galerkin方法的基本原理是建立弱形式的守恒定律方程,并在每个有限元单元上引入间断。
通过在单元之间定义数值通量,将间断条件纳入到方程中。
这样可以提高数值解的精度和稳定性。
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代表右侧节点的斜率函数。
第1章引言这个简短的引言分为两部分,第一部分是对有限元方法步骤的概括介绍,第二部分是MATLAB的简略使用指南。
1.1 有限元方法的步骤有许多关于有限元分析的优秀教材,比如在参考文献[1-18]中列出的那些书目。
因此,本书不准备对有限元理论或有限元方程进行详细地阐述和推导。
每一章只总结概括主要的方程,这些章节都附有示例来说明这些方程。
此外,全书只讨论线弹性结构力学的问题。
有限元方法用于解决工程问题的数值计算过程。
本书假定所有的行为都是线弹性行为。
虽然本书的问题都与结构工程相关,但有限元方法也同样适用于工程的其他领域。
本书中使用有限元方法解决问题共包括6个步骤。
对有限元分析的6个步骤阐述如下:(1) 离散化域——这个步骤包括将域分解成单元和节点。
对于像桁架和刚架这类离散系统,已经离散化,这一步就不需要了。
此处获得的结果应该已经是精确的。
然而,对于连续系统,如板壳,这一步就变得至关重要,因为它只能得到近似的结果。
因此解决方案的精确度取决于所使用的离散化方法。
本书中,我们将手动完成这一步(对连续系统)。
(2) 写出单元刚度矩阵(element stiffness matrices)——写出域内每个单元的单元刚度矩阵。
在本书中,这个步骤通过MATLAB实现。
(3) 集成整体刚度矩阵(global stiffness matrices)——这一步用直接刚度法(direct stiffness approach)实现。
在本书中,该步骤借助于MATLAB实现。
(4) 引入边界条件——诸如支座(supports)、外加载荷(applied loads)和位移(displacements)等。
本书中手动实现这一步骤。
(5) 解方程——这一步骤分解整体刚度矩阵并用高斯消去法求解方程组。
在本书中,在用高斯消去法实现求解部分的时候需要手动分解矩阵。
(6) 后处理——得到额外的信息,如支反力、单元节点力和单元应力。
本书中这一步骤通过MATLAB实现。
有限元数值解法在MATLAB中的实现及可视化摘要:偏微分方程的数值解法在数值分析中占有很重要的地位,很多科学技术问题的数值计算包括了偏微分方程的数值解问题。
在学习初等函数时,总是先画出它们的图形,因为图形能帮助我们了解函数的性质。
而对于偏微分方程,画出它们的图形并不容易,尤其是没有解析解的偏微分方程,画图就显得更加不容易了。
为了从偏微分方程的数学表达式中看出其所表达的图形、函数值与自变量之间的关系,通过MATLAB编程,用有限元数值解法求解了偏微分方程,并将其结果可视化。
关键词:偏微分方程;MATLAB;有限元法;可视化1 引言(Introduction)偏微分方程的数值解法在数值分析中占有很重要的地位,很多科学技术问题的数值计算包括了偏微分方程的数值解问题。
近三十多年来,它的理论和方法都有了很大的发展,而且在各个科学技术的领域中应用也愈来愈广泛。
例如,核武器的研制要有理论设计和核试验。
但核反应和核爆炸的过程是在高温高压的条件下进行的,而且巨大的能量在极短的时间内释放出来,核装置内部的细致反应过程及各个物理量的变化是根本不能用仪器测量出来的,核试验只是提供综合的数据。
而描述核反应和爆炸物理过程的数学模型是一个很复杂的非线性偏微分方程组,也根本没有办法得到这个方程组理论上的精确解。
所以发展核武器的国家都在计算机上对核反应过程进行数值模拟,这也称为“数值核实验”,它可以大大减少核试验的次数,节约大量的经费,缩短研制的周期[1]。
在学习初等函数时,总是先画出它们的图形,因为图形能帮助我们了解函数的性质。
而对于偏微分方程,画出它们的图形并不容易,尤其是没有解析解的偏微分方程,画图就显得更加不容易了。
所以本文主要研究如何用MATLAB数值求解偏微分方程,并将其数值解绘制成三维图形的形式,从而可以从复杂的数学表达式中看出其所表达的图像、函数值与自变量之间的关系[2]。
2 有限元法(Finite element method)2.1 有限元法概述有限元法的基本思想是将结构离散化,用有限个容易分析的单元来表示复杂的对象,单元之间通过有限个节点相互连接,然后根据变形协调条件综合求解。
MATLAB求解PDE问题(1)——概述、例子(转)(2011-07-20 16:48:45)MATLAB PDE T oolbox提供利用有限元方法求解偏微分方程的GUI以及相应的命令行函数。
利用该工具箱可以求解椭圆型方程、抛物型方程、双曲型方程、特征值方程以及非线性方程。
PDE Toolbox的功能非常强大,网上有许多利用PDE Toolbox解决各种物理问题的论文,还有专门介绍工具箱的参考书。
网上的例子虽然很多,但是大部分是介绍PDE工具箱自带的一些例子,这些例子中解的区域,边界条件是PDE工具箱已经编写好的,直接调用就可以。
对于该如何自己设定求解区域及边界条件,却很少有人涉及。
网上搜索发现只有刘平在博客中详细介绍过求解区域的设定。
下面以一个椭圆型方程的例子来详细说明求解的各个步骤,希望对大家能有所帮助。
设要求如下形式的椭圆方程的解:按照PDE的要求,将方程化为标准形式求解后的图像如下,第一幅图是解的图像,第二幅是计算误差。
从第二幅图可以看到,计算的最大误差是10-3方量级。
通过这个例子我们可以基本掌握PDE求解偏微分方程的步骤和方法,后面我将详细介绍如何设置区域及边界条件。
掌握了区域和边界条件的设定,就可以轻松求解遇到的偏微分方程了。
图后是附带的matlab命令以及注释,并提供m文件附件下载,下载后解压即可。
希望能对大家有所帮助。
下面是编写的求解上述方程的matlab语句及说明:g='mygeom';b='mybound';定义区域,边界条件。
mygeom是定义区域的子函数名,函数名可根据自己的需要取定,区域的确定规则由pdegeom函数说明,注意pdegeom函数只是说明如何定义区域,它并不直接确定区域;mybound是定义边界条件的子函数名,与区域类似,边界的确定规则由函数pdebound确定。
后面我会详细介绍区域和边界的取法。
[p,e,t] = initmesh(g);网格初始化,此处也可以写成[p,e,t] = initmesh('mygeom');这样可以省略上面的语句[p,e,t] = refinemesh(g,p,e,t);[p,e,t] = refinemesh(g,p,e,t);加密网格两次,需要加密几次重复几次即可,根据具体问题确定加密次数U= assempde(b,p,e,t,1,0,'2*(x+y)-4');调用assempde函数计算方程的数值解,assempde函数的详细用法可以参考MATH 网站或者PDE的使用指南。