偏微分方程数值解上机实验报告(matlab做的)
- 格式:doc
- 大小:99.00 KB
- 文档页数:7
偏微分方程数值解法上机报告(一) 一、实验题目:用Ritz-Galerkin方法求解边值问题2u'',01(0)0,(1)1uxxuu的第n次近似()nux,基函数()sin(),1,2,...,ixixin. 二、实验目的:通过本次上机实验,理解求解初值问题的变分问题的最重要的近似解法——Ritz-Galerkin方法,以便为学习有限元法打好基础。此外,要熟悉用Matlab解决数学问题的基本编程方法,提高运用计算机解决问题的能力。 三、实验代码: n=5; syms x; for i=1:n p(i)=sin(i*pi*x); q(i)=-i^2*pi^2*sin(i*pi*x); end for i=1:n b(i)=2*int(p(i),0,1); for j=1:n A(i,j)=int((-q(j)+p(j))*p(i),0,1); end end t=inv(A)*b'
四、运行结果: t=
2251799813685248/3059521645650671/pi 0 281474976710656/9481460623939047/pi 0 281474976710656/43582901062631895/pi 五、总结:通过本次上机,我了解了Ritz-Galerkin方程
njjpfcjpipanii,...,2,1)),(,())(),((1,明白了用Ritz-Galerkin方法解决边值问
题的变分问题的基本原理,并接近一步提高自己的编程动手能力,受益匪浅。 偏微分方程数值解法上机报告(二) 一、 实验题目:用线性元求下列边值问题的数值解2''2sin,0142(0)0,'(1)0yyxxyy
二、 实验目的:通过本次上机,熟悉和掌握用Galerkin法观点出发导出的求解处置问题数值解的线性有限元法。增强用Matlab解决数学问题的能力。 三、 实验代码:N=10; a=0;b=1; h=(b-a)/N; p=1;q=pi^2/4; syms s; f=2*sin(pi/2*s); X=[0:(b-a)/N:1];
B=[]; for i=1:N B(i)=h*int(f*(X(i)+h*s)*s,a,b)+h*int(f*(X(i+1)+h*s)*(1-s),a,b); end
A=[]; for i=1:N-1 for j=1:N if i-j==-1 A(i,j)=neiji(1,j,N); elseif i-j==0 A(i,j)=neiji(2,j,N); elseif i-j==1 A(i,j)=neiji(3,j,N); end end end A(N,N-1)=neiji(3,N-1,N);A(N,N)=neiji(4,N,N);
u=inv(A)*B'; u' function t=neiji(index,j,N) p=1;q=pi^2/4;a=0;b=1; h=(b-a)/N; syms s; X=[0:h:1]; if index==1 t=int(-p*(X(j)+h*s)/h+h*q*(X(j)+h*s)*(1-s)*s,a,b); elseif index==2 t=int(-p*(X(j)+h*s)/h+h*q*(X(j)+h*s)*s*s,a,b)+int(-p*(X(j+1)+h*s)/h+h*q*(X(j+1)+h*s)*(1-s)*(1-s),a,b); elseif index==3 t=int(-p*(X(j+1)+h*s)/h+h*q*(X(j+1)+h*s)*(1-s)*s,a,b); elseif index==4 t=int(p*(X(10)+h*s)/h+h*q*(X(10)+h*s)*s*s,a,b); end
四、 运行结果: ans = -0.0086 0.0029 -0.0097 0.0036 -0.0101 0.0038 -0.0101 0.0037 -0.0100 0.0034 五、 总结:通过本次上机,使我理解了线性有限元法的基本原理和方法。另外,我也懂得了按Galerkin方法推导有限元方程的优点,它比Ritz法更加方便直接。我也对虚功原理有了初步的认识。因为Galerkin方法基于虚功原理,所以不但可用于保守场问题,也可使用于非保守场即非驻定问题。 偏微分方程数值解法上机报告(三) 实验题目:用线性元求下列问题的数值解2,1,1(,1)(,1)0,11(1,)1,(1,)0,11xxuxyuxuxxuyuyy (精确到小数点后第四位) 实验目的:通过本次上机,掌握二阶椭圆方程的有限元法,进一步熟悉有限元计算的有关问题。 实验步骤: 1.在matlab中输入pdetool 2.在弹出的pdetool工具箱中输入求解区域,在Object Dialog对话框中输入Left为-1,Bottom为-1,Width为2,Height2,单击OK按钮。 3. 设置边界条件:左、右边界用Neumann条件,左边界输入g为1,q为0,右边界输入g为0,q为0;上、下边界用Dirichlet条件,输入h为1,r为0,作网格剖分。设置方程类型为椭圆形,键入c=-1,a=0,f=-2,d=0。 4. 网格剖分 单击工具,或者单击Mesh菜单中Initialize Mesh选项,可进行初始网格剖分。
5. 解方程 单击工具,显示方程色彩解。如图:
6.单击Mesh菜单中Export Mesh,选择默认值。 7. 输出解的数值 单击Solve菜单中Export Solution…选项,在打开的Export对话框中输入u,单击OK按钮确定。
部分节点如下: Columns 23 through 33
0.8000 0.6000 0.4000 0.2000 0 -0.2000 -0.4000 -0.6000 -0.8000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -0.8000 -0.6000
Columns 45 through 55 -0.8710 -0.4358 -0.4426 0.2619 0.4640 -0.6894 0.8228 0.6909 0.0468 0.3862 -0.0469 0.8741 0.4026 -0.3048 -0.4881 0.2602 -0.8257 -0.6889 0.8274 0.5240 -0.0691 -0.3720
部分数值解如下 23:33 0 0 0 0 0 0 0 0 0 -0.0024 0.0976 45:55 0.0667 0.5645 0.6069 0.6724 0.8447 0.1668 0.4912 0.2952 0.6128 0.8902 0.7050
总结:有限元计算的有关问题有:把初值问题化为变分形式,对求解域作网络分割,构造基函数(或单元形状函数),形成有限元方程。通过本次实验,我懂得了用有限元方法求解初值问题的基本数学思想和方法,也增强了编程能力,提高了用计算机解决数学问题的兴趣。 偏微分方程数值解法上机报告(四) 一、 实验题目:设G是一个十字形区域,有五个相等的单位正方形组成,用五点差分格式求下列边值问题的数值解:
22221,G0,Guuxyu于
于 二、 实验目的:通过本次上机,掌握椭圆型方程的有限差分法,熟悉其计算过程与基本的思想。 三、 实验代码: h=0.125; A=zeros(6,14); for i=1:14 A(1,i)=0; A(6,i)=0; end for j=1:6 A(j,1)=0; A(j,14)=0; end A(2,11)=0; A(2,12)=0; A(2,13)=0; A(3,12)=0; A(3,13)=0; A(4,13)=0; n=0; for i=2:5 for j=2:9+i-1 A(I,j)=h^2/4+(A(i-1,j)+A(I,j-1)+A(i+1,j)+A(I,j+1))/4; n=n+1; end end A N 四、运行结果: A =
Columns 1 through 8 0 0 0 0 0 0 0 0 0 0.0039 0.0049 0.0051 0.0052 0.0052 0.0052 0.0052 0 0.0049 0.0063 0.0068 0.0069 0.0069 0.0069 0.0069 0 0.0051 0.0068 0.0073 0.0075 0.0075 0.0075 0.0075 0 0.0052 0.0069 0.0075 0.0076 0.0077 0.0077 0.0077 0 0 0 0 0 0 0 0
Columns 9 through 14 0 0 0 0 0 0 0.0052 0.0052 0 0 0 0 0.0069 0.0069 0.0056 0 0 0 0.0075 0.0075 0.0072 0.0057 0 0 0.0077 0.0077 0.0076 0.0072 0.0057 0 0 0 0 0 0 0
N = 42
五、总结:合理地作网格剖分是处理好边值问题非常重要的一个步骤和前提,通过本次上机,我懂得了椭圆型方程的有限差分法的基本思想和方法,熟悉了其计算过程和步骤,并且进一步增强了学习的兴趣,提高了编程能力。