偏微分方程实验模板.docx
《偏微分方程实验模板.docx》由会员分享,可在线阅读,更多相关《偏微分方程实验模板.docx(25页珍藏版)》请在冰豆网上搜索。
偏微分方程实验模板
实验报告
课程名称:
偏微分方程数值解
院系:
数学科学系
专业班级:
信计1101
学号:
1131120140
学生姓名:
张军
指导教师:
沈林
开课时间:
2013至2014学年第二学期
一、学生撰写要求
按照实验课程培养方案的要求,每门实验课程中的每一个实验项目完成后,每位参加实验的学生均须在实验教师规定的时间内独立完成一份实验报告,不得抄袭,不得缺交。
学生撰写实验报告时应严格按照本实验报告规定的内容和要求填写。
字迹工整,文字简练,数据齐全,图表规范,计算正确,分析充分、具体、定量。
二、教师评阅与装订要求
1.实验报告批改要深入细致,批改过程中要发现和纠正学生实验报告中的问题,给出评语和实验报告成绩,签名并注明批改日期。
实验报告批改完成后,应采用适当的形式将学生实验报告中存在的问题及时反馈给学生。
2.实验报告成绩用百分制评定,并给出成绩评定的依据或评分标准(附于实验报告成绩登记表后)。
对迟交实验报告的学生要酌情扣分,对缺交和抄袭实验报告的学生应及时批评教育,并对该次实验报告的分数以零分处理。
对单独设课的实验课程,如学生抄袭或缺交实验报告达该课程全学期实验报告总次数三分之一以上,不得同意其参加本课程的考核。
3.各实验项目的实验报告成绩登记在实验报告成绩登记表中。
本学期实验项目全部完成后,给定实验报告综合成绩。
4.实验报告综合成绩应按课程教学大纲规定比例(一般为10-15%)计入实验课总评成绩;实验总评成绩原则上应包括考勤、实验报告、考核(操作、理论)等多方面成绩;
5.实验教师每学期负责对拟存档的学生实验报告按课程、学生收齐并装订,按如下顺序装订成册:
实验报告封面、实验报告成绩登记表、实验报告成绩评定依据、实验报告(按教学进度表规定的实验项目顺序排序)。
装订时统一靠左侧按“两钉三等分”原则装订。
实验名称
椭圆型方程的差分格式
实验时间
2014年4月3日
2014年4月17日
学生姓名
张军
实验地点
9#405数学实验室
1、实验所用软件
WIN7操作系统、Matlab
2、实验目的
用线性元求下列问题的数值解:
3、实验内容
首先把边值问题化成等价的变分形式:
,对任意
其中
4、实验方法、步骤
functionu=peYF(a,dt,n,minx,maxx,M)
formatlong;
h=(maxx-minx)/(n-1);
ifa>0
forj=1:
(n+M)
u0(j)=Iniu(minx+(j-M-1)*h);
end
else
forj=1:
(n+M)
u0(j)=Iniu(minx+(J-1)*h);
end
end
Undefinedfunctionorvariable'a'.
u1=u0;
Undefinedfunctionorvariable'u0'.
fork=1:
M
ifa>0
fori=(k+1):
n+M
u1(i)=-dt*a*(u0(i)-u0(i-1))/h+u0(i);
end
else
fori=1:
n+M-k
u1(i)=-dt*a*(u0(i+1)-u0(i))/h+u0(i);
end
end
u0=u1
end
Undefinedfunctionorvariable'M'.
ifa>0
u=u1(1:
n);
end
Undefinedfunctionorvariable'a'.
formatlong;
5、实验数据记录与分析
6、实验结论
通过这次上机,我学会了怎样用线性方程求数值解的问题,把边值问题化成等价的变分形式。
但是操作的过程仍不熟练,需要以后多加练习。
指导教师评语和成绩评定
指导教师签字:
年月日
实验名称
插值算法
实验时间
2012年9月27日
学生姓名
曹信信
实验地点
9#405数学实验室
1、实验所用软件
WINxp操作系统、Matlab
2、实验目的
设计一个程序,通过键盘指令输入参数,可以实现Taylor插值方法、线性插值方法、抛物插值方法以及一般情形的Lagrange插值方法的程序。
使学生掌握插值算法的基本理论,并提高学生在程序设计中发现问题、分析问题和解决问题的能力。
3、实验内容
1、确定方程x3-x+4=0的实根的分布情况。
2、已知函数值x={012345678910},y={00.791.532.192.713.033.272.893.063.193.29}和边界条件s'(0)=0.8s'(10)=0.2,求三次样条插值函数的图形.
3、用牛顿迭代法求解方程组:
x1^2+x2^2=4;x1^2-x2^2=1。
4、已知:
sin0.32=0.314567,sin0.34=0.333487,sin0.36=0.352274,用抛物插值计算sin0.3367。
1、在MATLAB工作窗口输入x=-4:
0.1:
4;y=x.^3-x+4;plot(x,y)
grid,gtext('y=x^3-x+4')
2、输入xx=1:
0.1:
10;yy=spline(x,y,xx);
>>plot(x,y)
3、输入x0=1;y0=1;n=10;tol=1e-6;
x
(1)=x0;y
(1)=y0;i=1;u=[11];k
(1)=1;
while(norm(u)>tol*norm([x(i),y(i)]'))
A=2*[x(i),y(i);x(i),-y(i)];b=[4-x(i)^2-y(i)^2,1-x(i)^2+y(i)^2]';
u=A\b;
x(i+1)=x(i)+u
(1);y(i+1)=y(i)+u
(2);
i=i+1;k(i)=i;
if(i>n)error('nisfull');
end
end
[k',x',y']
4、x=[0.32;0.34;0.36];
y=[0.314567;0.333487;0.352274];
a=0.3367;
a=polyfit(x,y,2)
t=0.3367;
s=[t^2;t;1]
ans
5、实验数据记录与分析
1、
2、
3、
4、
6、实验结论
通过本次试验操作,我进一步了解了matlab的上机操作,通过键盘指令输入参数,实现Taylor插值方法、线性插值方法、抛物插值方法以及一般情形的Lagrange插值方法的程序。
在做题的过程中,不免会遇到很多问题,不过经过努力和同学们一起探讨,程序一步步都成功运行了。
课后我会多加练习,争取更熟练的掌握插值算法。
指导教师评语和成绩评定
指导教师签字:
年月日
实验名称
数值积分与数值微分
实验时间
2012年10月25日
学生姓名
曹信信
实验地点
9#405数学实验室
1、实验所用软件
WIN7操作系统、Matlab
2、实验目的
1.掌握复合梯形法求积分、复合辛普生法方法求积分公式的程序设计
2.掌握Romberg积分的用法。
3.掌握高斯公式的程序设计
3、实验内容
1)由
,
所围成的平面区域,用复合梯形法求平面区域的面积。
2)估计用辛普森公式计算定积分
的值I和递归次数n。
3)用两点高斯–勒让德积分公式计算
d
,并将计算结果与精确值进行比较,求出绝对误差。
4、实验方法、步骤
1)x=-3:
0.001:
3;F1=sin(x);F2=cos(x);
plot(x,F1,'r:
',x,F2,'b-'),axis([-1,pi/4+1,-1.5,1.5]),
xlabel('x'),ylabel('y'),
title('y=sinx,y=cosx和x=-1及x=0.5所围成的平面区域的图形')
symsx
f1=cos(x)-sin(x);f2=-f1;S1=int(f1,x,-1,pi/4);
S2=int(f2,x,pi/4,0.5);S=S1+S2,Sjg=double(S)
2)symsx
L=inline('exp(sin(x))');
[QS,FCNTS]=quad(L,-pi/4,pi/4,1.e-4,2)
3)x1=-1/sqrt(3);x2=1/sqrt(3);y1=2/(3+x1);y2=2/(3+x2);
G=y1+y2
symsx
f=int(2/(3+x),x,-1,1);
Fjg=double(fi)
Gjq=double(abs(fi-G2))
5、实验数据记录与分析
1)S=sin
(1)-cos(1/2)-cos
(1)-sin(1/2)+2*2^(1/2)
Sjg=1.7726
2)[QS,FCNTS]=quad(L,-pi/4,pi/4,1.e-4,2)
9-0.78539816344.26596866e-010.2506021480
11-0.35880129707.17602594e-010.7327015293
130.35880129704.26596866e-010.7339475547
QS=1.7173
FCNTS=13
3)G=1.3846Fjg=0.4055Gjq=5.9703e-05
6、实验结论
本节实验我学会了利用复合梯形法、复合辛普生法方法求积分,在学习的时候简单地进行了程序设计,锻炼了求积分的快捷方法,也学习了更深刻的定理公式。
此外,我们还学习了Romberg积分的用法,练习了高斯公式的程序设计,在以前的基础上进步许多,但是问题也暴露不少,例如一些函数的用法,特殊函数的名称等,在这些方面需要进一步提升。
指导教师评语和成绩评定
指导教师签字:
年月日
实验名称
常微分方程差分方法
实验时间
2012年11月8日
学生姓名
曹信信
实验地点
9#405数学实验室
1、实验所用软件
WIN7操作系统、Matlab
2、实验目的
1.编写程序实现Euler求解方法及改进Euler求解方法
2.掌握龙格-库塔方法的用法
3.掌握方程组和高阶方程的程序实现
3、实验内容
1)用向后欧拉公式求解区间
上的初值问题
,
2)判断下列线性方程组解的情况,并求出该解。
4、实验方法、步骤
1)编写程序
function[X,Y,n,P]=Heuler1(funfcn,x0,b,y0,h,tol)
n=fix((b-x0)/h);X=zeros(n+1,1);Y=zeros(n+1,1);
k=1;X(k)=x0;Y(k,:
)=y0;Y1(k,:
)=y0;
clc,x0,h,y0
fori=2:
n+1
X(i)=x0+h;Y(i,:
)=y0+h*feval(funfcn,x0,y0);
Y1(i,:
)=y0+h*feval(funfcn,X(i),Y(i,:
));
Wu=abs(Y1(i,:
)-Y(i,:
));
whileWu>tol
p=Y1(i,:
);
Y1(i,:
)=y0+h*feval(funfcn,X(i),p);
Y(i,:
)=p;
end
x0=x0+h;y0=Y1(i,:
);
Y(i,:
)=y0;plot(X,Y,'ro')
gridon
xlabel('自变量X'),ylabel('因变量Y')
title('用向后欧拉公式计算dy/dx=f(x,y),y(x0)=y0在[x0,b]上的数值解')
end
X=X(1:
n+1);Y=Y(1:
n+1,:
);n=1:
n+1;P=[n',X,Y]
输入
>>S1=dsolve('Dy=8*x-3*y-7','y(0)=1','x')
>>x0=0;y0=1;
b=2;tol=1.e-1;
subplot(2,1,1)
h1=0.01;
[X1,Y1,n,P1]=Heuler1(@funfcn,x0,b,y0,h1,tol)
holdon
S2=8/3*X1-29/9+38/9*exp(-3*X1),plot(X1,S2,'b-')
legend('h=0.01用向后欧拉公式计算dy/dx=8x-3y-7,y(0)=1在[0,2]上的数值解')
holdoff
2)编写程序
function[RA,RB,n]=jiepb(A,b)
B=[Ab];n=length(b);RA=rank(A);
RB=rank(B);cha=RB-RA;
ifcha>0,
disp('RA~=RB,方程组无解')
return
end
ifRA==RB
ifRA==n
disp('RA=RB=n,方程组有唯一解')
else
disp('RA=RBend
end
输入
A=[25-15;312-7;41-36;3-24-7];
b=[0;2;0;1];
[RA,RB,n]=jiepb(A,b)
X=A\b
5、实验数据记录与分析
1)x0=
0
h=
.010*********
y0=
1
2)RA=RB=n,方程组有唯一解
RA=4
RB=4
n=4
X=0.1647
0.1511
-0.2733
-0.2716
6、实验结论
本次实验重点学习了求解常微分方程的差分方法,在求解过程中用到了Euler
求解方法及改进的Euler求解方法,并且可以用两个方法求解比较不同之处,看到改进后的明显效果。
同时,我们还学习了龙格-库塔方法的用法及解方程组和高阶方程的程序实现,通过编写、运行程序自己动手操作熟练掌握matlab解方程的应用。
指导教师评语和成绩评定
指导教师签字:
年月日
实验名称
方程求根的迭代法
实验时间
2012年11月29日
学生姓名
曹信信
实验地点
9#405数学实验室
1、实验所用软件
WIN7操作系统、Matlab
2、实验目的
1.掌握二分法与牛顿法的基本原理及应用
2.掌握牛顿法、弦截法的程序设计并用具体例子加以实现
3、实验内容
1)确定方程
的实根的分布情况,画出函数在开区间(-4,4)内的分布情况。
2)求x5-2x+3=0在0.5附近的根,精确到4位小数.
4、实验方法、步骤
1)x=-4:
0.1:
4;
y=x.^2-2*x;plot(x,y)
grid,gtext('y=x^2-2x');
2)编写程序function[k,piancha,xdpiancha,xk,yk]=diedai2(x0,tol,ddmax)
x
(1)=x0;
fori=1:
ddmax
x(i+1)=fun(x(i));piancha=abs(x(i+1)-x(i));
xdpiancha=piancha/(abs(x(i+1))+eps);i=i+1;
xk=x(i);yk=fun(x(i));[(i-1)pianchaxdpianchaxkyk]
if(pianchak=i-1;xk=x(i);
return;
end
end
ifi>ddmax
disp('迭代次数超过给定的最大值ddmax')
k=i-1;xk=x(i);yk=fun(x(i));
[(i-1)pianchaxdpianchaxkyk];
return;
end
P=[(i-1),piancha,xdpiancha,xk,yk]';
输入
[k,piancha,xdpiancha,xk,yk]=diedai2(0.5,1e-4,15)
5、实验数据记录与分析
1)
2)ans=
1.00000.75000.60001.25004.0625
ans=
2.00002.81250.69234.062524.6289
ans=
3.000020.56640.835124.6289655.8408
ans=
1.0e+005*
0.00000.00630.00000.00664.3144
ans=
1.0e+011*
0.00000.00000.00000.00001.8614
ans=
1.0e+022*
0.00000.00000.00000.00003.4648
ans=
1.0e+045*
0.00000.00000.00000.00001.2005
ans=
1.0e+090*
0.00000.00000.00000.00001.4412
ans=
1.0e+180*
0.00000.00000.00000.00002.0771
ans=
1.0e+180*
0.00002.07710.00002.0771Inf
ans=
11InfNaNInfInf
ans=
12NaNNaNInfInf
ans=
13NaNNaNInfInf
ans=
14NaNNaNInfInf
ans=
15NaNNaNInfInf
迭代次数超过给定的最大值ddmax
k=
15
piancha=
NaN
xdpiancha=
NaN
xk=
Inf
yk=
Inf
6、实验结论
本次实验我先学习了二分法与牛顿法的基本原理,了解其原理后,应用此原理解决微分方程,并且大大提高了其精度;学习了牛顿法、弦截法的程序设计后应用到实际例子中去,在做题中锻炼应用牛顿法的能力,加强了对该公式的熟练运用,记忆起来更为方便。
由于课后练习试验次数不多,做起来有点生疏,需要多加练习,熟练掌握。
指导教师评语和成绩评定
指导教师签字:
年月日
实验名称
线性方程组的迭代法
实验时间
2012年12月13日
学生姓名
曹信信
实验地点
9#405数学实验室
1、实验所用软件
WIN7操作系统、Matlab
2、实验目的
设计程序实现雅可比迭代法,高斯-赛德尔迭代法等算法。
掌握方程求根的基本理论。
并用实例在计算机上计算。
3、实验内容
(1)用判别雅可比迭代收敛性的MATLAB主程序,判别由下列方程组的雅可比迭代产生的序列是否收敛?
(2)用高斯-塞德尔迭代定义的MATLAB主程序解下列线性方程组,取初始值
,要求当
时,迭代终止。
4、实验方法、步骤
(1)A=[9-1-2;-110-2;-1-11.5];a=jspb(A)
(2)编写程序functionX=gsdddy(A,b,X0,P,wucha,max1)
D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);dD=det(D);
ifdD==0
disp('对角矩阵D奇异,此方程组无解.')
else
disp('对角矩阵D非奇异,方程组有解.')
iD=inv(D-L);B2=iD*U;f2=iD*b;jX=A\b;X=X0;
[nm]=size(A);
fork=1:
max1
X1=B2*X+f2;djwcX=norm(X1-X,P);
xdwcX=djwcX/(norm(X,P)+eps);
if(djwcXreturn
else
k,X1',k=k+1;X=X1;
end
end
if(djwcXdisp('高斯-塞德尔迭代收敛,分解矩阵D,U,L和方程组的精确解jX和近似解X如下:
')
else
disp('高斯-塞德尔迭代的结果没有达到给定精度,且迭代次数已超过max1,精确解jX和迭代向量X如下:
')
X=X';jX=jX'
end
end
X=X';D,U,L,jX=jX'
运行结果
A=[813;692;145];b=[6;8;4];
X0=[000]';
X=gsdddy(A,b,X0,inf,0.1,10)
5、实验数据记录与分析
(1)系数矩阵A不严格对角占优,此雅可比迭代不一定收敛
a=
-7.0000-8.00002.5000
(2)对角矩阵D非奇异,方程组有解.
k=
1
ans=
0.75000.38890.3389
k=
2
ans=
0.57430.43070.3406
X=
0.5743
0.4307
0.3406
6、实验结论
学习雅可比迭代法和高斯-赛德尔迭代法求根公式后,我们主要运用这两种求根公式对方程组进行简便求根。
掌握了方程求根的基本理论并用实例在计算机上设计程序实现课本上的求根办法,通过程序的设计实现了更精确的求解,虽然没有达到精确解,不过精确度比以往有很大的提高。
指导教师评语和成绩评定
指导教师签字:
年月日
实验名称
线性方程组的直接法
实验时间
2012年12月20日
学生姓名
曹信信
实验地点
9#405数学实验室
1、实验所用软件
WIN7操作系统、Matlab
2、实验目的
1.熟悉Gauss列主元消去法,编出实用程序。
2.认识选主元技术的重要性。
4.编制程序,用Gauss列主元消去法求解线性方程组
。
5.编制程序,用平方根法求解线性方程组三角方程组
3、实验内容
(1)用高斯消元法和MATLAB程序求解下面的非齐次线性方程组,并且用逆矩阵解方程组的方法验证.
(2)用列主元消元法解线性方程组的MATLAB程序解方程组
4、实验方法、步骤
(1)编写程序function[RA,RB,n,X]=gaus(A,b)
B=[Ab];n=length(b);RA=rank(A);RB=rank(B);zhica=RB-RA;
ifzhica>0
disp('请注意:
因为RA~=RB,所以此方程组无解.')
end
ifRA==RB
ifRA==n
disp('请注意:
因为RA=RB=n,所以此方程组有唯一解.')
X=zeros(n,1);C=zeros(1,n+1);
forp=1:
n-1
fork=p+1:
n
m=B(k,p)/B(p,p);B(k,p:
n+1)=B(k,p:
n+1)-m*B(p,p:
n+1);
end
end
b=B(1:
n,n+1);A=B(1:
n,1:
n);X(n)=b(n)/A(n,n);
forq=n-1:
-1:
1
X