椭圆型方程的有限元法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

两点边值问题有限元法(必做)

从Galerkin 原理出发用线性元解两点边值问题:

"2,01(0)(1)0

u u x x u u ⎧-+=<<⎨==⎩ 精确解:12

2

1()[(23)(23)]21

x x u x e e e e x e -=

---++-。 1.1变分形式

从Galerkin 原理出发推导出两点边值问题的变分形式,将积分区间等分为N 份,则步长1

,1,2,i h i n N

=

=,记为h 。写出有限元方程及系数矩阵元素。

基于虚功原理,求变分形式),(),(v f v u a h =。

对于h v v ∈∀,取h h u x u ∈)(在n 个剖分结点,1,,,010==n x x x 。取值为

0)1(,,,0)0(10====u u u u u n 。其中ih x x i +=0,N i 1≤≤,N

h 1

=

。取v u =,udx x udx u u ⎰

⎰=+-1

10

2)''(,推得dx ux dx u u ⎰⎰=+1

210

22])'[(。相应的双线性变分形式

dx a j i j i j i ⎰+=1

]'[),(ϕϕϕϕϕϕ,则有限元方程∑==n

i j i j i x x f u x x a 1

))(),(())(),((ϕϕϕ,

n j ,,1 =。

εεεϕϕd q h p h a j j j j ⎰-+-=--1

1

1])1([),(;

εεεεϕϕd q h d q h p h a j j j j j ])1([][),(21

1

1121-++=⎰⎰-+-;

εεεϕϕd q h p h a j j

x x j j j ⎰

+-+-=++++1

)]

1([)(11

-1j 1; 这里1,,2-=n j 。第一行只有两个非零元素:),(11ϕϕa ,),(21ϕϕa 。第n 行

也只有两个非零元素:),(1-n n a ϕϕ和εεϕϕd q h p h a n n

n n ⎰+=-1

021

][),(,方程的右端εεεεεϕd h x f h d h x f h dx f j j j j j j j )1()()(1

1110

11

-+++=⎰⎰⎰

++-;

方程的系数矩阵为:⎥

⎥⎥⎦

⎤⎢

⎢⎢⎢⎣⎡-),(00

),(0)

,(),(0

),(),(12

21

22111n n n n a a a a a a ϕϕϕϕϕϕϕϕϕϕϕϕ

1.2利用MATLAB 求解问题的过程

依次取2,2,3,4,5,6,7,8.n N n ==用MATLAB 求解并图形比较数值解与精确解,用表格列出不同剖分时的2L 误差。

4N =:

8 N: = N:

16 =

32 N=: N=:

64

128 N=: N=:

256

1.3 方法总结及分析

在利用Galerkin原理出发用线性元解两点边值问题,利用MATLAB作图可以发现解析解与精确解非常逼近,但从误差上可以看出,剖分结点越多,误差越小,逼近程度越好。

附件程序

function [U,precise_value,err]= G(N)

h=1/N;

p=1;

q=1;

X=0:h:1;

A=zeros(N-1);

for i=2:N-1

f3=@(ks)-p./h+h.*q.*ks.*(1-ks);

f2=@(ks)p./h+h.*q.*(ks.^2)+p./h+h.*q.*((1-ks).^2);

f1=@(ks)-p./h+h.*q.*ks.*(1-ks);

A(i-1,i)=quadl(f1,0,1);

A(i,i)=quadl(f2,0,1);

A(i,i-1)=quadl(f3,0,1);

end

A(1,1)=quadl(f2,0,1);

f=zeros(N-1,1);

for i=2:N

f11=@(ks)(X(i-1)+h.*ks).^2.*ks+(X(i)+h.*ks).^2.*(1-ks);

f(i-1)=h.*quadl(f11,0,1);

end

U=A\f;

dx=X;

precise_value=((exp(2)-1)^(-1)).*((2-3*exp(1))*exp(dx)-(2*exp(1)-3)*exp(1-dx))+dx.^2+2

plot(X,[0;U;0],'b--',X,precise_value,'r:+');

legend('数值解','精确解');

err=norm([0;U;0]-precise_value');

format long

sprintf('Galerkin有限元法最大误差%f\n',err)

end

小组成员:宋珂、张云雷、黄镭、耿盼丽

相关文档
最新文档