(完整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 法观点出发导出的求解处置问题数值解的线性有限元法。

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

偏徽今方程毅值解





(一)实验一
一.上机题目:
用线性元求解下列边值问题的数值解:
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的编程语法。

相关文档
最新文档