微分方程数值方法实验报告.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微分方程数值方法实验报告

一、实验题目 (1)用Ritz-Galerkin方法求解边值问题 精确解 (2)用有限元方法求解 二、实验目的 运用MATLAB数学软件编写Ritz-Galerkin方法和有限元方法程序,进一步熟悉MATLAB的应用及掌握偏微分方程数值方法中Ritz-Galerkin方法和有限元方法,对各个方法求解精度进一步明确。 三、实验原理 (1)Ritz-Galerkin方法 Ritz方法 设给出二次泛函 (1) 其中是Hilbert空间V上的双线性泛函,而且满足对称性、有界性、正定性;是V上的有界线性泛函。考虑一下变分问题:求满足 (2) 设Hilbert空间V是可分的,即V中有可数多个元素构成一个稠密集。在V中取N个线性无关的元素,他们张成一个N维子空间,即,或记成。 (3) 上述元素称为空间的基. 用代替V,在上求泛函的极小,即求满足 (4) 显然,原先的变分问题(2)与后面的变分问题(4)是不同的,他们的解也是不同的。如果V的子空间充分接近V,那么,用代替V而得到的解也就充分接近u,从而把作为原变分问题的近似解,亦即把无穷维空间V中的极值问题近似为有限维空间中的极值问题,这就是Ritz方法得基本思想。 问题(4)很容易化为一个线性代数方程组问题。实际上,每一个中的元素都可以用的线性组合表示,故,这时,由及的性质 , 因此,是一个以为变量的二次多项式。由于双线性泛函是对称、正定的,则二次项 是一个以为变量的正定二次型,即矩阵是对称正定的。因此,在点取得极小的充分必要条件是。 可以算出,上式即,即N维向量是线性方程组的解,其中。求出之后,即得近似变分问题(4)的解 总之,Ritz法吧泛函的极小值问题化为多元二次函数的极小值问题,最后通过求解一个线性代数方程组而得出变分问题的近似解。 Galerkin方法 当双线性泛函对称时,变分问题(2)等价于变分方程:求使得 (5) Galerkin方法是一种求解变分方程(5)的近似方法。假设V是可分的Hilbert空间,仍然取有限维子空间为。考虑近似变分方程:求满足 (6) 需要注意的是,近似变分方程(6)的解中,且检验函数v只要求对中的元素成立而不是对V中的一切元素成立。 这时,求解仍然化为求解一个线性方程组。因为中的元素仍是通过的线性组合来表示,可以设,代入式(6)得 或者 由的任意性,即得任意性,可得出线性代数方程组 由于双线性泛函是对称的,所以该线性方程组与Ritz得到的线性方程组是相同的。 (1)有限元方法 考虑两点边值问题(P) 其中,且,,(记),常数,为已知常数。 根据边界条件,定义空间 构造空间V的有限维子空间线性无关的函数集合,使它成为空间的基。 引入空间上的双线性泛函 和线性泛函 于是,有限元方法求关于问题(P)的解可以表示为 把区间剖分,然后作定义在区间、支集在和上的“山形”函数: 显然线性无关,而且满足,故由张成的子空间。 容易验证 所以,如果给出节点上的未知函数值,那么,在中的近似解就是。 我们的问题是:求使得 这相当于:求使得 定义矩阵 , , 则 可求出 所以边值问题的近似解为 四、实验步骤 (1)Ritz-Galerkin方法 clear all n=2;h=(1-0)/n; syms x; for i=1:n fai(i)=x*(1-x)*(x^(i-1)); dfai(i)=diff(x*(1-x)*(x^(i-1))); end fai; for i=1:n for j=1:n fun=-dfai(i)*dfai(j)+fai(i)*fai(j); A(i,j)=int(fun,x,0,1); end fun=-x*fai(i); f(i)=int(fun,x,0,1); end c=inv(A)*f; product=c.*fai; c; h1=1/10; sum=0; for i=1:n sum=sum+product(i); end vu=[]; for y=0:h1:1 v=subs(sum,x,y); vu=[vu,v]; end y=0:h1:1; yy=0:0.001:1; u=sin(yy)/sin(1)-yy; plot(yy,u,-,y,vu,o-); u=vpa(u,5) vu=vpa(vu,5) Iwant

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档