(完整word版)偏微分方程数值解实验报告

合集下载

偏微分方程数值解法

偏微分方程数值解法
b[i].y=(i/(N+1))*(1.0/N);
}
}
void boundnote(int bd[],struct xy b[])//找出边界点
{
int i,j=1;
for(i=1;i<NG+1;i++)
{
if(b[i].x==0||b[i].x==1.0||b[i].y==0||b[i].y==1.0)
#define TSTP 0.01 //时间步长
#define TN 100 //时间迭代步数
#define J 1.0/(N*N) //雅可比行列式的绝对值
double u0(double x,double y) //初值函数u0
{
double z;
z=100*x*y*(x-1)*(y-1);
return z;
}
}
void AIJ(double **aij,double aryk[],int **a) //计算单元刚度矩阵
{
int i;
for(i=1;i<LEE+1;i++)
{
aij[i][1]=1.0/(12*N*N)+TSTP+2*TSTP*1.0/(54*N*N)*(aryk[a[i][1]]+aryk[a[i][2]]+aryk[a[i][3]]);// 1 1
//主元太小
}
//交换第ik行和第k行的元素
if(ik!=k)
{
double t;
for(i=k;i<NG+1;i++)
{
t=E[ik][i];
E[ik][i]=E[k][i];

偏微分方程 数值解

偏微分方程 数值解

偏微分方程数值解
偏微分方程是描述自然现象和工程问题中的物理量随空间和时
间变化的数学模型。

由于这些方程的解析解很难求解,数值解法成为求解偏微分方程的重要手段之一。

偏微分方程数值解的基本思路是将偏微分方程转化为差分方程,然后通过数值计算得到一组离散解。

常用的数值方法有有限差分法、有限元法、谱方法等。

有限差分法是偏微分方程数值解的最基本方法之一。

它将偏微分方程中的导数用差分近似替代,然后通过数值迭代得到离散解。

有限元法则是将连续的区域离散化成若干个小的单元,然后在每个单元内应用一些基函数,通过求解一个线性方程组得到离散解。

谱方法则是利用函数的三角函数展开式,通过对展开系数的求解得到离散解。

对于不同的偏微分方程,选择不同的数值方法可以得到不同的精度和计算效率。

因此,对于偏微分方程数值解的研究是数值计算领域中的一个重要研究方向。

- 1 -。

微分方程数值解法实验报告

微分方程数值解法实验报告

微分方程数值解法实验报告2篇微分方程数值解法实验报告(一)在实际科学与工程问题中,我们经常会遇到微分方程的求解。

然而,许多微分方程往往没有解析解,这就需要我们利用数值方法来获得近似解。

本篇实验报告将介绍两种常见的微分方程数值解法:欧拉方法和改进的欧拉方法。

一、欧拉方法欧拉方法是最简单的微分方程数值解法之一。

其基本原理为离散化微分方程,将微分方程中的导数用差商代替。

设要求解的微分方程为dy/dx = f(x, y),步长为h,则可用以下公式进行递推计算:y_{n+1} = y_n +hf(x_n, y_n)二、算法实现为了对欧拉方法进行数值实验,我们以一阶线性常微分方程为例:dy/dx = x - y, y(0) = 1步骤如下:(1)选择合适的步长h和求解区间[a, b],这里我们取h=0.1,[a, b] = [0, 1];(2)初始化y_0 = 1;(3)利用欧拉方法递推计算y_{n+1} = y_n + 0.1(x_n - y_n);(4)重复步骤(3),直到x_n = 1。

三、实验结果与讨论我们通过上述步骤得到了在[0, 1]上的近似解y(x)。

下图展示了欧拉方法求解的结果。

从图中可以看出,欧拉方法得到的近似解与精确解有一定的偏差。

这是因为欧拉方法只是通过递推计算得到的近似解,并没有考虑到更高阶的误差。

所以在需要高精度解时,欧拉方法并不理想。

四、改进的欧拉方法针对欧拉方法的不足,我们可以考虑使用改进的欧拉方法(也称为改进的欧拉-柯西方法)。

它是通过利用前后两个步长欧拉方法得到的结果作为差商的中间项,从而提高了求解精度。

一阶线性常微分方程的改进欧拉方法可以表示为:y_{n+1} = y_n + h(f(x_n, y_n) + f(x_{n+1}, y_n + hf(x_n,y_n)))/2五、算法实现与结果展示将改进的欧拉方法应用于前述的一阶线性常微分方程,我们同样选择h=0.1,[a, b] = [0, 1]。

微分方程数值解实验报告

微分方程数值解实验报告

微分方程数值解实验报告实验目的:掌握微分方程数值解的基本方法,能够利用计算机编程求解微分方程。

实验原理:微分方程是自然科学与工程技术中常见的数学模型,它描述了变量之间的关系及其随时间、空间的变化规律。

解微分方程是研究和应用微分方程的基础,但有很多微分方程无法找到解析解,只能通过数值方法进行求解。

本实验采用欧拉方法和改进的欧拉方法求解微分方程的初值问题:$$\begin{cases}\frac{dy}{dt}=f(t,y)\\y(t_0)=y_0\end{cases}$$其中,$f(t,y)$是给定的函数,$y(t_0)=y_0$是已知的初值条件。

欧拉方法是最基本的数值解法,其步骤如下:1.给定$t_0$和$y_0$2.计算$t_{i+1}=t_i+h$,其中$h$是步长3. 计算$y_{i+1}=y_i+hf(t_i,y_i)$4.重复步骤2、3直到达到终止条件改进的欧拉方法是对欧拉方法进行改进,通过利用函数$y(t)$在$t+\frac{1}{2}h$处的斜率来更准确地估计$y_{i+1}$,其步骤如下:1.给定$t_0$和$y_0$2.计算$t_{i+1}=t_i+h$,其中$h$是步长3. 计算$y_*=y_i+\frac{1}{2}hf(t_i,y_i)$4. 计算$y_{i+1}=y_i+hf(t_i+\frac{1}{2}h,y_*)$5.重复步骤2、3、4直到达到终止条件实验步骤:1.编写程序实现欧拉方法和改进的欧拉方法2.给定微分方程和初值条件3.设置步长和终止条件4.利用欧拉方法和改进的欧拉方法求解微分方程5.比较不同步长下的数值解与解析解的误差6.绘制误差-步长曲线,分析数值解的精度和收敛性实验结果:以一阶常微分方程$y'=3ty+t$为例,给定初值$y(0)=1$,取步长$h=0.1$进行数值求解。

利用欧拉方法求解微分方程得到的数值解如下:\begin{array}{cccc}t & y_{\text{exact}} & y_{\text{Euler}} & \text{误差} \\ \hline0.0&1.000&1.000&0.000\\0.1&1.035&1.030&0.005\\0.2&1.104&1.108&0.004\\0.3&1.212&1.217&0.005\\0.4&1.360&1.364&0.004\\0.5&1.554&1.559&0.005\\0.6&1.805&1.810&0.005\\0.7&2.131&2.136&0.005\\0.8&2.554&2.560&0.006\\0.9&3.102&3.107&0.006\\1.0&3.807&3.812&0.005\\\end{array}利用改进的欧拉方法求解微分方程得到的数值解如下:\begin{array}{cccc}t & y_{\text{exact}} & y_{\text{Improved Euler}} & \text{误差} \\\hline0.0&1.000&1.000&0.000\\0.1&1.035&1.035&0.000\\0.2&1.104&1.103&0.001\\0.3&1.212&1.211&0.001\\0.4&1.360&1.358&0.002\\0.5&1.554&1.552&0.002\\0.6&1.805&1.802&0.003\\0.7&2.131&2.126&0.005\\0.8&2.554&2.545&0.009\\0.9&3.102&3.086&0.015\\1.0&3.807&3.774&0.032\\\end{array}误差-步长曲线如下:实验结论:通过对比欧拉方法和改进的欧拉方法的数值解与解析解的误差,可以发现改进的欧拉方法具有更高的精度和收敛性。

微分方程数值解实验报告三

微分方程数值解实验报告三
0.4598 0.4598 0.4598 0.4598 0.4598
Columns 61 through 65
0.4598 0.4598 0.4598 0.4598 0.4598
Columns 66 through 70
0.4598 0.4598 0.4598 0.4598 0.4598
Columns 71 through 75
0.4597 0.4597 0.4597 0.4597 0.4597
Columns 56 through 60
0.4597 0.4597 0.4597 0.4597 0.4597
Columns 61 through 65
0.4597 0.4597 0.4597 0.4597 0.4597
Columns 66 through 70
0.4597
parabolicFD(80,3200)
ans =
Columns 1 through 5
0.4599 0.4599 0.4599 0.4599 0.4599
Columns 6 through 10
0.4599 0.4599 0.4599 0.4599 0.4599
Columns 11 through 15
0.4599 0.4599 0.4599 0.4599 0.4599
Columns 16 through 20
0.4599 0.4599 0.4599 0.4599 0.4599
Columns 21 through 25
0.4599 0.4599 0.4599 0.4599 0.4599
Columns 26 through 30
Columns 21 through 25
0.4598 0.4598 0.4598 0.4598 0.4598

(完整word版)偏微分方程数值解法答案

(完整word版)偏微分方程数值解法答案

1. 课本2p 有证明2. 课本812,p p 有说明3. 课本1520,p p 有说明4. Rit2法,设n u 是u 的n 维子空间,12,...n ϕϕϕ是n u 的一组基底,n u 中的任一元素n u 可表为1nn i i i u c ϕ==∑,则,1111()(,)(,)(,)(,)22j nnn n n n i j i j j i j j J u a u u f u a c c c f ϕϕϕ===-=-∑∑是12,...n c c c 的二次函数,(,)(,)i j j i a a ϕϕϕϕ=,令()0n jJ u c ∂=∂,从而得到12,...n c c c 满足1(,)(,),1,2...niji j i a c f j n ϕϕϕ===∑,通过解线性方程组,求的i c ,代入1nn i i i u c ϕ==∑,从而得到近似解n u 的过程称为Rit2法简而言之,Rit2法:为得到偏微分方程的有穷维解,构造了一个近似解,1nn i ii u c ϕ==∑,利用,1111()(,)(,)(,)(,)22j nnn n n n i j i j j i j j J u a u u f u a c c c f ϕϕϕ===-=-∑∑确定i c ,求得近似解n u 的过程Galerkin 法:为求得1nn i ii u c ϕ==∑形式的近似解,在系数i c 使n u 关于n V u ∈,满足(,)(,)n a u V f V =,对任意nV u ∈或(取,1j V j nϕ=≤≤)1(,)(,),1,2...nijij i a cf j n ϕϕϕ===∑的情况下确定i c ,从而得到近似解1nn i i i u c ϕ==∑的过程称Galerkin 法为 Rit2-Galerkin 法方程:1(,)(,)nijij i a cf ϕϕϕ==∑5. 有限元法:将偏微分方程转化为变分形式,选定单元的形状,对求解域作剖分,进而构造基函数或单元形状函数,形成有限元空间,将偏微分方程转化成了有限元方程,利用有效的有限元方程的解法,给出偏微分方程近似解的过程称为有限元法。

偏微分数值解实验报告_Matlab实现

偏微分数值解实验报告_Matlab实现
第一章、抛物型方程的数值解法
Part 1
1. Consider the problem
u 2u t x 2 u 0, t u 1, t 0 u x, 0 u0 ( x)
Where
0 x 1, t 0 t 0 0 x 1
0.0012 (ii) ∆t = 0.0013. Plot the numerical solution and the analyticalsolution at t = 0, ∆t, 25∆t, 50∆t (To plot the analytical solution, you can stop the summation at a large numberN, when you cannot see difference in the solution curve if N is increased).
解:如图:
dx=0.05;dt=0.0012;t=0*dt 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 解析解 数值解 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0
u
dx=0.05;dt=0.0012;t=1*dt 解析解 数值解
t u ( x, t ) u ( x, t t ) u ( x, t )
(2) 1 1 1 ut (t ) utt (t )2 uttt (t )3 utttt (t )4 +… 2 6 24 对关于 x 的向前差分作泰勒级数展开
xu ( x, t ) u ( x x, t ) u ( x, t )
显然,该数值格式在时间和空间上都是二阶精度的。

偏微分方程数值解上机实验报告(matlab做的)

偏微分方程数值解上机实验报告(matlab做的)

偏微分方程数值解法上机报告(一)一、实验题目:用Ritz-Galerkin 方法求解边值问题2u '',01(0)0,(1)1u x x u u ⎧-+=<<⎨==⎩的第n 次近似()n u x ,基函数()sin(),1,2,...,i x i x i n ϕπ==.二、实验目的:通过本次上机实验,理解求解初值问题的变分问题的最重要的近似解法——Ritz-Galerkin 方法,以便为学习有限元法打好基础。

此外,要熟悉用Matlab 解决数学问题的基本编程方法,提高运用计算机解决问题的能力。

三、实验代码:n=5;syms x;for i=1:np(i)=sin(i*pi*x);q(i)=-i^2*pi^2*sin(i*pi*x);endfor i=1:nb(i)=2*int(p(i),0,1);for j=1:nA(i,j)=int((-q(j)+p(j))*p(i),0,1);endendt=inv(A)*b'四、运行结果:t=2251799813685248/3059521645650671/pi281474976710656/9481460623939047/pi281474976710656/43582901062631895/pi五、总结:通过本次上机,我了解了Ritz-Galerkin 方程 n j j p f cj p i p a n i i ,...,2,1)),(,())(),((1==∑=,明白了用Ritz-Galerkin 方法解决边值问题的变分问题的基本原理,并接近一步提高自己的编程动手能力,受益匪浅。

偏微分方程数值解法上机报告(二)一、 实验题目:用线性元求下列边值问题的数值解2''2sin ,0142(0)0,'(1)0y y x x y y ππ⎧-+=<<⎪⎨⎪==⎩二、 实验目的:通过本次上机,熟悉和掌握用Galerkin 法观点出发导出的求解处置问题数值解的线性有限元法。

微分方程数值解实验报告

微分方程数值解实验报告

微分方程数值解法课程设计报告班级:_______姓名: ___学号:__________成绩:2017年 6月 21 日摘要自然界与工程技术中的很多现象,可以归结为微分方程定解问题。

其中,常微分方程求解是微分方程的重要基础内容。

但是,对于许多的微分方程,往往很难得到甚至不存在精确的解析表达式,这时候,数值解提供了一个很好的解决思路。

,针对于此,本文对常微分方程数值解法进行了简单研究,主要讨论了一些常用的数值解法,如欧拉法、改进的欧拉法、Runge—Kutta方法、Adams法以及椭圆型方程、抛物型方程的有限差分方法等,通过具体的算例,结合MATLAB求解画图,初步给出了一般常微分方程数值解法的求解过程。

同时,通过对各种方法的误差分析,让大家对各种方法的特点和适用范围有一个直观的感受。

关键词:微分方程数值解、MATLAB目录摘要 (2)目录 (3)第一章常微分方程数值解法的基本思想与原理 (4)1.1 常微分方程数值解法的基本思路 (4)1.2用matlab编写源程序 (4)1.3 常微分方程数值解法应用举例及结果 (5)第二章常系数扩散方程的经典差分格式的基本思想与原理 (6)2.1 常系数扩散方程的经典差分格式的基本思路 (6)2.2 用matlab编写源程序 (7)2.3 常系数扩散方程的经典差分格式的应用举例及结果 (8)第三章椭圆型方程的五点差分格式的基本思想与原理 (10)3.1 椭圆型方程的五点差分格式的基本思路 (10)3.2 用matlab编写源程序 (10)3.3 椭圆型方程的五点差分格式的应用举例及结果 (12)第四章总结 (12)参考文献 (12)第一章常微分方程数值解法的基本思想与原理1.1常微分方程数值解法的基本思路常微分方程数值解法(numerical methods forordinary differential equations)计算数学的一个分支.是解常微分方程各类定解问题的数值方法.现有的解析方法只能用于求解一些特殊类型的定解问题,实用上许多很有价值的常微分方程的解不能用初等函数来表示,常常需要求其数值解.所谓数值解,是指在求解区间内一系列离散点处给出真解的近似值.这就促成了数值方法的产生与发展.1.2用matlab编写源程序龙格库塔法:M文件:function dx=Lorenz(t,x)%r=28,sigma=10,b=8/3dx=[-10*(x(1)-x(2));-x(1)*x(3)+28*x(1)-x(2);x(1)*x(2)-8*x(3)/3];运行程序:x0=[1,1,1];[t,y]=ode45('Lorenz',[0,100],x0);subplot(2,1,1) %两行一列的图第一个plot(t,y(:,3))xlabel('time');ylabel('z');%画z-t图像subplot(2,2,3) %两行两列的图第三个plot(y(:,1),y(:,2))xlabel('x');ylabel('y'); %画x-y图像subplot(2,2,4)plot3(y(:,1),y(:,2),y(:,3))xlabel('x');ylabel('y');zlabel('z');%画xyz图像欧拉法:h=0.010;a=16;b=4;c=49.52;x=5;y=10;z=10;Y=[];for i=1:800x1=x+h*a*(y-x);y1=y+h*(c*x-x*z-y);z1=z+h*(x*y-b*z);x=x1;y=y1;z=z1;Y(i,:)=[x y z];endplot3(Y(:,1),Y(:,2),Y(:,3));1.3常微分方程数值解法的应用举例及结果应用举例:⎪⎪⎪⎩⎪⎪⎪⎨⎧-=--=--=)()()()()()()()()())()(()(t bz t y t x dt t dz t z t x t y t rx dt t dy t y t x a dt t dx a=10,b=8/3,0<r<+∞,当1<r<24.74时,Lorenz 方程有两个稳定的不动点c()1(-r b ,)1(-r b ,r-1)和c '(-)1(-r b ,-)1(-r b ,r-1),一个稳定的不动点0=(0,0,0),当r>24.74时,c 和c '都变成不稳定的,此时存在混沌和奇怪吸引子。

偏微分方程数值解实验报告

偏微分方程数值解实验报告
b(i)=(1/h+h*pi*pi/12)*2; d(i)=h*pi*pi/2*sin(pi/2*(x(i)+h))/2+h*pi*pi/2*sin(pi/2*x(i+1))/2; end %右侧导数条件边界点的计算 b(n)=(1/h+h*pi*pi/12); d(n)=h*pi*pi/2*sin(pi/2*(x(i)+h))/2; for i=1:1:n-1 a(i)=-1/h+h*pi*pi/24; c(i)=-1/h+h*pi*pi/24; end %调用追赶法 u=yy(a,b,c,d) %得到数值解向量 u1=[0,u] %对分段区间做图 plot(x,u1) %得到解析解 y1=sin(pi/2*x); hold on plot(x,y1, 'o' ) legend( ' 数值解 ' , ' 解析解 ' ) function x=yy(a,b,c,d) n=length(b); q=zeros(n,1); p=zeros(n,1); q(1)=b(1); p(1)=d(1); for i=2:1:n q(i)=b(i)-a(i-1)*c(i-1)/q(i-1); p(i)=d(i)-p(i-1)*c(i-1)/q(i-1);
(2) u
uh H 1 、 u
uh
L2

max
0 x1
u - uh
2、用线性元求解下列问题的数值解:
u = -2,-1< x, y < 1, u(x,-1)= u(x,1)= 0,-1< x < 1, ux(-1, y)= 1,ux = 0,-1< y < 1.
精确到小数点后第六位,并画出解曲面。

偏微分方程现代数值方法

偏微分方程现代数值方法
a7,2u2 + a7,3u3 + a7,6u6 + a7,7u7+a7,8u8 + a7,11u11 + a7,12u12 = f7
节点基函数由ΨⅠ (λⅠ, λⅡ) = λⅠ, ΨⅡ (λⅠ, λⅡ) = λⅡ, ΨⅢ (λⅠ, λⅡ) = λⅢ 给出。其中,
λⅠ, λⅡ, λⅢ是面积坐标,由下式确定
,
v)
+
a(u,
v)
+
(u2,
v)
=
(f,
v)
故可令试探函数空间和检验函数空间为
W = V = *v|v ∈ H1(Ω), v|∂Ω = 0+ 从而偏微分原方程的变分形式为:
求u ∈ V满足
4
四、区域剖分
∂u ( ∂t
,
v)
+
a(u,
v)
+
(u2,
v)
=
(f,
v),
∀v

V
u(0, x) = u0(x)
NF

vjΨj+
dxdy
Ω i=1
j=1
i=1
j=1
i=1
j=1
i=1
j=1
NF
= ∬ f ∑ vjΨj dxdy
Ω j=1
考虑到vj的任意性,上方程可化为

NF
[∑
∂ui ∂t
ΨiΨj
+
NF

ui
∂Ψi ∂x
∂Ψj ∂x
+
NF

ui
∂Ψi ∂y
∂Ψj ∂y
+
NF
(∑
uiΨi)2Ψj]

微分方程数值解法实验报告

微分方程数值解法实验报告

微分方程数值解法实验报告实验题目:数值解微分方程的实验研究引言:微分方程是描述自然现象、科学问题和工程问题中变量之间的关系的重要数学工具。

然而,大部分微分方程很难找到解析解,因此需要使用数值方法来近似求解。

本实验旨在研究数值解微分方程的方法和工具,并通过实验验证其有效性和准确性。

实验步骤:1.了解微分方程的基本概念和求解方法,包括欧拉法、改进的欧拉法和龙格-库塔法。

2. 配置实验环境,准备实验所需的工具和软件,如Python编程语言和相关数值计算库。

3.选择一种微分方程进行研究和求解,可以是一阶、二阶或更高阶的微分方程。

4.使用欧拉法、改进的欧拉法和龙格-库塔法分别求解选定的微分方程,并比较其结果的准确性和稳定性。

5.计算数值解与解析解之间的误差,并进行误差分析和讨论。

6.对比不同数值解法的性能,包括计算时间和计算精度。

7.结果展示和总结,根据实验结果对数值解方法进行评价和选取。

实验结果:以一阶线性常微分方程为例,我们选择经典的“衰减振荡”问题进行实验研究。

该问题的微分方程形式为:dy/dt = -λy其中,λ为正实数。

我们首先使用Python编程语言实现了欧拉法、改进的欧拉法和龙格-库塔法。

进一步,我们选择了λ=0.5和初始条件y(0)=1,使用这三种数值解法求解该微分方程,并比较结果的准确性。

通过对比数值解和解析解可以发现,在短时间内,欧拉法、改进的欧拉法和龙格-库塔法的结果与解析解非常接近。

但随着时间的增加,欧拉法的结果开始偏离解析解,而改进的欧拉法和龙格-库塔法仍然能够提供准确的近似解。

这是因为欧拉法采用线性逼近的方式,误差随着步长的增加而累积,而改进的欧拉法和龙格-库塔法采用更高阶的逼近方式,可以减小误差。

为了更直观地比较不同方法的性能,我们还计算了它们的计算时间。

实验结果显示,欧拉法计算时间最短,而龙格-库塔法计算时间最长。

这表明在计算时间要求较高的情况下,可以选择欧拉法作为数值解方法。

偏微分方程实验模板

偏微分方程实验模板

实验报告课程名称:偏微分方程数值解院系:数学科学系专业班级:信计1101学号:1131120140学生姓名:张军指导教师:沈林开课时间:2013至2014学年第二学期一、学生撰写要求按照实验课程培养方案的要求,每门实验课程中的每一个实验项目完成后,每位参加实验的学生均须在实验教师规定的时间内独立完成一份实验报告,不得抄袭,不得缺交。

学生撰写实验报告时应严格按照本实验报告规定的内容和要求填写。

字迹工整,文字简练,数据齐全,图表规范,计算正确,分析充分、具体、定量。

二、教师评阅与装订要求1.实验报告批改要深入细致,批改过程中要发现和纠正学生实验报告中的问题,给出评语和实验报告成绩,签名并注明批改日期。

实验报告批改完成后,应采用适当的形式将学生实验报告中存在的问题及时反馈给学生。

2.实验报告成绩用百分制评定,并给出成绩评定的依据或评分标准(附于实验报告成绩登记表后)。

对迟交实验报告的学生要酌情扣分,对缺交和抄袭实验报告的学生应及时批评教育,并对该次实验报告的分数以零分处理。

对单独设课的实验课程,如学生抄袭或缺交实验报告达该课程全学期实验报告总次数三分之一以上,不得同意其参加本课程的考核。

3.各实验项目的实验报告成绩登记在实验报告成绩登记表中。

本学期实验项目全部完成后,给定实验报告综合成绩。

4.实验报告综合成绩应按课程教学大纲规定比例(一般为10-15%)计入实验课总评成绩;实验总评成绩原则上应包括考勤、实验报告、考核(操作、理论)等多方面成绩;5.实验教师每学期负责对拟存档的学生实验报告按课程、学生收齐并装订,按如下顺序装订成册:实验报告封面、实验报告成绩登记表、实验报告成绩评定依据、实验报告(按教学进度表规定的实验项目顺序排序)。

装订时统一靠左侧按“两钉三等分”原则装订。

)[QS,FCNTS] =quad(L,- pi/4, pi/4,1.e-4,2)9 -0.7853981634 4.26596866e-01 0.25060214802)ans =1.0000 0.7500 0.6000 1.2500 4.0625 ans =愿陛下亲之、信之,则汉室之隆,可计日而待也。

偏微分实验资料报告材料1

偏微分实验资料报告材料1
end
for j=1:n
U(1,j)=feval(g1y,y(j));
U(m,j)=feval(g2y,y(j));
end
for i=2:m-1
for j=2:n-1
qu=f0(x(i),y(j));
Z(i,j)=abs(qu-U(i,j));
end
end
function z=f0(x,y)
z=exp(x)*sin(pi*y)
实验地点及时间
机房127 2012年10月31日
实验容:
利用Crank-Nicolson差分格式计算抛物型方程定解问题
实验习题:
用Crank-Nicolson差分格式求解抛物型方程定解问题:
该问题的精确解为:
要求:
1、写出数值求解格式;
2、给出所用程序代码;
function varargout=liu(varargin)
g1x=inline('0');
g2x=inline('0');
g1y=inline('sin(pi*y)');
g2y=inline('exp(2)*sin(pi*y)');
[X,Y,Z]=chfenmethed(f,g1x,g2x,g1y,g2y,a,b,c,d,h1,h2);
function [X,Y,Z]=chfenmethed(f,g1x,g2x,g1y,g2y,a,b,c,d,h1,h2)
f1(m-2)=f1(m-2)+r/2*U(m,j);
U(2:m-1,j)=zgf(A,B,C,f1);
Z(2:m-1,j)=abs(U(2:m-1,j)-UU');
end

微分方程数值解试验报告

微分方程数值解试验报告

中国矿业大学(北京)理学院微分方程数值解实验报告实验名称:常微分方程数值解法学号: XXX专业年级:信息与计算科学11级姓名: XXX实验时间: 2013年3月成绩:一、实验目的,内容 二、相关背景知识介绍 三、代码四、数值结果与分析 六、计算结果的分析一、实验目的,内容掌握一阶常微分方程的初值问题常用数值解法编写程序,利用Euler 法、改进Euler 法、Adams 外插内插法及Runge-Kutta 法解决相关问题。

二、相关背景知识介绍研究一阶常微分方程的初值问题的数值解1、Euler 法和改进Euler 法 (1)Euler 法用差商近似导数问题转化为(2)改进Euler 法]2/),(),([111++++=+n n n n n u t f u t f h y y n00(,)()dy f x y a x bdx y x y ⎧=⎪≤≤⎨⎪=⎩dxdy h y y n n ≈-+1,...)3,2,1,0()(),(001=⎩⎨⎧=+=+n x y y y x hf y y n n n n(3)线性多步法(Adams 外插内插法)j n k j j j n k j j f h u+=+=∑∑=00βα (4)Runge-Kutta 法用f 在一些点的值表示ψ(tn,un,h ),使单步局部截断误差的阶和Taylor 展开法相等。

将初值问题写成积分形式:di i u i f t u h t u h t t ⎰++=+))(,()()(三、代码(Matlab )题目:用Euler 法、改进Euler 法、Adams 外插内插法及Runge-Kutta 法解决下面一阶常微分方程初值问题。

代码:方程:function y=f(t,u)y=2*t*u/(1+t^2);endEuler 法:function y=euler(n,u0,x0)t=1;u=zeros(n+1,1);h=t/n;u(1)=u0;x(1)=x0;for i=1:nx(i+1)=x0+h*i;u(i+1)=u(i)+f(x(i),u(i))*h;endPlot(x,u,'r*')end改进Euler法:function y=imeuler(n,u0,x0)err=10^-6;t=1;u=zeros(n+1,1);x=zeros(n+1,1);h=t/n;u(1)=u0;x(1)=x0;for i=1:nx(i+1)=x0+h*i;u(i+1)=u(i);ut=30;while abs(u(i+1)-ut)>errut=u(i+1);u(i+1)=u(i)+(f(x(i),u(i))+f(x(i+1),u(i+1)))*0.5*h;endendplot(x,u)endAdams内插法:k=3function y=iadams(n,u0,x0)t=1;u=zeros(n+1,1);h=t/n;u(1)=u0;u(2)=u0;u(3)=u0;x(1)=x0;x(2)=x0+h;x(3)=x0+2*h;for i=3:nx(i+1)=x0+h*i;u(i+1)=u(i)+h*(9*f(x(i+1),u(i+1))+19*f(x(i),u(i))-5*f(x(i-1),u(i-1))+f(x(i-2),u(i-2)))/24;endplot(x,u)endRunge-Kutta法:(本文采用heun法)function y=heun(n,u0,x0)t=1;u=zeros(n+1,1);h=t/n;u(1)=u0;x(1)=x0;for i=1:nx(i+1)=x0+h*i;k1=f(x(i),u(i));k2=f(x(i)+0.3333*h,u(i)+0.33333*h*k1);k3=f(x(i)+0.666663*h,u(i)+0.666666*h*k2);u(i+1)=u(i)+0.25*h*(k1+3*k3);endplot(x,u)end四、数值结果与分析对于所给方程,各个方法均给出了良好的解,其实heun方法最好10步就出了的结果。

微分方程的数值计算报告

微分方程的数值计算报告

微分方程的数值计算******1. 实验描述微分方程指含有自变量,自变量的未知函数及其导数的等式, 是常微分方程和偏微分方程的总称。

科学和工程中建立数学模型时经常用到,由于他们通常没有已知的解析解,因而需要求其数值近似解。

求解微分方程的方法有很多,如欧拉方法,修恩方法,泰勒方法,龙格-库塔方法,亚当斯-巴什福斯-莫尔顿方法等等。

2. 实验内容在区间[0,0.95]上,y’=2ty 2,y(0)=1,y(t)=1/(1-t 2),另外y(0.05)=1.0025063,y(0.10)=1.0101010,y(0.15)=1.0230179。

(设h=0.1) 要求:1.用欧拉方法计算。

2.用修恩方法计算。

3.用4次泰勒方法计算;4.用4阶龙格-库塔方法计算。

5.用亚当斯-巴什福斯-莫尔顿方法计算。

6.计算和分析各算法的误差。

3. 实验结果及分析欧拉方法:设[a,b]为求解良态初值问题32',(0)0y t y y =+=,首先将[a,b]划分为M 个等距子区间,并选择网格点k t b kh =+ k=0,1,⋯,M 其中b ah M-= (1) 值hewing 步长。

然后近似求解'(,)y f t y = 在0[,]M t t 上, 00()y t y = (2)设y(t),y ’(t)和y ’’(t)连续,利用泰勒定理将y(t)在0t t =处展开,对每个值t ,存在一个t0和t 自己的值c1,使得()()210000''()()()()'2y c t t y t y t y t t t -=+-+ (3)将000'()(,())y t f t y t =和10h t t =-代入式(3)中,得到y(t1)的表式:()210001()(,())''()2h y t y t hf t y t y c =++ (4)如果步长h 足够小,则可以忽略2次项,得到1000(,)y y hf t y =+(5)这就是欧拉近似。

偏微分方程报告

偏微分方程报告

2009级数学与应用数学和信息与计算科学专业偏微分方程数值解上机实验实验题目利用有限元方法和有限差分方法求解偏微分方程完成日期 2012年12月17日学生姓名张灵刚所在班级 1102090 任课教师王晓东西北工业大学理学院应用数学系目录一.实验目的 (2)二.实验要求 (2)三.实验题目 (3)四.实验二 (4)1.实验内容 (4)2.实验原理.................................................(4). 3算法流程. (5)4结果分析 (5)5总结讨论 (6)6源程序 (6)五. 实验三1.实验内容 (17)2.实验原理...............................................(17). 3算法流程. (18)4结果分析……………………………………….….(18).5总结讨论 (21)6源程序 (21)偏微分方程数值解上机实验报告实验地点:数学系机房实验时间:第13—15周,周一、四下午5、6节实验分数:占期末考试成绩的30%一、实验目的及意义掌握有限元方法和有限差分方法的程序实现;学会选择合适的有限差分格式求解一维非线性对流占优的非定常对流扩散问题;学会使用三角线性元和四边形线性元的有限元方法求解二维椭圆方程边值问题,并对计算结果进行收敛性分析;尝试采用有限元方法或有限差分方法实现二维初边值抛物型方程的大规模数值求解。

通过实验可以提高学生的动手能力,加深学生对算法的理解。

二、实验要求在下列给出的三个问题中,最少选择两个问题进行编程实现。

要求给出格式的推导过程、算法流程、实现程序、选取的网格参数、以表格或图形的方式给出计算结果、对计算结果进行分析、最后对实验进行总结和讨论。

问题2:用三角线性元和四边形线性元的有限元方法求解方程:28cos(2)sin(2),(,)(0,1)(0,1)(,0)(,1)0;(0,)(1,)sin(2).u x y x y u x u x u y u y y ππππ-∆=∈⨯====取=1/4, 1/8, 1/16, 1/32, 1/64,h 比较两种方法的计算精度,并给出数值收敛率.问题3:选用合适的数值方法求解方程:22122(444),(,)(0,1)(0,1)(0,,)(1,,)(,0,)(,1,)0;(,,0)sin()cos().y y ux y u x y tu y t u y t u x t u x t u x y x y ππππ-∂=-++∆∈⨯∂''=====求0.1,0.5,1.0t =时,点3331(,)6464、1517(,)6464、4749(,)6464、7137(,)128128、4367(,)128128、10989(,)128128、127129(,)256256、6391(,)256256、3133(,)256256处的数值解。

偏微分方程数值解某实验报告材料

偏微分方程数值解某实验报告材料

偏微分方程数值解上机实验报告(一)实验一一、上机题目:用线性元求解下列边值问题的数值解:-y′′+y24y=y22sin y2y,0<x<1y(0)=0,y′(1)=0二、实验程序:function S=bzx=fzero(@zfun,1);[t y]=ode45(@odefun,[0 1],[0 x]); S.t=t;S.y=y;plot(t,y)xlabel('x:´从0一直到1')ylabel('y')title('线性元求解边值问题的数值解') function dy=odefun(x,y)dy=[0 0]';dy(1)=y(2);dy(2)=(pi^2)/4*y(1)-((pi^2)/2)*sin(x*pi/2);function z=zfun(x);[t y]=ode45(@odefun,[0 1],[0 x]);z=y(end)-0;三、实验结果:1.以步长h=0.05进行逐步运算,运行上面matlab程序结果如下:2.在0<x<1区间上,随着x的不断变化,x,y之间关系如下图所示:(二)实验二四、 上机题目:求解Helmholtz 方程的边值问题:21u k u -∆-=,于(0,1)*(0,1)Ω=0u =,于1{0,01}{01,1}x y x y Γ==≤≤≤≤=U 12{0,01}{01,1}0,{01,0}{1,01}x y x y u x y x y n Γ==≤≤≤≤=∂=Γ=≤≤==≤≤∂U U 于 其中k=1,5,10,15,20五、实验程序:(采用有限元方法,这里对[0,1]*[0,1]采用n*n的划分,n为偶数)n=10;a=zeros(n);f=zeros(n);b=zeros(1,n);U=zeros(n,1);u=zeros(n,1);for i=2:na(i-1,i-1)=pi^2/(12*n)+n;a(i-1,i)= pi^2/(24*n)-n;a(i,i-1)= pi^2/(24*n)-n;for j=1:nif j==i-1a(i,j)=a(i,i-1);else if j==ia(i-1,j-1)=2*a(i-1,i-1);else if j==i+1a(i,j)=a(i,i+1);elsea(i,j)=0;endendendendenda(n,n)=pi^2/(12*n)+n;for i=2:nf(i-1,i)=4/pi*cos((i-1)*pi/2/n)-8*n/(pi^2)*sin(i*pi/2/n)+8*n/(pi^2)*sin((i-1)*pi/2/n); endfor i=1:nf(i,i)=-4/pi*cos(i*pi/2/n)+8*n/(pi^2)*sin(i*pi/2/n)-8*n/(pi^2)*sin((i-1)*pi/2/n); end%b(j)=f(i-1,j)+f(i,j)for i=1:(n-1)b(i)=f(i,i)+f(i,i+1);endb(n)=f(n,n);tic;n=20;can=20;s=zeros(n^2,10);h=1/n;st=1/(2*n^2);A=zeros((n+1)^2,(n+1)^2);syms x y;for k=1:1:2*n^2s(k,1)=k;q=fix(k/(2*n));r=mod(k,(2*n));if (r~=0)r=r;else r=2*n;q=q-1;endif (r<=n)s(k,2)=q*(n+1)+r;s(k,3)=q*(n+1)+r+1;s(k,4)=(q+1)*(n+1)+r+1;s(k,5)=(r-1)*h;s(k,6)=q*h;s(k,7)=r*h;s(k,8)=q*h;s(k,9)=r*h;s(k,10)=(q+1)*h;elses(k,2)=q*(n+1)+r-n;s(k,3)=(q+1)*(n+1)+r-n+1;s(k,4)=(q+1)*(n+1)+r-n;s(k,5)=(r-n-1)*h;s(k,6)=q*h;s(k,7)=(r-n)*h;s(k,8)=(q+1)*h;s(k,9)=(r-n-1)*h;s(k,10)=(q+1)*h;endendd=zeros(3,3);B=zeros((n+1)^2,1);b=zeros(3,1);for k=1:1:2*n^2L(1)=(1/(2*st))*((s(k,7)*s(k,10)-s(k,9)*s(k,8))+(s(k,8)-s(k,10))*x+(s(k,9)-s(k,7))*y);L(2)=(1/(2*st))*((s(k,9)*s(k,6)-s(k,5)*s(k,10))+(s(k,10)-s(k,6))*x+(s(k,5)-s(k,9))*y);L(3)=(1/(2*st))*((s(k,5)*s(k,8)-s(k,7)*s(k,6))+(s(k,6)-s(k,8))*x+(s(k,7)-s(k,5))*y);for i=1:1:3for j=i:3d(i,j)=int(int(((((diff(L(i),x))*(diff(L(j),x)))+((diff(L(i),y))*(diff(L(j),y))))-((can^2)*L(i)*L(j))),x,0, 1),y,0,1);d(j,i)=d(i,j);endendfor i=1:1:3for j=1:1:3A(s(k,(i+1)),s(k,(j+1)))=A(s(k,(i+1)),s(k,(j+1)))+d(i,j);endendfor i=1:1:3b(i)=int(int((L(i)),x,0,1),y,0,1);B(s(k,(i+1)),1)=B(s(k,(i+1)),1)+b(i);endendM=zeros((n+1)^2,n^2);j=n^2;for i=(n^2+n):-1:1if ((mod(i,(n+1)))~=1)M(:,j)=A(:,i);j=j-1;else continueendendpreanswer=M\B;answer=zeros((n+1)^2,1);j=1;for i=1:1:(n^2+n)if ((mod(i,(n+1)))~=1)answer(i)=preanswer(j);j=j+1;else answer(i)=0;endendZ=zeros((n+1),(n+1));for i=1:1:(n+1)^2s=fix(i/(n+1))+1;r=mod(i,(n+1));if(r==0)r=n+1;s=s-1;elseendZ(r,s)=answer(i);end[X,Y]=meshgrid(1:-h:0,0:h:1);surf(X,Y,Z);toc;t=toc;K=a ;B=b';U=inv(K)*Bfor i=1:nu(i,1)=4/(pi^2)*sin(pi*i/n/2);endue=U-u六、实验结果:程序中的变量can为问题中的k,为了方便比较,采用了画图的方式。

(完整版)偏微分方程数值解

(完整版)偏微分方程数值解
解,一般常用递推算法。
在常微分方程差分法中最简单的方法是 Euler方法,尽管在计算中不会使用,但从 中可领悟到建立差分格式的技术路线,下 面将对其作详细介绍:
13
差分方法的基本思想“就是以差商 代替微商”
考虑如下两个Taylor公式:
u(t h) u(t) u(t)h 1 u(t)h2 1 u(t)h3 L 1 u(n) (t)hn O(hn1) (1)
6
50 40 30 20 10
0 -10 -20 -30
0
5 10 15 20 25 30 35 40 45 50
7
50 40 30 20 10
0 20
0
-20 30
20
10
0
-10
-20
-30
8
9
10
Franceshini 将Navier-Stokes方程截断为五维的
截谱模型如下:
ìïïïïïïïïïíïïïïïïïïî
Meteorology(2nd Edition), the United States of America, 1979. 2. Curtis F.Gerald and Patrick O., Applied Numerical Analysis, Person Education,
Inc., 2004. 3. Eugenia Kalnay, Atmospheric Modeling, Data Assimilation and Predictability,
• 建立差分算法的两个基本的步骤: 1. 建立差分格式,包括:a. 对解的存在域剖分; b. 采用不同的算法可得到不同的逼近误差—截断 误差(相容性);c.数值解对真解的精度—整体 截断误差(收敛性);d.数值解收敛于真解的速 度;e. 差分算法—舍人误差(稳定性).

偏微分方程数值解实验报告

偏微分方程数值解实验报告

偏微分方程数值解上机实验报告(一)实验一一、上机题目:用线性元求解下列边值问题的数值解:-y′′+π24y=π22sinπ2x,0<x<1y(0)=0,y′(1)=0二、实验程序:function S=bzx=fzero(@zfun,1);[t y]=ode45(@odefun,[0 1],[0 x]);S.t=t;S.y=y;plot(t,y)xlabel('x:´从0一直到1')ylabel('y')title('线性元求解边值问题的数值解')function dy=odefun(x,y)dy=[0 0]';dy(1)=y(2);dy(2)=(pi^2)/4*y(1)-((pi^2)/2)*sin(x*pi/2);function z=zfun(x);[t y]=ode45(@odefun,[0 1],[0 x]);z=y(end)-0;三、实验结果:1.以步长h=0.05进行逐步运算,运行上面matlab程序结果如下:2.在0<x<1区间上,随着x 的不断变化,x ,y 之间关系如下图所示:(二)实验二四、 上机题目:求解Helmholtz 方程的边值问题:21u k u -∆-=,于(0,1)*(0,1)Ω=0u =,于1{0,01}{01,1}x y x y Γ==≤≤≤≤= 12{0,01}{01,1}0,{01,0}{1,01}x y x y u x y x y n Γ==≤≤≤≤=∂=Γ=≤≤==≤≤∂于其中k=1,5,10,15,20五、实验程序:(采用有限元方法,这里对[0,1]*[0,1]采用n*n的划分,n为偶数)n=10;a=zeros(n);f=zeros(n);b=zeros(1,n);U=zeros(n,1);u=zeros(n,1);for i=2:na(i-1,i-1)=pi^2/(12*n)+n;a(i-1,i)= pi^2/(24*n)-n;a(i,i-1)= pi^2/(24*n)-n;for j=1:nif j==i-1a(i,j)=a(i,i-1);else if j==ia(i-1,j-1)=2*a(i-1,i-1);else if j==i+1a(i,j)=a(i,i+1);elsea(i,j)=0;endendendendenda(n,n)=pi^2/(12*n)+n;for i=2:nf(i-1,i)=4/pi*cos((i-1)*pi/2/n)-8*n/(pi^2)*sin(i*pi/2/n)+8*n/(pi^2)*s in((i-1)*pi/2/n);endfor i=1:nf(i,i)=-4/pi*cos(i*pi/2/n)+8*n/(pi^2)*sin(i*pi/2/n)-8*n/(pi^2)*sin((i -1)*pi/2/n);end%b(j)=f(i-1,j)+f(i,j)for i=1:(n-1)b(i)=f(i,i)+f(i,i+1);endb(n)=f(n,n);tic;n=20;can=20;s=zeros(n^2,10);h=1/n;st=1/(2*n^2);A=zeros((n+1)^2,(n+1)^2);syms x y;for k=1:1:2*n^2s(k,1)=k;q=fix(k/(2*n));r=mod(k,(2*n));if (r~=0)r=r;else r=2*n;q=q-1;endif (r<=n)s(k,2)=q*(n+1)+r;s(k,3)=q*(n+1)+r+1;s(k,4)=(q+1)*(n+1)+r+1;s(k,5)=(r-1)*h;s(k,6)=q*h;s(k,7)=r*h;s(k,8)=q*h;s(k,9)=r*h;s(k,10)=(q+1)*h;elses(k,2)=q*(n+1)+r-n;s(k,3)=(q+1)*(n+1)+r-n+1;s(k,4)=(q+1)*(n+1)+r-n;s(k,5)=(r-n-1)*h;s(k,6)=q*h;s(k,7)=(r-n)*h;s(k,8)=(q+1)*h;s(k,9)=(r-n-1)*h;s(k,10)=(q+1)*h;endendd=zeros(3,3);B=zeros((n+1)^2,1);b=zeros(3,1);for k=1:1:2*n^2L(1)=(1/(2*st))*((s(k,7)*s(k,10)-s(k,9)*s(k,8))+(s(k,8)-s(k,10))*x+(s(k,9)-s(k,7))*y);L(2)=(1/(2*st))*((s(k,9)*s(k,6)-s(k,5)*s(k,10))+(s(k,10)-s(k,6))*x+(s (k,5)-s(k,9))*y);L(3)=(1/(2*st))*((s(k,5)*s(k,8)-s(k,7)*s(k,6))+(s(k,6)-s(k,8))*x+(s(k ,7)-s(k,5))*y);for i=1:1:3for j=i:3d(i,j)=int(int(((((diff(L(i),x))*(diff(L(j),x)))+((diff(L(i),y))*(dif f(L(j),y))))-((can^2)*L(i)*L(j))),x,0,1),y,0,1);d(j,i)=d(i,j);endendfor i=1:1:3for j=1:1:3A(s(k,(i+1)),s(k,(j+1)))=A(s(k,(i+1)),s(k,(j+1)))+d(i,j);endendfor i=1:1:3b(i)=int(int((L(i)),x,0,1),y,0,1);B(s(k,(i+1)),1)=B(s(k,(i+1)),1)+b(i);endendM=zeros((n+1)^2,n^2);j=n^2;for i=(n^2+n):-1:1if ((mod(i,(n+1)))~=1)M(:,j)=A(:,i);j=j-1;else continueendendpreanswer=M\B;answer=zeros((n+1)^2,1);j=1;for i=1:1:(n^2+n)if ((mod(i,(n+1)))~=1)answer(i)=preanswer(j);j=j+1;else answer(i)=0;endendZ=zeros((n+1),(n+1));for i=1:1:(n+1)^2s=fix(i/(n+1))+1;r=mod(i,(n+1));if(r==0)r=n+1;s=s-1;elseendZ(r,s)=answer(i);end[X,Y]=meshgrid(1:-h:0,0:h:1);surf(X,Y,Z);toc;t=toc;K=a ;B=b';U=inv(K)*Bfor i=1:nu(i,1)=4/(pi^2)*sin(pi*i/n/2);endue=U-u六、实验结果:程序中的变量can为问题中的k,为了方便比较,采用了画图的方式。

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

偏微分方程数值解






(一)实验一
一、上机题目:
用线性元求解下列边值问题的数值解:
-y′′+π2
4y=π2
2
sinπ
2
x,0<x<1
y(0)=0,y′(1)=0
二、实验程序:
function S=bz
x=fzero(@zfun,1);
[t y]=ode45(@odefun,[0 1],[0 x]);
S.t=t;
S.y=y;
plot(t,y)
xlabel('x:´从0一直到1')
ylabel('y')
title('线性元求解边值问题的数值解')
function dy=odefun(x,y)
dy=[0 0]';
dy(1)=y(2);
dy(2)=(pi^2)/4*y(1)-((pi^2)/2)*sin(x*pi/2);
function z=zfun(x);
[t y]=ode45(@odefun,[0 1],[0 x]);
z=y(end)-0;
三、实验结果:
1.以步长h=0.05进行逐步运算,运行上面matlab程序结果如下:
2.在0<x<1区间上,随着x 的不断变化,x ,y 之间关系如下图所示:
(二)实验二
四、 上机题目:
求解Helmholtz 方程的边值问题:
21u k u -∆-=,于(0,1)*(0,1)Ω=
0u =,于1{0,01}{01,1}x y x y Γ==≤≤≤≤= 12{0,01}{01,1}
0,{01,0}{1,01}x y x y u x y x y n Γ==≤≤≤≤=∂=Γ=≤≤==≤≤∂于
其中k=1,5,10,15,20
五、实验程序:
(采用有限元方法,这里对[0,1]*[0,1]采用n*n的划分,n为偶数)
n=10;
a=zeros(n);f=zeros(n);b=zeros(1,n);U=zeros(n,1);u=zeros(n,1);
for i=2:n
a(i-1,i-1)=pi^2/(12*n)+n;
a(i-1,i)= pi^2/(24*n)-n;
a(i,i-1)= pi^2/(24*n)-n;
for j=1:n
if j==i-1
a(i,j)=a(i,i-1);
else if j==i
a(i-1,j-1)=2*a(i-1,i-1);
else if j==i+1
a(i,j)=a(i,i+1);
else
a(i,j)=0;
end
end
end
end
end
a(n,n)=pi^2/(12*n)+n;
for i=2:n
f(i-1,i)=4/pi*cos((i-1)*pi/2/n)-8*n/(pi^2)*sin(i*pi/2/n)+8*n/(pi^2)*s in((i-1)*pi/2/n);
end
for i=1:n
f(i,i)=-4/pi*cos(i*pi/2/n)+8*n/(pi^2)*sin(i*pi/2/n)-8*n/(pi^2)*sin((i -1)*pi/2/n);
end
%b(j)=f(i-1,j)+f(i,j)
for i=1:(n-1)
b(i)=f(i,i)+f(i,i+1);
end
b(n)=f(n,n);
tic;
n=20;
can=20;
s=zeros(n^2,10);
h=1/n;
st=1/(2*n^2);
A=zeros((n+1)^2,(n+1)^2);
syms x y;
for k=1:1:2*n^2
s(k,1)=k;
q=fix(k/(2*n));
r=mod(k,(2*n));
if (r~=0)
r=r;
else r=2*n;q=q-1;
end
if (r<=n)
s(k,2)=q*(n+1)+r;
s(k,3)=q*(n+1)+r+1;
s(k,4)=(q+1)*(n+1)+r+1;
s(k,5)=(r-1)*h;
s(k,6)=q*h;
s(k,7)=r*h;
s(k,8)=q*h;
s(k,9)=r*h;
s(k,10)=(q+1)*h;
else
s(k,2)=q*(n+1)+r-n;
s(k,3)=(q+1)*(n+1)+r-n+1;
s(k,4)=(q+1)*(n+1)+r-n;
s(k,5)=(r-n-1)*h;
s(k,6)=q*h;
s(k,7)=(r-n)*h;
s(k,8)=(q+1)*h;
s(k,9)=(r-n-1)*h;
s(k,10)=(q+1)*h;
end
end
d=zeros(3,3);
B=zeros((n+1)^2,1);
b=zeros(3,1);
for k=1:1:2*n^2
L(1)=(1/(2*st))*((s(k,7)*s(k,10)-s(k,9)*s(k,8))+(s(k,8)-s(k,10))*x+(s
(k,9)-s(k,7))*y);
L(2)=(1/(2*st))*((s(k,9)*s(k,6)-s(k,5)*s(k,10))+(s(k,10)-s(k,6))*x+(s (k,5)-s(k,9))*y);
L(3)=(1/(2*st))*((s(k,5)*s(k,8)-s(k,7)*s(k,6))+(s(k,6)-s(k,8))*x+(s(k ,7)-s(k,5))*y);
for i=1:1:3
for j=i:3
d(i,j)=int(int(((((diff(L(i),x))*(diff(L(j),x)))+((diff(L(i),y))*(dif f(L(j),y))))-((can^2)*L(i)*L(j))),x,0,1),y,0,1);
d(j,i)=d(i,j);
end
end
for i=1:1:3
for j=1:1:3
A(s(k,(i+1)),s(k,(j+1)))=A(s(k,(i+1)),s(k,(j+1)))+d(i,j);
end
end
for i=1:1:3
b(i)=int(int((L(i)),x,0,1),y,0,1);
B(s(k,(i+1)),1)=B(s(k,(i+1)),1)+b(i);
end
end
M=zeros((n+1)^2,n^2);
j=n^2;
for i=(n^2+n):-1:1
if ((mod(i,(n+1)))~=1)
M(:,j)=A(:,i);
j=j-1;
else continue
end
end
preanswer=M\B;
answer=zeros((n+1)^2,1);
j=1;
for i=1:1:(n^2+n)
if ((mod(i,(n+1)))~=1)
answer(i)=preanswer(j);
j=j+1;
else answer(i)=0;
end
end
Z=zeros((n+1),(n+1));
for i=1:1:(n+1)^2
s=fix(i/(n+1))+1;
r=mod(i,(n+1));
if(r==0)
r=n+1;
s=s-1;
else
end
Z(r,s)=answer(i);
end
[X,Y]=meshgrid(1:-h:0,0:h:1);
surf(X,Y,Z);
toc;
t=toc;
K=a ;
B=b';
U=inv(K)*B
for i=1:n
u(i,1)=4/(pi^2)*sin(pi*i/n/2);
end
u
e=U-u
六、实验结果:
程序中的变量can为问题中的k,为了方便比较,采用了画图的方式。

在n=10时,分别考察can=k=1,5,10,15,20时的情况。

2.can=k=5时
3.can=k=10时
5.can=k=20时
六、实验总结
本次实验第二题很难,通过查找资料和请教同学,学到了很多。

通过本次实验,我也进一步了解了线性元求边值问题的数值解的思想和方法,同时了解了matlab工具包中相关类库对求边值问题数值解的支持,更加熟悉了matlab的编程语法。

相关文档
最新文档