- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)