数值计算课程设计报告(插值法)Word文件下载.docx
- 文档编号:6872965
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:26
- 大小:325.35KB
数值计算课程设计报告(插值法)Word文件下载.docx
《数值计算课程设计报告(插值法)Word文件下载.docx》由会员分享,可在线阅读,更多相关《数值计算课程设计报告(插值法)Word文件下载.docx(26页珍藏版)》请在冰点文库上搜索。
已知个数据节点:
构造一个(相对简单)函数(称为插值函数),通过全部结点即
(j=0,1,…n)再用计算插值,即
数学上插值方法非常多,这里介绍几种常用方法:
1·
插值函数
插值函数的基本思想:
将待求的次插值多项式写成另一种表达方,式再利用插值条件确定出插值基函由基函数条件,确定多项式系数,进而可得插值函数.
(1)已知,求满足条件的插值函数。
由题可知表示过两点的直线,这个问题是我们所熟悉的,它的解可表为下列对称式
此类一次插值称为线性插值,若令
(由此可得:
))
则有
这里的可以看作是满足条件的插值多项式,这两个特殊的插值多项式称作上述问题的插值基函数。
(2)求过三点的插值函数。
为了得到插值多项式先解决一个特殊的二次插值问题。
求作二次式,使满足(2-1)
这个问题是容易求解的,由式(2-1)的后两个条件知是的两个零点,
因而。
再用条件确定系数c.
结果得:
类似可以分别构造出满足条件的插值多项式;
其表达式分别为,
这样构造出的称作问题
(2)的插值基函数。
设取已知数据作为组合系数,将插值基函数组合得
验证可知,这样构造的满足已知条件,因而它就是问题
(2)的解。
(3)推广到一般:
已知函数在n+1个不同点上的函数值分别为
求一个次数不超过n的多项式,使其满足:
即个不同的点可以决定的一个次多项式。
过个不同的点分别决定个次插值基函数。
每个插值基多项式满足:
a.是次多项式;
b.,而在其它个点
由于故有因子:
因其已经是n次多项式,故而仅相差一个常数因子。
令:
由,可以定出,进而得到:
次拉格朗日型插值多项式
是个次插值基本多项式的线性组合,相应的组合系数是。
即:
从而是一个次数不超过n的多项式,且满足
2·
插值函数的构造
插值法的基本思想:
已知节点处的函数值或一元函数代数方程,将待求的n次插值多项式改写为具有承袭性的形式,然后根据插值条件或选取初值以求得待定系数,进而求得所要的插值函数。
实践中的许多问题归结为求一元代数方程的根,如果是线性函数,则它的求根较容易;
对非线性方程,只有不高于4次的代数方程有求根公式,经常需求出高于4次
的满足一定精度要求的近似解。
法的简述
设是的一个近似根,把在处泰勒展开
若取前两项来近似代替,则的近似线性方程
设0,设其根为,则的计算公式为
=-(k=0,1,2.....)
这即为牛顿法,上式为牛顿迭代公式,其迭代函数为
我们知道,牛顿法是解非线性方程最著名和最有效的方法之一,在单根附近它比一般的迭代格式有较快的收速度,但也要注意它也有缺点:
首先,它对迭代初值选取要求较严,初值选取不好,可能导致吧收敛;
其次,它每迭代一次要计算的值,这势必增加可计算量。
为回避该问题,常用一个固定的迭代若干步后再求。
这就是下面要讲的简化牛顿法的基本思想。
简化牛顿法和下山牛顿法
简化牛顿法的公式为
(3-1)
迭代函数
若。
即在根附近成立。
则迭代法(3-1)
局部收敛。
此法显然化简了计算量。
牛顿下山法
牛顿法的收敛依赖于初值的选取,若偏离较远,则牛顿法可能发散。
为防止迭代发散,我们对迭代过程在附加一项条件,即具有单调性:
(3-2)
保证函数值稳定下降,然后结合牛顿法加快收敛速度,即可达目的。
将牛顿法的计算结果
(3-3)
于前一步的近似值适当加权平均作为新的改进值
(3-4)
其中称()为下山因子,即为
(3-5)
称为牛顿下山法。
选择下山因子时,从开始逐次将减半进行试算。
直到满足条件(3-2)为止。
3·
插值法
已知函数在给定个互异的节点,...上的函数值和导数值,求一个次多项式满足插值条件
()=,.k=0,1,2...n
插值基本原理
通常如上条件的Hermite型插值是通过构造相应的插值基函数来完成的,为方便起见以n=1为例,说明传统的求解方法,设给定的,和相应的函数值,及微商值,构造插值函数。
由构造函数的办法可知:
对应于和点函数值的插值函数分别为及
而对应的和点导数值的插值基函数分别为和
,因此所要求的插值函数
(2-1)
由上可发现构造插值基函数比较复杂,尤其对具有高阶导数插值条件的情况,以下将基于newton插值方法提出构造上述条件的简单格式。
此时传统方法可视为这里的特例。
四、具体应用实例分析
1已知,用线性插值法求的近似值.
解:
Matlab中有直接进行线性插值计算的命令interp1,直接使用interp1命令即可.
>
x=[49];
y=[23];
f=interp1(x,y,7,'
linear'
)%选项使用线性插值
f=
2.6000
故插值计算结果为
2设,给出数据如下,用Lagrange插值法求的近似值.
0.4
0.5
0.7
0.8
-0.916291
-0.693147
-0.356675
-0.223144
求解过程描述如下:
formatlong;
%输入初始数据
x0=[0.40.50.70.8];
y0=[-0.916291-0.693147-0.356675-0.223144];
x=0.6;
%插值点
n=length(x0);
s=0;
%进入迭代计算过程
forj=0:
(n-1)
t=1;
fori=0:
ifi~=j
t=t*(x-x0(i+1))/(x0(j+1)-x0(i+1));
end
end
s=s+t*y0(j+1);
end
s%显示输出结果
formatshort;
程序运行结果如下:
s=
-0.509975500000000
因此利用插值的计算结果为.
3设有如下数据,利用插值法求的近似值.
0.40
0.55
0.65
0.80
0.90
1.05
0.41075
0.57815
0.69675
0.88811
1.02652
1.25382
求解程序如下
clc;
formatlong;
%显示15位
x0=[0.400.550.650.800.901.05];
%x的值
y0=[0.410750.578150.696750.888111.026521.25382];
%y的值
x=0.596;
n=max(size(x0));
y=y0
(1);
%迭代初始值
disp(y);
s=1;
dx=y0;
fori=1:
n-1%构造差商表
dx0=dx;
forj=1:
n-i
dx(j)=(dx0(j+1)-dx0(j))/(x0(i+j)-x0(j));
end
df=dx
(1);
s=s*(x-x0(i));
y=y+s*df;
%计算
disp(y);
运行上述程序结果如下:
0.410750000000000
0.629486000000000
0.632010480000000
0.631914405504000
0.631917508079616
0.631917499231745
因此插值结果为
4给出的数据见下表,用Hermite插值多项式求的近似值,并估计其误差.
0.50
0.70
2.50
2.00
1.43
1.25
解:
先建立实现插值的M文件函数,源程序如下:
functiony=hermite(x0,y0,dy,x)
%hermite.m
%Hermite插值计算
%x0为输入节点的向量;
y0为y的值向量,
%dy为相应节点一阶倒数的函数值的向量,x为所要求的插值节点.
m=length(x);
fork=1:
m
yy=0.0;
fori=1:
n
h=1.0;
a=0.0;
forj=1:
ifj~=i
h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;
a=1/(x0(i)-x0(j))+a;
end
end
yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-dy(i))+y0(i));
y(k)=yy;
在Matlab命令窗口中,进行以下步骤:
输入数据:
x0=[0.40.50.70.8]
x0=
0.400000.500000.700000.80000
y0=log(x0)
y0=
-0.916290731874155-0.693147180559945-0.356674943938732-0.223143551314210
dy=1./x0%一阶导数的值
dy=
2.5000000000000002.0000000000000001.4285714285714291.250000000000000
x=0.6%插值点
x=
0.600000000000000
H=hermite(x0,y0,dy,x)
H=
-0.510824121030042
由插值计算结果有,准确值为:
log(0.6)
ans=
-0.510825623765991
可见精度是比较高的.
5给出的数据见下表,用三次Hermite插值多项式求的近似值,精确到6位小数,并估计其误差.(精确值.)
0.500000
0.707107
0.866025
对于分段三次插值,Matlab里已有现成命令可用,这个命令就是interp1(),只要在选项中选用'
chip'
(或cubic)即可,它是用分段三次多项式插值曲线依次连接相邻样本点的意思,整体上具有函数及其一阶导数连续性.我们先用这个命令来解本题.
输入数据:
x0=[pi/6,pi/4,pi/3]
0.5235987755982990.7853981633974481.047197551196598
y0=sin(x0)
0.5000000000000000.7071067811865470.866025403784439
x=2*pi/9
0.698131700797732
y=interp1(x0,y0,x,'
pchip'
)
y=
0.643895359999574
y1=interp1(x0,y0,x,'
cubic'
y1=
可见集成命令的插值结果为:
精确值为:
sin(x)
0.642787609686539
由于题目要求用两点三次插值公式和三点三次公式求解,直接按课本公式代入运算即可.
两点三次插值结果(选用点和的数据):
dy=cos(x0)
0.8660254037844390.7071067811865480.500000000000000
H2=(1+2*(x-x0
(1))/(x0
(2)-x0
(1)))*((x-x0
(2))/(x0
(1)-x0
(2)))^2*y0
(1)+...
(1+2*(x-x0
(2))/(x0
(1)-x0
(2)))*((x-x0
(1))/(x0
(2)-x0
(1)))^2*y0
(2)+...
(x-x0
(1))*((x-x0
(2))/(x0
(1)-x0
(2)))^2*dy
(1)+...
(x-x0
(2))*((x-x0
(1))/(x0
(2)-x0
(1)))^2*dy
(2)
H2=
0.642781665744313
三点三次插值结果:
h0=((x-x0
(2))/(x0
(1)-x0
(2)))^2*(x-x0(3))/(x0
(1)-x0(3));
h1=(1-(x-x0
(2))*(1/(x0
(2)-x0
(1))+1/(x0
(2)-x0(3))))*(x-x0
(1))*(x-x0(3))/((x0
(2)-x0
(1))*(x0
(2)-x0(3)));
h2=(x-x0
(1))/(x0(3)-x0
(1))*((x-x0
(2))/(x0(3)-x0
(2)))^2;
dh=(x-x0
(2))*(x-x0
(1))*(x-x0(3))/((x0
(2)-x0
(1))*(x0
(2)-x0(3)));
H3=h0*y0
(1)+h1*y0
(2)+h2*y0(3)+dh*dy
(2)
H3=
0.642801006402795
6根据函数的数据(如下表所示),分别用两点一次插值、带导数的二次插值、两点三次插值计算的近似值,比较其精度.
1
4
9
16
2
3
先输入数据:
x0=[14916]
14916
y0=sqrt(x0)
1234
dy=1./2*1./sqrt(x0)
0.5000000000000000.2500000000000000.1666666666666670.125000000000000
x=5%插值点
5
(1)两点一次插值,选取最靠近5的点和两组数据计算:
%两点一次插值
%找到两组最靠近插值点的数据
length(x0)
ifx0(i)<
x&
x0(i+1)>
x
break;
y1=(x-x0(i+1))/(x0(i)-x0(i+1))*y0(i)+(x-x0(i))/(x0(i+1)-x0(i))*y0(i+1)%计算插值点的插值结果
2.200000000000000
(2)带导数的二次插值
因为,因此利用
(1)中找到的两组数据即可,不同之处在于要附加利用上导数的值.
y2=(1-(x-x0(i))/(x0(i)-x0(i+1)))*(x-x0(i+1))/(x0(i)-x0(i+1))*y0(i)+power((x-x0(i))/(x0(i+1)-x0(i)),2)*y0(i+1)+(x-x0(i))*(x-x0(i+1))/(x0(i)-x0(i+1))*dy(i)
y2=
2.240000000000000
(3)两点三次插值,直接代入计算即可,与
(2)不同在于多了一个导数条件.
y3=(1-2*(x-x0(i))/(x0(i)-x0(i+1)))*power((x-x0(i+1))/(x0(i)-x0(i+1)),2)*y0(i)+...
(1-2*(x-x0(i+1))/(x0(i+1)-x0(i)))*power((x-x0(i))/(x0(i+1)-x0(i)),2)*y0(i+1)+...
(x-x0(i))*power((x-x0(i+1))/(x0(i)-x0(i+1)),2)*dy(i)+...
(x-x0(i+1))*power((x-x0(i))/(x0(i+1)-x0(i)),2)*dy(i+1)
y3=
2.237333333333333
此外,由于Matlab中已集成有分段三次插值函数,直接利用该命令也可解答此题.
y=interp1([49],[23],5,'
)
五、设计总结
总结:
在条件有限情况下,构造固定的阶数的插值多项式可能会是一种简单的方案,当要反复计算逼近值时,最好用牛顿插值多项式;
对于表格数据的常规插值,最好使用分段线性插值;
如果插值总体平滑很重要,应该考虑运用三次样条插值或三次Hermite插值,同时表格数据构成函数的导数不存在时,最好使用三次样条插值.
六、参考文献
[1]计算方法引论徐萃薇,孙绳武高等教育出版社2001.4
[2]数值分析(美)DavidKincaid&
WardCheney机械工业出版社2005.9
(译)王国荣,俞耀明,徐兆亮
[3]数值计算原理李庆扬,关冶,白峰杉清华大学出版社2000.9
[4]数值计算方法郑慧娆,陈绍林,莫忠良,黄象鼎武汉大学出版社2002.10
[5]现代数值分析蒋耀林国防工业出版社2004.9
[6]现代数值数学和计算同济大学计算数学教研室同济大学出版社2004.7
[7]数值计算方法及其应用朱长青科学出版社2006.1
[8]数值计算方法曾金平湖南大学出版社2004.8
[9]数值计算基础沈剑华同济大学出版社2004.5
[10]数值分析算法描述徐士良机械工业出版社2003.4
[11]数值分析李庆扬,王能超,易大义清华大学出版社&
施普林格出版社2001.8
七、心得体会
(1)韩建:
通过此次课程设计我们可以知道计算机在现代生活中的应用已经如此普及,尤其是在数学计算当中,Matlab软件更是发挥了不可替代的作用.Matlab以其强大的功能,方便了当今数值计算,数学教程,及工程计算等众多领域.拉格朗日插值的优点:
它的形式是对称的,这样很容易编程上机实现。
它在理论上十分重要。
牛顿插值的优点:
在计算插值多项式及求解函数近似值都比较方便且计算量相对较小。
从公式中可以看出:
每增加一个节点,插值多项式只增加一项,因此便于递推运算,所以其具有灵活增加节点的优点。
(2)高育坤:
深入了解matlab运行环境和操作环境,初步学会调试程序,运用绘图命令制作函数图象;
了解常见几种插值法,以及数值分析的解决方案;
懂得如何运用已有的知识更进一步了解未知的问题;
独立解决和思考问题的能力有了一定的提高。
(3)李婧:
通过自己动手作实验学习如何用插值方法解决实际问题,提高探索和解决问题的能力。
通过撰写实验报告,促使自己提炼思想,按逻辑顺序进行整理,并以他人能领会的方式表达自己思想形成的过程和理由。
提高了写作、文字处理、排版等方面的能力。
(4)王冬妮:
各种插值法都有自己的利与弊,拉格朗日插值法运算过程相对复杂,但当和导数结合起来,组成抛物插值的时候,精度就可以提高很多。
牛顿插值法、拉格朗日插值法等线性插值法只能适合在已知点不多的情况下使用,当已知的坐标点很多时候应该将区间分成小段进行分段线性插值或者分段抛
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算 课程设计 报告 插值法