《数值分析》课程实验指导书Word下载.docx
《《数值分析》课程实验指导书Word下载.docx》由会员分享,可在线阅读,更多相关《《数值分析》课程实验指导书Word下载.docx(14页珍藏版)》请在冰点文库上搜索。
信息与计算科学专业
七、主要参考书
《数值计算引论》白峰杉高等教育出版社2004.7第一版
《数值计算方法》林成森科学出版社1998
《数值分析》李庆扬王能超易大义清华大学出版社2001
《MATLAB6.0与科学计算》王沫然电子工业出版社2001
《C程序设计》谭浩强..北京:
清华大学出版社。
1991.7第一版
八、《数值计算方法》课程实验项目名称和实验目的、实验内容及实验步骤
实验1线性方程组求解的数值方法(6学时)
实验目的:
1、掌握解线性方程组的几种基本常用的直接法,并能比较它们各自的优缺点;
2、能熟练地对方阵A进行三角分解;
3、掌握用迭代法求解线性方程组的基本思想和计算步骤;
4、能熟练地写出Jacobi迭代法、Gauss-Seidel迭代法、SOR迭代法的迭代格式的分量形式,并能比较它们各自的特点及误差估计。
实验内容:
编写Gauss列主元消去法,LU分解,Jacobi,Gauss-Seidel,SOR迭代法的通用程序。
实验步骤:
1.进入C或其他高级语言开发环境;
2.根据实验内容和要求编写程序;
3.调试程序;
4.运行程序;
5.生成报告
实验2函数的数值逼近(4学时)
1、掌握多项式插值的概念、存在唯一性;
2、能熟练地应用几种常用方法,如Lagrange插值、Newton插值及三次样条插值;
3、掌握最小二乘原理,会求拟合函数及超定方程组的最小二乘解
编写Lagrange插值,三次样条插值,最小二乘拟合的通用程序
实验3数值积分(4学时)
实验目的:
1、熟练掌握复化梯形公式、复化Simpson公式及其截断误差的分析
2、了解Monte-Carlo方法;
编写复化梯形,复化Simpson,Monte-Carlo方法的通用程序
实验4常微分方程初值问题初步(2学时)
1、解常微分方程初值问题数值解法的一些基本概念;
2、掌握经典Runge-kutta方法,培养综合处理问题的能力
编写四阶经典Runge-kutta方法的通用程序。
实验5非线性方程(4学时)
1、掌握计算机上常用的一些求非线性方程的近似根的数值方法(二分法、牛顿法、割线法),并能比较各种方法的异同点;
2、正确应用所学方法求出给定的非线性方程满足一定精度要求的数值解。
编写二分法,牛顿法,割线法的通用程序,自己选择实例验证。
实验6矩阵特征值计算(4学时)
1.掌握求矩阵主特征值及相应特征向量的幂法;
2.掌握求一般矩阵全部特征值的QR方法。
编写幂法,QR方法的通用程序,自己选择实例验证。
九、样例
实验1
能熟练地写出Jacobi迭代法的迭代格式的分量形式
实验内容:
编写Jacobi迭代法的通用程序
Jacobi方法:
functionx=myJacobi(A,ep)
ifnargin<
2
ep=1.0e-5;
end
[n,m]=size(A);
x=zeros(n,1);
y=zeros(n,1);
k=0;
while1
fori=1:
1:
n
s=0.0;
forj=1:
ifj~=i
s=s+A(i,j)*x(j);
end
y(i)=(A(i,n+1)-s)/A(i,i);
xmx=0.0;
xmx=max(xmx,abs(x(i)-y(i)));
ifxmx<
=ep
x(i)=y(i);
return;
y(i)=0.0;
k=k+1;
ifk>
30
error('
failure'
);
实验2
能熟练地应用构造Lagrange插值
编写Lagrange插值法的通用程序
Lagrange插值:
function[X,Y]=myLagrange(A,B,C)
symsx
l=length(A);
m=length(B);
n=length(C);
ifl~=m
'
error'
fork=1:
m
L(i)=1;
M(i)=sym('
1'
L(i)=L(i)*(C(k)-A(j))/(A(i)-A(j));
M(i)=M(i)*(x-A(j))/(A(i)-A(j));
Y(k)=sum(B.*L);
X=simple(sum(B.*M));
end
实验3
熟练掌握Romberg公式及Romberg积分法
编写Romberg积分法的通用程序,自己选择实例验证
Romberg积分法:
function[s,n]=rbg1e(a,b,esp)
3,esp=1e-6;
s=10;
s0=0;
k=2;
t(1,1)=(b-a)*(f(a)+f(b))/2;
while(abs(s-s0)>
eps)
h=(b-a)/2^(k-1);
w=0;
if(h~=0)
forI=1:
(2^(k-1)-1)
w=w+f(a+I*h);
t(k,1)=h*(f(a)/2+f(b)/2);
(k-1+1)
t(i,1)=(4^(1-1)*t(I+1,I-1)-t(I,1-1))/(4^(1-1)-1);
s=t(1,k);
s0=(t(1,k-1));
k=k+1;
n=k;
elses=s0;
n=-k
functionf=f(x);
f=x.^3;
rbg(0,2)
ans=
4
实验4
掌握常微分方程初值问题的Euler方法
编写Euler方法的通用程序
Euler方法:
functionEulersingle
clc
%Eulersinglestepmethod:
y'
=f(t,y),a<
=t<
=b,y(a)=mu
prompt={'
a='
'
b='
N='
h='
mu='
};
dlg_title='
SetforEulersingle.'
;
num_lines=1;
def2={'
2'
0'
0.1'
inM1=inputdlg(prompt,dlg_title,num_lines,def2);
a=str2num(cell2mat(inM1
(1)));
b=str2num(cell2mat(inM1
(2)));
N=str2num(cell2mat(inM1(3)));
h=str2num(cell2mat(inM1(4)));
mu=str2num(cell2mat(inM1(5)));
symsty
%dy=f(t,y)seedy.m
ifN~=0
h=(b-a)/N;
else
N=(b-a)/h;
t=a;
y=mu;
[t,y]
fori=1:
N
y=y+h*dy(t,y);
t=a+i*h;
[t,y]
实验5
练习动手构造二分法的能力,加深理解二分的真谛。
编写二分法的通用程序
二分法:
functiony=erfen(fun,a,b,esp)
4
esp=1e-4;
iffeval(fun,a)*feval(fun,b)<
n=1;
c=(a+b)/2;
whilec>
esp
iffeval(fun,a)*feval(fun,c)<
b=c;
c=(a+b)/2;
elseiffeval(fun,c)*feval(fun,b)<
a=c;
y=c;
esp=10000;
n=n+1;
y=c;
elseiffeval(fun,a)==0
y=a;
elseiffeval(fun,b)==0
y=b;
elsedisp('
these,maynotbearootintheintercal.'
functiony=fc(x)
y=x^2-x-1
>
erfen(‘fc’,0,10,0.05)
n=
56
1.6180
实验6
1、掌握求矩阵主特征值及相应特征向量的幂法
编写幂法的通用程序
乘幂法:
#defineN3
#defineM10
floatfanshu3(floatf[N])
{inti;
floatf3=0.0;
for(i=0;
i<
N;
i++)
{if(f[i]<
0)f[i]=-f[i];
if(f3<
f[i])f3=f[i];
}
returnf3;
}
main()
{inti,j,k;
floata[N][N]={2,3,2,10,3,4,3,6,1};
floatv[N],w[N],u[N];
floatu0[N]={0,0,1};
floatb,t,tol=0.001,err;
k=1;
i++)u[i]=u0[i];
while(k<
=M)
{for(i=0;
{t=0.0;
for(j=0;
j<
j++)
t+=a[i][j]*u[j];
v[i]=t;
b=fanshu3(v);
if(b==0){printf("
eigenvecter"
u);
break;
else
i++){w[i]=v[i]/b;
u[i]=u[i]-w[i];
err=fanshu3(u);
i++)u[i]=w[i];
if(err<
tol){printf("
%f"
b);
printf("
u[i]);
break;
elsek++;
if(k>
M)printf("
Maximunnumberofiterationsexceeded"
}_