数值分析课程作业论文.docx
《数值分析课程作业论文.docx》由会员分享,可在线阅读,更多相关《数值分析课程作业论文.docx(19页珍藏版)》请在冰豆网上搜索。
数值分析课程作业论文
各专业全套优秀毕业设计图纸
青岛农业大学
本科生课程论文
题目:
数值分析课程设计论文
姓名:
学院:
专业:
信息与计算科学
班级:
学号:
指导教师:
完成时间:
2014年12月01日
二○一四年十二月一日
课程论文任务书
学生姓名张某某指导教师
论文题目数值分析课程设计论文
论文内容(需明确列出研究的问题):
研究运用拉格朗日和牛顿差
值、雅克比迭代法和高斯-塞德儿迭代法、用高斯消去法解方程组,
同时也讨论了多种方法的求解问题。
资料、数据、技术水平等方面的要求:
论文要符合一般学术论文的写作规范,具备学术性、科学性和一定的创造性。
文字要流畅、语言要准确、论点要清楚、论据要准确、论证要完整、严密,有独立的观点和见解。
内容要理论联系实际,计算数据要求准确,涉及到他人的观点、统计数据或计算公式等要标明出处,结论要写的概括简短。
参考文献的书写按论文中引用的先后顺序连续编码。
发出任务书日期2014.11.28完成论文(设计)日期2014.12.01
学科组或教研室意见(签字)
院、系(系)主任意见(签字)
目录
摘要……………………………………………………………………Ⅰ
前言……………………………………………………………………1
一拉格朗日插值和牛顿插值的运用及其解法……………………3
1.1理论知识、设计思路、算法步骤………………………………4
1.2程序运行操作过程与输出结果…………………………………4
二、高斯(Gauss)消去法…………………………………………7
2.1理论知识、设计思路、算法步骤………………………………8
2.2程序运行操作过程与输出结果…………………………………9
三、雅可比迭代法和高斯-塞德尔迭代法…………………………10
3.1理论知识、设计思路、算法步骤………………………………11
3.2程序运行操作过程与输出结果………………………………….11
四、在课程设计中的心得体会………………………………………17
五、课程设计自我评价………………………………………………17
参考文献………………………………………………………………18
数值分析课程设计论文
×××专业×××
指导教师×××
【摘要】本文主要介绍了数值分析中的拉格朗日插值、牛顿插值及其均差的运用和计算,还有雅克比迭代法和高斯-塞德儿迭代法用法及解题的方法。
同时运用MATLAB软件进行数学计算结果,把单纯的数学问题实际化和具体化,加强对于MATLAB的应用,增加对于该软件的理解和熟练。
还介绍了数值分析的理论及实用知识,通过例题详细地讲述了如何利用MATLAB软件实现各种数值算法,以便读者实际动手实现算法及观察不同数值算法的实际计算效果。
【关键词】高斯-塞德儿迭代法雅克比迭代法拉格朗日插值牛顿插值
前言
本论文是主要是部分课题的解答及分析,根据题目要求对论文进行了解答分析同时介绍了少部分知识和MATLAB的操作用法。
主要如下:
(1)在内容上严格按照要求,一步步仔细分析解答,同时配有图片证明,认真分析理解拉格朗日插值、牛顿插值的方法运用。
还有收敛性的分析,同时以例题进行验证和解答,让大家可以清晰简单的理解。
(2)在格式上每个例题都是认真分析,每个题后都有课后的见解和对题目的理解,有助于读者加深对基本内容的理解。
本论文因是本人的初级论文,所以有些疏漏,希望使用本论文的老师和同学对本书存在的问题给予批评指正。
作者
2014年12月
一、拉格朗日插值和牛顿插值的运用及其解法
根据下表所列的数据点求出四次拉格朗日插值多项式及牛顿插值多项式,并计算当x=2.0时的
值。
0.2
0.4
0.6
0.8
1.0
0.98
0.92
0.81
0.64
0.38
(一)理论知识
插值法是一种古老的数学方法,来自与生产实践。
但是具体的插值理论都是在十七世纪微积分产生以后才逐步发展的,拉格朗日插值、牛顿插值都是当时重要的成果在这里先详细介绍拉格朗日插值随后介绍牛顿插值。
拉格朗日插值[1]一般地,若已知y=f(x)在互不相同n+1个点x0,x1,x2...,xn处的函数值y0,y1,y2...,yn(即该函数过(x0,y0)(x1,y1)(x2,y2)...(xn,yn)这n个点),则可以考虑构造一个过这n+1个点的、次数不超过n的多项式y=Pn(x),使其满足:
Pn(xk)=yk,k=0,1,2,...,n(*)
要估计任一点ξ,ξ≠xi,i=0,1,2,...,n,则可以用Pn(ξ)的值作为准确值f(ξ)的近似值,此方法叫做“插值法”。
称式(*)为插值条件(准则),含xi(i=0,1,...,n)的最小区间[a,b](a=min{x0,x1,...,xn},b=max{x0,x1,...,xn})
(二)程序清单
拉格朗日插值
functionf=Lagrange(x,y,x0)
%求已知数据点的拉格朗日插值多项式
%已知数据点的x坐标向量:
x
%已知数据点的y坐标向量:
y
%插值的x坐标:
x0
%求得的拉格朗日插值多项式在x0处的插值:
f
symst;%定义符号变量
x=[0.20.40.60.81];y=[0.980.920.810.640.38];
if(length(x)==length(y))
n=length(x);
else
disp('x和y的维数不相等!
');
return;
end%检验错误
f=0.0;
for(i=1:
n)
l=y(i);
for(j=1:
i-1)
l=l*(t-x(j))/(x(i)-x(j));
end;
for(j=i+1:
n)
l=l*(t-x(j))/(x(i)-x(j));%计算拉格朗日基函数
end;
f=f+l;%计算拉格朗日插值函数
simplify(f);%化简
if(i==n)
if(nargin==3)%nargin是用来判断输入变量个数的函数
f=subs(f,'t',x0);%计算插值点的函数值,把xo赋给t带入f中计算,结果赋给f
else
f=collect(f);%将插值多项式展开
f=vpa(f,6);%将插值多项式的系数化成6位精度的小数
end
end
end、
牛顿插值[2]
functionf=Newton(x,y,x0)
symst;
x=[0.20.40.60.81];y=[0.980.920.810.640.38];
if(length(x)==length(y))
n=length(x);
c(1:
n)=0.0;
else
disp('x和y的维数不相等!
');
return;
end
f=y
(1);
y1=0;
l=1;
for(i=1:
n-1)
for(j=i+1:
n)
y1(j)=(y(j)-y(i))/(x(j)-x(i));
end
c(i)=y1(i+1);
l=l*(t-x(i));
f=f+c(i)*l;
simplify(f);
y=y1;
if(i==n-1)
if(nargin==3)
f=subs(f,'t',x0);
else
f=collect(f);%将插值多项式展开
f=vpa(f,6);
end
end
end
(三)程序运行操作过程与输出结果
在命令窗口输入
x=[0.20.40.60.81];y=[0.980.920.810.640.38];x0=2.0;
Lagrange(x,y,x0)
回车
ans=
-4.7200
在命令窗口输入
x=[0.20.40.60.81];y=[0.980.920.810.640.38];x0=2.0;
Newton(x,y,x0)
回车
ans=
-4.7200
以下是截图和在MATLAB中的解法答案
(四)对计算过程与结果的分析
运算拉格朗日插值时,有部分函数和用法需要熟练掌握和运用,同时详细分析题目,合理的分析,将自己的写成的程序输入到MATLAB中进行运行。
在MATLAB中,当没有你需要的函数或者程序时,需要构造M文件,重新确定自己需要的函数和程序,在进行下面的计算。
若MATLAB中没有你需要的函数和自己构造的M文件,那么将无法进行题目的解答。
同时拉格朗日插值和牛顿插值的原理需要牢记并且能熟练运用。
拉格朗日插值法在求每个基本多项式的时候要用到所有那些结点,因此如果需要再多加进去一个结点的话,需要重新求出基本多项式才可,而这需要大量的工程,而拉格朗日法插值是通过求各阶差商,递推得到的一个
二、高斯(Gauss)消去法
.用列主元Gauss消去法解方程组
(一)理论知识
定理:
当一个方阵A的1-(n-1)阶顺序主子式都不为0时,A存在唯一的doolittle(杜利特尔)分解。
对于满足条件的这个方阵,采用直接三角分解法可以得到这个唯一的L、U矩阵。
但事实上,matlab的lu函数并不是采用直接三角分解法,因为直接三角分解法存在着引入很大舍入误差的可能(直接分解法过程中,当对角元为零或很小时)。
matlab的lu函数采用的是列主元三角分解法,又称为PLU分解,实现LU=PA。
该分解法要求的前提条件是A为非奇异矩阵。
(二)程序清单
列主元Gauss消去法MATLAB程序如下:
%magauss2.m
functionx=magauss2(A,b,flag)
%用途:
列主元Gauss消去法解线性方程组Ax=b
%格式:
x=magauss(A,b,flag),A为系数矩阵,b为右端项,若flag=0,则不显示中间过程,否则显示中间过程,默认为0,x为解向量
ifnargin<3,flag=0;end
n=length(b);
fork=1:
(n-1)%选主元
[ap,p]=max(abs(A(k:
n,k)));
p=p+k-1;
ifp>k
t=A(k,:
);A(k,:
)=A(p,:
);A(p,:
)=t;
t=b(k);b(k)=b(p);b(p)=t;
end
%消元
m=A(k+1:
n,k)/A(k,k);
A(k+1:
n,k+1:
n)=A(k+1:
n,k+1:
n)-m*A(k,k+1:
n);
b(k+1:
n)=b(k+1:
n)-m*b(k);A(k+1:
n,k)=zeros(n-k,1);
ifflag~=0,Ab=[A,b],end
end
%回代
x=zeros(n,1);
x(n)=b(n)/A(n,n);
fork=n-1:
-1:
1
x(k)=(b(k)-A(k,k+1:
n)*x(k+1:
n))/A(k,k);
end
(三)操作过程及运行结果
在MATLAB命令窗口执行
b=[31-7];A=[223;477;-245];
[n,n]=size(A);
x=zeros(n,1);
Aug=[A,b'];%增广矩阵
fork=1:
n-1
[piv,r]=max(abs(Aug(k:
n,k)));%找列主元所在子矩阵的行r
r=r+k-1;%列主元所在大矩阵的行
ifr>k
temp=Aug(k,:
);
Aug(k,:
)=Aug(r,:
);
Aug(r,:
)=temp;
end
ifAug(k,k)==0,error('对角元出现0'),end
%把增广矩阵消元成为上三角
forp=k+1:
n
Aug(p,:
)=Aug(p,:
)-Aug(k,:
)*Aug(p,k)/Aug(k,k);
end
end
%解上三角方程组
A=Aug(:
1:
n);b=Aug(:
n+1);
x(n)=b(n)/A(n,n);
fork=n-1:
-1:
1
x(k)=b(k);
forp=n:
-1:
k+1
x(k)=x(k)-A(k,p)*x(p);
end
x(k)=x(k)/A(k,k);
end
x
x=
2
-2
1
(四)对计算过程与结果的分析
该题运用高斯消去法及消去法和矩阵三角分解之间的关系,用消去法解线性方程组的基本思想是使用逐次消去未知数的方法把原线性方程组化为与其等价的三角形线性方程组,而求解三角形线性方程可用回带的方法求解。
通过直接求解及利用高斯消去法求解线性方程组可以看出高斯消去法的三角分解法求解一般来说列主元法就能确保算法的稳定,所谓算法的稳定是指在运算过程中计算误差(对消去法这种直接法来说主要指由于计算机字长有限带来的舍入误差)能得到控制,列主元法更稳定的算法,但它的计算量大,列主元法在每做一次消元仅与同列的元素做比较,比较的次数与线性方程组的阶n是同阶的量。
三、雅可比迭代法和高斯-塞德尔迭代法
用雅可比迭代法和高斯-塞德尔迭代法求线性方程组的解,初始迭代值
,求近似解
使其满足
以下运用了两种方法进行求解
雅可比迭代法
(一)理论知识
考虑线性方程组Ax= b时,一般当A为低阶稠密矩阵时,用主元消去法解此方程组是有效方法。
但是,对于由工程技术中产生的大型稀疏矩阵方程组(A的阶数很高,但零元素较多,例如求某些偏微分方程数值解所产生的线性方程组),利用迭代法求解此方程组就是合适的,在计算机内存和运算两方面,迭代法通常都可利用A中有大量零元素的特点。
雅克比迭代法就是众多迭代法中比较早且较简单的一种。
(二)程序清单
i=1;
a=[0.9889,-0.0005,-0.0002,0.3372;-0.0046,0.9946,0.0077,0.5381;-0.0002,0.0092,0.9941,0.1936;-0.8002,0.5671,0.1849,0.3891];
d=diag(diag(a));
l=d-tril(a);
u=d-triu(a);
d0=inv(d);
b=[1;0;1;0];
x0=ones(4,1);
B=d0*(l+u);
f=d0*b;
x=B*x0+f;
whilenorm(x-x0,inf)>=1e-6
x0=x;
x=B*x0+f;
i=i+1;
end
x
i
(三)操作过程及运行结果
x=
0.3452
-1.0593
0.6357
1.9519
i=
20
(四)对计算过程与结果的分析
雅克比迭代法的优点明显,计算公式简单,每迭代一次只需计算一次矩阵和向量的乘法,且计算过程中原始矩阵A始终不变,比较容易并行计算。
然而这种迭代方式收敛速度较慢,而且占据的存储空间较大。
高斯-塞德尔(Gauss-Seidel)
(一)理论知识
高斯-塞德尔迭代法[3],设Ax=b,其中A为非奇异矩阵且
0(i=1,2,…,n),本算法用高斯-塞德尔迭代法解Ax=b,数组x(n)开始存放
,后存放
,
为最大迭代数。
1.
←0.0(i=1,2,…,n)
2.对于k=1,2,…,
对于i=1,2,…,n
←(
-
)/
(二)程序清单
i=1;
a=[0.9889-0.0005-0.00020.3372;-0.00460.99460.00770.5381;-0.00020.00920.99410.1936;-0.80020.56710.18490.3891];
d=diag(diag(a));
l=d-tril(a);
u=d-triu(a);
b=[1;0;1;0];
x0=ones(4,1);
B=inv(d-l)*u;
f=inv(d-l)*b;
x=B*x0+f;
whilenorm(x-x0,inf)>=1e-6
x0=x;
x=B*x0+f;
i=i+1;
end
x
i
(三).程序运行结果输出
x=
0.3452
-1.0593
0.6357
1.9519
i=
10
(四)对计算过程与结果的分析
一种非线性代数方程组的迭代解法。
最早用于解算电力系统潮流。
这种方法具有程序编制简单、占用内存少的优点,但算法收敛性差,计算时间长。
由此例可知,用高斯-塞德尔迭代法,雅可比迭代法解线性方程组均收敛,而高斯-塞德尔迭代法比雅可比迭代法收敛较快,但这个结论只当A满足一定条件才可以。
四、在课程设计中的心得体会
通过对Matlab软件的使用,了解到Matlab软件的强大,很容易解决数值分析中不好解决的内容,通过Matlab软件,知道了用列主元Gauss消去法解方程,雅可比迭代法,高斯-塞德尔迭代法求解还有根据表格所列的数据点求出四次拉格朗日插值多项式及牛顿插值多项式,知道了他们各自的优缺点,该如何更简单的利用他们,更快的求解问题。
在设计过程中,我遇到了不少的问题。
第一是M文件的问题,每次写好程序进行调试,总是不经意间忘掉重新构造函数创建M文件。
若没有创建M文件,并且系统软件没有你需要的函数或者公式,则你所需要的函数或者公式就无法进行计算工作,导致出现问题,无法得到正确的结果。
第二就是程序的编写是一个让人头痛的事情,当你不全部编写玩你就无法知道哪里出了错,当你录入程序时一字一键的输入也很枯燥,不过唯一的优点就是当你全部输进去的时候那种小成就感是任何人也不能代替你的。
第三关于后期的修改和操作,这一点是比较简单的,只要有耐心,仔细,那就一定可以完成。
五、课程设计自我评价
关于这篇的论文的质量我个人觉得是:
良
首先论文中的3个题我自己认真完成,不会的问老师问同学,不断地查找资料来完成题目,后期的制作及知识点的整理都是一个一个字打上去的没有任何的复制,同时查阅资料,书本,网络都成了我的查资料的途径。
其次是关于软件的MATLAB的用法,通过这次的论文设计,我可以熟练地掌握运用该软件。
MATLAB虽然在本书中没有详细介绍,但是却把最基本的数学算法讲解的十分明白,它是一个功能强大的数学软件,它不但可以解决数学中的数值计算问题,还可以解决符号演算问题,并且能够方便地绘出各种函数图形。
如:
MATLAB的变量名是用一个字母打头,后面最多跟62个字母或数字。
表达式由运算符、函数、变量名和数字组成的式子。
MATLAB语句由变量、表达式及MATLAB命令组成,用户输入的语句由MATLAB系统解释运行等很多简单实用的方法在这里就不一一介绍了。
参考文献
[1]李庆阳,王能超,易大义.数值分析.北京.清华大学出版社,2008年23~26
[2]李庆阳,王能超,易大义.数值分析.北京.清华大学出版社,2008年29~32
[3]李庆阳,王能超,易大义.数值分析.北京.清华大学出版社,2008年187~190
课程论文成绩评定表
学生姓名
专业班级
论文题目
指导教师评语及意见:
指导教师评阅成绩:
指导教师签字
年月日
评阅人评语及意见:
评阅人评阅成绩:
评阅人签字
年月日
总评成绩(以百分记):
年月日