实验三插值
- 格式:doc
- 大小:364.00 KB
- 文档页数:30
数值法实验报告专业班级:信息与计算科学121 姓名:金辉 学号:20120142801)实验目的本次实验的目的是熟练《数值分析》第二章“插值法”的相关内容,掌握三种插值方法:牛顿多项式插值,三次样条插值,拉格朗日插值,并比较三种插值方法的优劣。
本次试验要求编写牛顿多项式插值,三次样条插值,拉格朗日插值的程序编码,并在MATLAB 软件中去实现。
2)实验题目 实验一:试用44据进行插值。
用图给出{(x i ,y i ),x i =0.2+0.08i ,i=0,1, 11, 10},P 4(x )及S (x )。
实验二:在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数21()125f x x =+作多项式插值及三次样条插值,对每个n 值,分别画出插值函数即()f x 的图形。
实验三:可以得到平方根函数的近似,在区间[0,64]上作图。
(1)用这9各点作8次多项式插值L 8(x).(2)用三次样条(自然边界条件)程序求S (x )。
从结果看在[0,64]上,那个插值更精确;在区间[0,1]上,两种哪个更精确?3)实验原理与理论基础《数值分析》第二章“插值法”的相关内容,包括:牛顿多项式插值,三次样条插值,拉格朗日4)实验内容 实验一:试用44据进行插值。
用图给出{(xi ,yi),xi=0.2+0.08i,i=0,1, 11, 10},P4(x)及S(x)。
(1)首先我们先求牛顿插值多项式,此处要用4次牛顿插值多项式处理数据。
已知n次牛顿插值多项式如下:P n =f(x)+f[x,x1](x-x)+ f[x,x1,x2](x-x) (x-x1)+···+f[x0,x1, (x)n](x-x) ···(x-xn-1)我们要知道牛顿插值多项式的系数,即均差表中得部分均差。
在MATLAB的Editor中输入程序代码,计算牛顿插值中多项式系数的程序如下:function varargout=newtonliu(varargin)clear,clcx=[0.2 0.4 0.6 0.8 1.0];fx=[0.98 0.92 0.81 0.64 0.38];newtonchzh(x,fx);function newtonchzh(x,fx)%由此函数可得差分表n=length(x);fprintf('*****************差分表*****************************\n');FF=ones(n,n);FF(:,1)=fx';for i=2:nfor j=i:nFF(j,i)=(FF(j,i-1)-FF(j-1,i-1))/(x(j)-x(j-i+1));endendfor i=1:nfprintf('%4.2f',x(i));for j=1:ifprintf('%10.5f',FF(i,j));endfprintf('\n'); end由所以有四次插值牛顿多项式为:P 4(x )=0.98-0.3(x-0.2)-0.62500 (x-0.2)(x-0.4) -0.20833(x-0.2)(x-0.4)(x-0.6)-0.52083 (x-0.2)(x-0.4)(x-0.6)(x-0.8)(2)接下来我们求三次样条插值函数。
实验3 插值法与数值积分一、实验目的(1)掌握拉格朗日插值法、牛顿插值法。
(2)掌握数值积分常用算法:逐次分半梯形公式求积。
(3)记录运行结果,回答问题,完成实验报告。
二、实验内容思考问题:插值多项式是否阶次越高越好?数值积分与插值的关系是什么?逐次分半梯形公式求积如何判断误差是否满足要求?1.用拉格朗日插值法求2的平方根。
提示:可以用抛物线插值,f(1.69)=1.3,f(1.96)=1.4,f(2.25)=1.5。
2.用牛顿插值法求2的平方根。
提示:可以用抛物线插值,f(1.69)=1.3,f(1.96)=1.4,f(2.25)=1.5。
3.用逐次分半梯形公式求积计算∫x2dx。
提示:可以用相邻两次求得的结果的差的绝对值来间接判断误差是否满足要求。
三、实验步骤1.代码如下:#include<stdio.h>#include<math.h>#define MAXSIZE 50void input(double x[MAXSIZE],double y[MAXSIZE],long n){long i;for(i=0;i<=n-1;i++){printf("请输入插值节点x[%ld],y[%ld]:",i,i);scanf("%lf,%lf",&x[i],&y[i]);}}void main(void){double x[MAXSIZE],y[MAXSIZE],_x,_y,t;long n,i,j;printf("请输入插值节点的个数:");scanf("%ld",&n);input(x,y,n);printf("请输入插值点:");scanf("%lf",&_x);_y = 0;for(i=0;i<=n-1;i++){t = 1;for(j=0;j<=n-1;j++)if(j != i)t *= (_x-x[j]) / (x[i]-x[j]);_y += t * y[i];}printf("插值点(x,y)=(%lf,%lf)。
第1篇一、实验目的1. 理解并掌握插值法的基本原理和常用方法。
2. 学习使用拉格朗日插值法、牛顿插值法等数值插值方法进行函数逼近。
3. 分析不同插值方法的优缺点,并比较其精度和效率。
4. 通过实验加深对数值分析理论的理解和应用。
二、实验原理插值法是一种通过已知数据点来构造近似函数的方法。
它广泛应用于科学计算、工程设计和数据分析等领域。
常用的插值方法包括拉格朗日插值法、牛顿插值法、样条插值法等。
1. 拉格朗日插值法拉格朗日插值法是一种基于多项式的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等。
2. 牛顿插值法牛顿插值法是一种基于插值多项式的差商的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等,并且满足一定的差商条件。
三、实验内容1. 拉格朗日插值法(1)给定一组数据点,如:$$\begin{align}x_0 &= 0, & y_0 &= 1, \\x_1 &= 1, & y_1 &= 4, \\x_2 &= 2, & y_2 &= 9, \\x_3 &= 3, & y_3 &= 16.\end{align}$$(2)根据拉格朗日插值公式,构造插值多项式:$$P(x) = \frac{(x-x_1)(x-x_2)(x-x_3)}{(x_0-x_1)(x_0-x_2)(x_0-x_3)}y_0 + \frac{(x-x_0)(x-x_2)(x-x_3)}{(x_1-x_0)(x_1-x_2)(x_1-x_3)}y_1 + \frac{(x-x_0)(x-x_1)(x-x_3)}{(x_2-x_0)(x_2-x_1)(x_2-x_3)}y_2 + \frac{(x-x_0)(x-x_1)(x-x_2)}{(x_3-x_0)(x_3-x_1)(x_3-x_2)}y_3.$$(3)计算插值多项式在不同点的函数值,并与实际值进行比较。
样条插值法公式样条插值法是一种在数学和计算机科学中非常有用的数值分析方法。
咱们今天就来好好聊聊这个听起来有点高大上的“样条插值法公式”。
想象一下,你正在做一个科学实验,测量了一些数据点,但是这些点之间的空白区域你不知道具体数值是多少。
这时候,样条插值法就派上用场啦!先来说说什么是样条插值法。
简单来说,就是通过一系列的分段多项式来连接给定的数据点,使得曲线不仅经过这些点,而且还很光滑。
样条插值法公式有很多种,比如三次样条插值公式。
咱们就以三次样条插值为例来深入了解一下。
假设我们有 n + 1 个数据点 (x₀, y₀), (x₁, y₁),..., (xₙ, yₙ) ,并且x₀ < x₁ <... < xₙ 。
对于每个区间 [xᵢ, xᵢ₊₁] ,我们定义一个三次多项式 Sᵢ(x) = aᵢ(x - xᵢ)³+ bᵢ(x - xᵢ)² + cᵢ(x - xᵢ) + dᵢ。
为了确定这些系数 aᵢ、bᵢ、cᵢ、dᵢ,我们需要满足一些条件。
首先,Sᵢ(xᵢ) = yᵢ,Sᵢ(xᵢ₊₁) = yᵢ₊₁,这保证了曲线经过给定的数据点。
然后,还需要满足在每个节点处一阶导数和二阶导数连续。
这一堆条件看起来很复杂,但其实就是为了让我们得到的曲线既经过点,又光滑自然。
我记得有一次,我在帮一个学生解决物理实验中的数据处理问题。
实验是测量一个物体自由下落的高度和时间的关系。
但是由于测量设备的精度问题,得到的数据点并不是很连续。
我们就用样条插值法来填补这些空缺。
通过计算那些复杂的公式,一点点地确定系数,最终得到了一条非常漂亮的曲线,准确地反映了物体下落的规律。
那个学生当时眼睛都亮了,直说:“老师,这太神奇了!”在实际应用中,样条插值法可广泛用于图像处理、工程设计、金融分析等领域。
比如说,在图像处理中,对图像进行缩放或者变形时,就可以用样条插值来保持图像的质量。
总之,样条插值法公式虽然看起来有点吓人,但只要我们掌握了它的原理和方法,就能在很多情况下发挥大作用,解决那些让我们头疼的数据空缺问题。
试验三Matlab插值与拟合一. 实验目的了解插值的基本内容和原理;掌握用matlab求解插值问题,包括一维插值和二维插值的各种常用方法;二. 实验原理和方法插值法是实用的数值方法,是函数逼近的重要方法。
在生产和科学实验中,自变量x与因变量y的函数y = f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。
当要求知道观测点之外的函数值时,需要估计函数值在该点的值。
如何根据观测点的值,构造一个比较简单的函数y=φ(x),使函数在观测点的值等于已知的数值或导数值,进而用简单函数y=φ(x)在点x处的值来估计未知函数y=f(x)在x点的值。
寻找这样的函数φ(x),办法是很多的。
φ(x)可以是一个代数多项式,或是三角多项式,也可以是有理分式;φ(x)可以是任意光滑(任意阶导数连续)的函数或是分段函数;函数类的不同,自然地有不同的逼近效果。
一维插值已知1+n 个数据节点:,,,...2,1,0),,(不相同其中j j j x n j y x =bx x x a n =<<<=...10不妨设构造一个(相对简单)函数)(x f y =(称为插值函数),通过全部结点即j j y x f =)((j =0,1,…n )再用)(x f 计算插值,即**)(y x f =数学上插值方法非常多,只介绍几种常用方法:(1)拉格朗日(Lagrange)插值已知函数f (x )(称为被插值函数)在n +1个点x 0,x 1,…,x n 处的函数值为 y 0,y 1,…,y n 。
求一n 次多项式函数P n (x )(称为插值函数),使其满足: P n (x i )=y i ,i =0,1,…,n ..解决此问题的拉格朗日插值多项式公式如下:∑=⋅=ni iin y x L x P 0)()(其中)(x L i 为n 次多项式:)())(())(()())(())(()(11101110n i i i i i i i n i i i x x x x x x x x x x x x x x x x x x x x x L ----------=+-+-称为拉格朗日插值基函数,可以验证该多项式通过所给数据点。
y 1y特别地:两点一次(线性)插值多项式为:()101001011y x x x x y x x x x x P --+--=三点二次(抛物)插值多项式为:()()()()()()()()()()()()()212211211221212yx x x x x x x x yx x x x x x x x yx x x x x x x x x L -⋅--⋅-+-⋅--⋅-+-⋅--⋅-=matlab 没有Lagrange 插值的函数,需要自己编写。
Lagrange 插值插值的最大优点是函数具有很好的解析性质,无穷次可微。
缺点是:(1)可能出现严重的振荡现象,在头尾附近会出现一些不好的振荡现象(龙格现象)(2)多项式的系数对数据非常敏感。
导致Lagrange 插值如上缺点的原因在于:多项式次数过高不一定是好事。
而克服这一缺点的办法之一就是采用分段低次插值,其中最简单的是分段线性插值。
(2)分段线性插值x j x j-1 x j+1 x 0 x n⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧≤≤--≤≤--=--+--=+++-------=∑其它上的表达式为:在,0,,)(]x ,[x )()()(1111111111j 1-j 0j j j j j j j j j j j jj j j j jj j n nj j j n x x x x x x x x x x x x x x x l y x x x x y x x x x x L x l y x L该方法具有良好的收敛性,即)()(lim x f x L n n =∞→,其中)(x f 为被插值函数,可以通过增加插值节点的个数来控制插值误差,是一种较实用的插值方法,Matlab 有分段线性插值函数,但总体光滑程度不够。
(3)分段三次埃尔米特(Hermite )插值对插值函数的要求可以根据需要进行改变,由此产生了不同的插值方法,分段三次埃尔米特插值就是其一。
在插值问题中,如果除了指定在插值节点的函数值以外,同时指定插值节点处的导数值,这时插值问题变为:给定一组观察数据),...1,0(),(n i y x i i =及11110,...,,n y y y ,要求一个分段多项式函数)(x L ,满足:),...,1,0()(,)(1n i y x L y x L ii i i =='=这就相当于所求分段多项式在每个小段],[1i i x x -上满足四个条件:111111)()()(,)(ii i i i i i i y x L y x L y x L y x L ='='==----可以确定四个待定参数,三次多项式恰好有四个系数,所以可以考虑用三次多项式作为插值函数,这就是分段三次Hermite 插值。
(4)分段三次样条插值在数学上,光滑程度的定量描述是:函数(曲线)的k 阶导数存在且连续,则称该曲线具有k 阶光滑性。
光滑性的阶次越高,则曲线光滑程度越好。
分段线性插值具有零阶光滑性,也就是不光滑;分段三次埃尔米特插值具有一阶光滑性,但是这样的光滑程度在工程设计和机械加工等实际应用中是远远不够的。
是否存在较低次的分段多项式达到较高阶光滑性的方法?三次样条插值就是一个很好的例子。
什么是样条?所谓样条,就是一个细的、可弯曲的木制或塑料条,在飞机或轮船等的设计制造过程中为描绘出光滑的外形曲线(放样)所用的工具。
1946年,Schoenberg 将样条引入数学,即所谓的样条函数。
三次样条函数本质上是一段一段的三次多项式拼合而成的曲线,在拼接处,不仅函数是连续的,且一阶和二阶导数也是连续的。
},1],,[),({)(1n i x x x x s x S i i i =∈=-xi-1i],[)()3),1,0()()2),1()()10223n i i i i i i i x x C x S n i y x S n i d x c x b x a x s ∈===+++=满足以上条件的分段函数)(x S 称为三次样条插值函数。
可以看出,三次样条插值是分段三次多项式插值,但是不仅要求过所给数据节点,而且要求在所给节点处的二阶导数也是连续的,从而构造出来的插值函数比较光滑。
在n 个小区间构造S(x),共有n 个三次多项式,每个多项式有4个系数需要确定,总共需确定4n 个参数才能给出S(x)(1)在n+1个节点上要求S(x)过点),(i i y x :i i y x s =)(, 该条件给出n+1个方程。
(2)在n-1个内部节点上要求连续,一阶导数和二阶导数连续:)()(1i i i i x s x s =-)()()()(11i i i i i i i i x s x s x s x s "="'='--(1,...2,1-=n i ),该条件给出3(n-1)个方程。
由(1)和(2)总共得到4n-2个方程,还差两个。
为此常用的方法是在两个边界节点0x 和n x 附加要求,这就是所谓的边界条件。
根据实际问题的不同,三次样条插值常用到下列三类边界条件。
(1)m 边界条件:nnmx S m x S ='=')(,)(0。
即指定两个边界节点的一阶导数值为给定值n m m ,0(2)M 边界条件:n n M x S Mx S =''='')(,)(0。
即指定两个边界节点的二阶导数值为给定值n M M ,0特别地,当0M 和n M 都为零时,称为自然边界条件。
(3)周期性边界条件:)()(),()(00n n x S x S x S x S ''='''='总而言之,理论上三次样条插值是确定的。
matlab 插值命令命令1 interp1功能 一维数据插值。
该命令对数据点之间计算内插值。
它找出一元函数f(x)在中间点的数值。
其中函数f(x)由所给数据决定。
各个参量之间的关系示意图如下图Yi :插值点图 数据点与插值点关系示意图格式:(1)yi = interp1(x,Y,xi) %返回插值向量yi ,每一元素对应于参量xi ,同时由向量x 与Y 的内插值决定。
参量x 指定数据Y 的点。
若Y 为一矩阵,则按Y 的每列计算。
yi 是阶数为length(xi)*size(Y,2)的输出矩阵。
(2)yi = interp1(Y,xi) %假定x=1:N,其中N为向量Y的长度,或者为矩阵Y的行数。
(3)yi = interp1(x,Y,xi,method) %用指定的算法计算插值:‘nearest’:最近邻点插值,直接完成计算;‘linear’:线性插值(缺省方式),直接完成计算;‘spline’:三次样条函数插值,使用命令spline的默认的边界条件。
即要求第一个点的三次导数和第二点的三次导数一样;最后一个点的三次导数和倒数第二个点一样。
‘pchip’:分段三次Hermite插值。
对于该方法,命令interp1调用函数pchip,用于对向量x与y执行分段三次内插值。
该方法保留单调性与数据的外形;‘cubic’:与’pchip’操作相同;‘v5cubic’:在MATLAB 5.0中的三次插值。
对于超出x范围的xi的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。
对其他的方法,interp1将对超出的分量执行外插值算法。
(4)yi = interp1(x,Y,xi,method,'extrap') %对于超出x 范围的xi中的分量将执行特殊的外插值法extrap。
(5)yi = interp1(x,Y,xi,method,extrapval) %确定超出x范围的xi中的分量的外插值extrapval,其值通常取NaN或0。
(6)pp= interp1(x,Y,method,'pp') %使用指定方法生成pp形式的分片多项式,可以使用格式(3)中所列举的除'v5cubic'外任何一种方法。
PP是一种结构体类型的数据,pp中存储了各分段三次样条插值多项式的系数和其他相关的信息。
pp.breaks 插值节点pp.coefs 插值多项式系数pp.pieces 多项式个数pp.order 每个多项式系数的个数pp.dim 插值维数欲求该分片多项式在xi处的值,可使用yi=ppval(pp,xi)来计算。