椭圆型方程的有限元法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
小组成员:宋珂、张云雷、黄镭、耿盼丽