(完整word版)偏微分方程数值解实验报告
- 格式:docx
- 大小:212.50 KB
- 文档页数:9
偏微分方程数值解
偏微分方程是描述自然现象和工程问题中的物理量随空间和时
间变化的数学模型。
由于这些方程的解析解很难求解,数值解法成为求解偏微分方程的重要手段之一。
偏微分方程数值解的基本思路是将偏微分方程转化为差分方程,然后通过数值计算得到一组离散解。
常用的数值方法有有限差分法、有限元法、谱方法等。
有限差分法是偏微分方程数值解的最基本方法之一。
它将偏微分方程中的导数用差分近似替代,然后通过数值迭代得到离散解。
有限元法则是将连续的区域离散化成若干个小的单元,然后在每个单元内应用一些基函数,通过求解一个线性方程组得到离散解。
谱方法则是利用函数的三角函数展开式,通过对展开系数的求解得到离散解。
对于不同的偏微分方程,选择不同的数值方法可以得到不同的精度和计算效率。
因此,对于偏微分方程数值解的研究是数值计算领域中的一个重要研究方向。
- 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}误差-步长曲线如下:实验结论:通过对比欧拉方法和改进的欧拉方法的数值解与解析解的误差,可以发现改进的欧拉方法具有更高的精度和收敛性。
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. 有限元法:将偏微分方程转化为变分形式,选定单元的形状,对求解域作剖分,进而构造基函数或单元形状函数,形成有限元空间,将偏微分方程转化成了有限元方程,利用有效的有限元方程的解法,给出偏微分方程近似解的过程称为有限元法。
偏微分方程数值解法上机报告(一)一、实验题目:用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 '都变成不稳定的,此时存在混沌和奇怪吸引子。
偏徽今方程毅值解
上
机
实
验
报
(一)实验一
一.上机题目:
用线性元求解下列边值问题的数值解:
I, . 7T27T2. 7T小-I
-y H ----- y = —sin- x, 0<x< 1
J 4 丿2 2
y(0)=0, y'(l) = o
二、实验程序:
function S=bz
x=fzero(@zfun r1);
[t y]=ode45(@odefun r [0 1]z [0 x]);
S.t=t;
S.y=y;
plot(t,y)
xlabel(!x: z从0 •直到1‘)
ylabel (1 y1)
title (,线性元求解边Fi问题的数值解•)
function dy=odefun(x,y)
dy=[0 0]•;
dy (1) =y (2);
dy (2) = (pi A2) /4*y (1) - ( (pi A2) /2) *sin (x*pi/2);
function z=zfun(x);
[t y]=ode45(@odefun z [0 1]z [0 x]);
z=y(end)-0;
三、实验结果:
1.以步长h=0.05进行逐步运算,运行上面niatlab程序结果如下:
ans
t: [57x1 double: y: "57x2 doubled
2.在0<x<l区间上,随着x的不断变化,x, y Z间关系如下图所示:
(二)实验二上机题目:
求解Hehnlioltz方程的边值问题:
—Aw — k2u = 1,于Q = (0,1) *(0,1)
u=o,于= {x = 050< y <l}U{0<x<l9y = 1} r2 = {x = 0,0 < y < 1} U {0 < x < 1, y = 1}
—=0,于I"2 = {0 S x S1, y = 0} U {x = 1,0 S y S 1}
dn '
其中k=l,5,10,15,20
五、实验程序:
(采用冇限元方法,这里对[0,1]*[0,1]采用屮11的划分,n为偶数)
n=10;
a=zeros(n);f=zeros(n);b=zeros(l r n);U=zeros(n f1);u=zeros(n,1);
for i=2:n
a(i-l f i-l)=pi A2/(12*n)+n;
a(i-l f i)= pi A2/(24*n)-n;
a (i,i-1)= pi A2/(24*n)-n;
for j=l:n
if j==i-l
a(i, j)=a(i,i-1);
else if j==i
a (i-l f j-1)=2*a(i-1,i-1);
else if j==i+l
a(i, j)=a(i,i+1);
else
a(i, j)=0;
end
end
end
end
end
a(n,n)=pi A2/(12*n)+n;
for i=2:n
f (i-1/ i) =4/pi*cos ( (i-1) *pi/2/n) -8*n/ (pi A2) *sin (i*pi/2/n) +8*n/ (pi A2) *s in ((i-1)*pi/2/n); end
for i=l:n
f (i z i)=-4/pi*cos(i*pi/2/n)+8*n/(pi A2)*sin(i*pi/2/n)-8*n/(pi A2)*sin((i
-1)*pi/2/n);
end
%b(j)=f(i-1,j)+f(i, j)
for i=l:(n-1)
b(i)=f(i,i)+f (i r i+1);
end b (n) =f (n f n);
tic;
n=20;
can=20;
s=zeros (22,10);
h=l/n;
st=l/(2*n A2);
A=zeros( (n+1)A2# (n+1)A2);
syms x y;
for k=l:l:2*n A2
s(k,1)=k;
q=fix(k/(2*n));
r=mod(k r (2*n));
if (r-=0)
r=r;
else r=2*n;q=q-l;
end
if (r<=n)
s(k,2)=q*(n+1)+r;
s(k,3)=q*(n+l)+r+l;
s(k z4)=(q+l)*(n+l)+r+l;
s(k z 5) = (r-1)*h;
s(k,6)=q*h;
s(k z7)=r*h;
s(k z 8)=q*h;
s(k,9)=r*h;
s(k,10)=(q+l)*h;
else
s(k z 2)=q*(n+1)+r-n;
s(k,3)=(q+1)*(n+1)+r-n+l;
s(k z 4) = (q+1)*(n+1)+r-n;
s(k,5)=(r-n-l)*h;
s(k z 6)=q*h; s(k z7)=(r-n)*h; s(k,8)=(q+l)*h;
s(k,9)=(r-n-l)*h; s(k,10)=(q+l)*h;
end
end
d=zeros(3,3);
B=zeros((n+1)A2f1);
b=zeros (3,1);
for k=l:l:2*n A2
L(l) = (l/(2*st))*( (s(k/7)*s(k r10)-s(k/9)*s(k r8)) + (s(k r8)-s(k f 10))*x+(s
(k f9)-s(k r7))*y);
L(2) = (l/(2*st) )*( (s(k/9)*s(k,6)-s(k z5)*s(k/10)) + (s(k r10)-s(k/6) )*x+(s (k,5)-s(k,9))*y);
L(3) = (l/(2*st))*( (s(k/5)*s(k z8)-s(k z7)*s(k/6) ) + (s (k, 6)-s (k, 8) ) *x+(s (k ,7)-s(k,5))*y);
for i=l:l:3
for j=i:3
d(i z j)=int(int(((((diff(L(i),x))*(diff(L(j),x)))+((diff(L(i),y))*(dif f (L(j) ,y) ) ) )-( (can A2) *L (i) *L (j ) ) ) , x, 0,1), y, 0,1);
d(j, i)=d(i, j);
end
end
for i=l:l:3
for j=l:l:3
A(s(k, (i+l)),s(k, (j+1) ) ) =A(s (:c z (i+l)),s(k z (j+ 1) ) )+d (i, j ); end end
for i=l:l:3
b (i) =int (int ( (L(i) ) ,x,0z 1) ,y,0,l);
B(s(k,(i+1))r l)=B(s(k r (i+1)),l)+b(i);
end
end
M=zeros((n+1)A2r n A2);
j=n A2;
for i=(n A2+n):-l:l
if ( (mod (i, (n+1)) ) -^=1)
M(: r j ) =A (: r i);
else continue
end
end
preanswer=M\B;
answer=zeros((n+1)A2Z1);
j=l;
for i=l:l:(n A2+n)
if ((mod(i f (n+1)))~=1)
answer(i)=preanswer(j);
j=j+l;
else answer(i)=0;
end
end
Z=zeros((n+1), (n+1)); for i=l:l:(n+1)A2 s=fix(i/(n+l))+l; r=mod(i,(n+1));
if(r==0)
r=n+l;
s=s-l;
else
end
Z (r r s)=answer(i);
end
[X f Y]=meshgrid(l:-h:0,0:h:l); surf(X r Y r Z);
toe;
t=toc;
K=a ;
B=b» ;
U=inv(K)*B
for i=l:n u(i r l)=4/(pi A2)*sin(pi*i/n/2);
end
u
e=U-u
六、实验结果:
程序中的变量can为问题中的k,为了方便比较,采用了画图的方式。
在n=10时,分别考察can=k=l,5,10,15,20时的情况。
l.can=k=l 时
2.can=k=5 时
3.can=k=10 时
4.can=k=15 时
5.can=k=20 时
六.实验总结
本次实验第二题很难,通过查找资料和请教同学,学到了很多。
通过本次实验,我也进一步了解了线性元求边值问题的数值解的思想和方法,同时了解了matlab工具包中相关类库对求边值问题数值解的支持,更加熟悉了matlab的编程语法。