曲线拟合与插值理论与实例

合集下载

实验报告书-曲线拟合与插值

实验报告书-曲线拟合与插值

东南大学《数学实验》报告学号09008123 姓名郭晨成绩实验内容:曲线拟合与插值一实验目的三次样条插值函数的求解及应用二预备知识(1)熟悉正规方程、差分表、插商表的概念(2)熟悉“\”、polyfit、polyval、interp1、spline、cscvn等Matlab 命令三实验内容与要求已知某平原地区的一条公路经过如下坐标点,请用不同的插值方法绘出这条公路(不考虑公路的宽度)。

对于表中给出的数据,编程计算三次样条插值函数估计的公路长度。

X(m) 0 30 50 70 80 90 120 148 170 180Y(m) 80 64 47 42 48 66 80 120 121 138X(m) 202 212 230 248 268 271 280 290 300 312Y(m) 160 182 200 208 212 210 200 196 188 186X(m) 320 340 360 372 382 390 416 430 478 440Y(m) 200 184 188 200 202 240 246 280 296 308X(m) 420 380 360 340 320 314 280 240 200Y(m) 334 328 334 346 356 360 392 390 400思路:由于道路曲折,出现了一个x值对应2个y值的情况,,所以将道路分为2个函数进行拟合。

Matlab命令clear% 全部采样点X=[0,30,50,70,80,90,120,148,170,180,202,212,230,248,268,271,280,290,300,312,320,340,360,372,382,390,416,430,478,440,420,380,360,340,320,314,280,240,200];Y=[80,64,47,42,48,66,80,120,121,138,160,182,200,208,212,210,200,196,188,186,200,184,188, 200,202,240,246,280,296,308,334,328,334,346,356,360,392,390,400];% 第一段n1=29;X1=[0,30,50,70,80,90,120,148,170,180,202,212,230,248,268,271,280,290,300,312,320,340,36 0,372,382,390,416,430,478];Y1=[80,64,47,42,48,66,80,120,121,138,160,182,200,208,212,210,200,196,188,186,200,184,18 8,200,202,240,246,280,296];Z1=0:1:478;m1=length(Z1);gdao1=[-8/15,1/3];lmd1(1)=1;mu1(n1)=1;for i=1:n1-1h1(i)=X1(i+1)-X1(i);endd1(1)=6*((Y1(2)-Y1(1))/h1(1)-gdao1(1))/h1(1);d1(n1)=6*(gdao1(2)-(Y1(n1)-Y1(n1-1))/h1(n1-1))/h1(n1-1);for i=2:n1-1lmd1(i)=h1(i)/(h1(i-1)+h1(i));mu1(i)=1- lmd1(i);d1(i)=6*((Y1(i+1)-Y1(i))/h1(i)-(Y1(i)-Y1(i-1))/h1(i-1))/(h1(i-1)+h1(i));endA1(1,1)=2;A1(1,2)=1;A1(n1,n1-1)=1;A1(n1,n1)=2;for i=2:n1-1A1(i,i-1)=mu1(i);A1(i,i)=2;A1(i,i+1)=lmd1(i);endM1=inv(A1)*d1';for k=1:m1for i=1:n1-1if Z1(k)>=X1(i)&Z1(k)<=X1(i+1)S1(k)=M1(i)*(X1(i+1)-Z1(k))^3/(6*h1(i))+M1(i+1)*(Z1(k)-X1(i))^3/(6*h1(i))+(Y1(i)-M1(i)*h 1(i)^2/6)*(X1(i+1)-Z1(k))/h1(i)+(Y1(i+1)-M1(i+1)*h1(i)^2/6)*(Z1(k)-X1(i))/h1(i);breakendendend% 第二段n2=11;X2=[200,240,280,314,320,340,360,380,420,440,478];Y2=[400,390,392,360,356,346,334,328,334,308,296];Z2=200:1:478;m2=length(Z2);gdao2=[-1/4,-6/19];lmd2(1)=1;mu2(n2)=1;for i=1:n2-1h2(i)=X2(i+1)-X2(i);endd2(1)=6*((Y2(2)-Y2(1))/h2(1)-gdao2(1))/h2(1);d2(n2)=6*(gdao2(2)-(Y2(n2)-Y2(n2-1))/h2(n2-1))/h2(n2-1);for i=2:n2-1lmd2(i)=h2(i)/(h2(i-1)+h2(i));mu2(i)=1- lmd2(i);d2(i)=6*((Y2(i+1)-Y2(i))/h2(i)-(Y2(i)-Y2(i-1))/h2(i-1))/(h2(i-1)+h2(i));endA2(1,1)=2;A2(1,2)=1;A2(n2,n2-1)=1;A2(n2,n2)=2;for i=2:n2-1A2(i,i-1)=mu2(i);A2(i,i)=2;A2(i,i+1)=lmd2(i);endM2=inv(A2)*d2';for k=1:m2for i=1:n2-1if Z2(k)>=X2(i)&Z2(k)<=X2(i+1)S2(k)=M2(i)*(X2(i+1)-Z2(k))^3/(6*h2(i))+M2(i+1)*(Z2(k)-X2(i))^3/(6*h2(i))+(Y2(i)-M2(i)*h 2(i)^2/6)*(X2(i+1)-Z2(k))/h2(i)+(Y2(i+1)-M2(i+1)*h2(i)^2/6)*(Z2(k)-X2(i))/h2(i);breakendendendplot(Z1,S1,Z2,S2,X,Y,'o') % 绘图% 估算公路长度L=0;for t=1:477L=L+((Z1(t)-Z1(t+1))^2+(S1(t)-S1(t+1))^2)^0.5;endfor t=1:277L=L+((Z2(t)-Z2(t+1))^2+(S2(t)-S2(t+1))^2)^0.5 End结果输出:L = 1.0163e+003插值图像。

插值与拟合应用举例

插值与拟合应用举例

插值与拟合1. 插值与拟合的基本概念插值与插值函数:已知由()g x (可能未知或非常复杂)产生的一批离散数据(,),0,1,,i i x y i n = ,且n+1个互异插值节点011n n a x x x x b -=<<<<= ,在插值区间内寻找一个相对简单的函数 ()f x ,使其满足下列插值条件:再利用已求得的 ()f x 计算任一非插值节点的近似值,这就是插值。

其中()f x 称为插值函数, ()g x 称为被插函数。

最小二乘拟合: 已知一批离散的数据 (,),0,1,,i i x y i n = ,i x 互不相同,寻求一个拟合函数 ()f x ,使()i f x 与i y 的误差平方和在最小二乘意义下最小。

在最小二乘意义下确定的 ()f x 称为最小二乘拟合函数。

温度问题在12小时内,每隔1小时测量一次温度。

温度依次为:5,8,9,15,25,29,31,30,22,25,27,24。

(单位:℃)(1) 试估计在3.2h ,6.5h ,7.1h ,11.7h 的温度值,并画出其图形。

(2) 每隔1/10h 估计一次温度值,并画出其图形。

请你找出跟上述12个数据拟合的最好的一条曲线,请分别用分段线性插值、三次样条插值方法(至少用两条不同的曲线,并比较它们拟合好坏的程度)hours=1:12;temps=[5,8,9,15,25,29,31,30,22,25,27,24];t=interp1(hours,temps,[3.2,6.5,7.1,11.7]) %线性插值 T=interp1(hours,temps,[3.2,6.5,7.1,11.7],'spline') %三次样条插值 计算结果为 t =10.2000 30.0000 30.9000 24.9000 T =9.6734 30.0427 31.1755 25.3820每隔1/10h 估计一次温度值并画出其图形: hours=1:12;temps=[5,8,9,15,25,29,31,30,22,25,27,24]; h=1:0.1:12;t=interp1(hours,temps,h,'spline');plot(hours,temps,'+',h,t,hours,temps,'r:') xlabel('时间'),ylabel('温度')三次多项式拟合: hours=1:12;temps=[5,8,9,15,25,29,31,30,22,25,27,24]; a=polyfit(hours,temps,3) temps1=polyval(a,hours);plot(hours,temps,'ro',hours,temps1,'b.')得到320.00650.32837.1281 4.4343y x x x =--+-,图形如下:四次多项式拟合:得到4320.02730.7158 5.770712.225112.5884y x x x x =-+-+比较拟合的好坏:设ˆi y为拟合函数的值,i y 为测量值,则残差2ˆ()iiie y y=-∑ 。

第四章插值和曲线拟合

第四章插值和曲线拟合
第四章 插值和曲线拟合
在实际问题和科学实验中所遇到的函数y=f(x),往往
没有解析表达式 , 只能根据试验观察或其它方法提供一
系列点的函数值; 有时尽管可以写出表达式,但是比较
复杂, 直接使用它感到不方便。我们经常需要利用已知
的数据去寻求某个简单的函数φ (x)来逼近f(x),即用φ (x)
作为f(x)的近似表达式。本章的插值法和曲线拟合就是
φ (xi) = yi ,
插值法的几何意义
插值法的几何意义就是通过n+1个点: (xi,yi) (i=0,1,2,…,n) 作一条近似曲线y= φ (x) 代替y=f(x)。如下图所示。 y=f(x) (xn,yn) y= φ (x) y
(x1,y1) (x0,y0) (x2,y2)
(xn-1,yn-1)
三、n次拉格朗日插值
仿照P2 (x)的构造方法,可得出 Pn(x)=L0(x)y0+L1(x)y1+…+Ln(x)yn 其中 L0(x)=[(x-x1)(x-x2)…(x-xn)]/ [(x0-x1)(x0-x2)…(x0-xn)] Lk(x)= [(x-x0)…(x-xk-1)(x-xk+1) …(x-xn)] /[(xk-x0)…(xk-xk-1)(xk-xk+1) …(xk-xn)] ( k = 0, 1, …, n ) 这就是n次拉格朗日插值多项式。 也可写为 n n n x x k P ( x ) L ( x ) y y n i i i x x i 0 i 0 k 0 , k i i 或 k
线性插值举例
例 解 或 已知 1001/2 =10,1211/2 =11 求 1151/2 P1(x) = y0+(y1-y0)/(x1-x0)*(x-x0) P1(115) = 10+(11-10)/(121-100)*(115-100)

数值计算3-插值和曲线拟合

数值计算3-插值和曲线拟合

数值计算...........3.-.插值和曲线拟合插值法是实用的数值方法,是函数逼近的重要方法。

在生产和科学实验中,自变量x与因变量y的函数y = f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。

当要求知道观测点之外的函数值时,需要估计函数值在该点的值。

如何根据观测点的值,构造一个比较简单的函数y=φ(x),使函数在观测点的值等于已知的数值或导数值。

用简单函数y=φ(x)在点x处的值来估计未知函数y=f(x)在x点的值。

寻找这样的函数φ(x),办法是很多的。

φ(x)可以是一个代数多项式,或是三角多项式,也可以是有理分式;φ(x)可以是任意光滑(任意阶导数连续)的函数或是分段函数。

函数类的不同,自然地有不同的逼近效果。

在许多应用中,通常要用一个解析函数(一、二元函数)来描述观测数据。

根据测量数据的类型:1.测量值是准确的,没有误差。

2.测量值与真实值有误差。

这时对应地有两种处理观测数据方法:1.插值或曲线拟合。

2.回归分析(假定数据测量是精确时,一般用插值法,否则用曲线拟合)。

MATLAB中提供了众多的数据处理命令。

有插值命令,有拟合命令,有查表命令。

一维插值插值定义为对数据点之间函数的估值方法,这些数据点是由某些集合给定。

当人们不能很快地求出所需中间点的函数值时,插值是一个有价值的工具。

例如,当数据点是某些实验测量的结果或是过长的计算过程时,就有这种情况。

interp1(x,y,xi,method)x和y为既有数据的向量,其长度必须相同。

xi为要插值的数据点向量。

method插值方法,‘nearest’/‘linear’/‘cubic’/‘spline’之一,分别为最近点插值/线性插值/分段三次Hermite插值/三次样条插值。

例x=[1.0 2.0 3.0 4.0 5.0]; %输入变量数据xy=[11.2 16.5 20.4 26.3 30.5]; %输入变量数据yx1=2.55; %输入待插值点xy11=interp1(x,y,x1,'nearest') %最近点插值方法的插值结果y12=interp1(x,y,x1,'linear') %线性插值方法的插值结果y13=interp1(x,y,x1,'cubic') %三次Hermite插值方法的插值结果y14=interp1(x,y,x1,'spline') %样条插值方法的插值结果y11 =20.4000y12 =18.6450y13 =18.6028y14 =18.4874plot(x,y)或许最简单插值的例子是MATLAB的作图。

曲线插值、拟合

曲线插值、拟合

根据被插值函数自变量个数,插值问题 分为一维插值、二维和多维插值;根据是 用分段直线、多项式或样条函数来作为插 值函数,插值问题又可分为线性插值、多 项式插值和样条插值。 MATLAB提供了一维、二维、三维、N 维数据插值函数interp1、interp2、interp3 、interpn,以及三次样条插值函数spline. 1.一位数据插值 调用格式: Y1=interp1(X,Y,X1,method) 注:根据X,Y的值,计算函数在X1处的值。
例2 某实验对一根长10米的钢轨进行热源温 度传播测试。用x表示测量点距离(m),用h 表示测量时间(s),用T表示测量所得各点温 度(c),测量结果如下。试用3次多项式插值 求一分钟内每隔10s,钢轨每隔0.5m处的温度
0 0 30 60 95 88 67
2.5 14 48 64
5 0 32 54
2.曲线拟合的实现 采用最小二乘法进行曲线拟合时,实际 上就是求一个系数向量,即为多项式的系数 。在MATLAB中,用polyfit函数来求的最小 二乘拟合多项式的系数,用polyval函数按所 得的多项式计算所给点上函数近似值。 polyfit函数的调用格式: [P,S]=polyfit(X,Y,m) 函数根据采样点X和采样点函数值Y,产 生一个m次多项式P及其在采样点的误差向量 S。
曲线拟合
1.曲线拟合 曲线拟合:用一个简单的函数去逼近 一个复杂的或者未知的函数。 依据的条件:在一个区间或一个区域 上的有限个采样点的函数值。 为此构造函数y=g(x)去逼近f(x),这里 不要求曲线个g(x)严格通过采样点,但希 望能尽量靠近这些点,就是是误差在某种 意义上达到最小。
MATLAB曲线拟合的最优标准是采用 最小二乘原理,所构造的g(x)是一个次数小 于离散点的多项式。设测得n个离散数据点 (xi,yi)(i=1,…n), 欲构造一个m(m<n)次多项式p(x): m m1 a x a x am x am1 2 p(x)= 1 在这里就是使上述拟合多项式在各个 节点处的偏差p(xi)-yi的平方和达到最小。

插值与拟合原理范文

插值与拟合原理范文

插值与拟合原理范文一、插值的原理插值是指根据已知数据的取值,在给定的数据区间内推测未知数据的取值。

插值的原理是基于一个假设,即在给定的区间内,数据的取值变化是连续而平滑的。

常见的插值方法包括线性插值、多项式插值和样条插值。

其中,线性插值是最简单的一种方法。

线性插值假设给定的两个点(x1,y1)和(x2,y2),两个点之间段的取值变化是线性的,可以通过直线的方程来计算中间点的值。

例如,在区间[1,3]上已知两个点(1,2)和(3,4),可以通过线性插值方法计算出点(2,?)的值。

根据线性插值的原理,点(2,?)的值应该等于直线y=2x的值,在这个例子中,点(2,?)的值为2×2=4多项式插值是一种更精确的插值方法。

多项式插值的原理是基于一个假设,即给定的n个点(x1, y1), (x2, y2), ..., (xn, yn)可以被一个n-1次多项式唯一地表示。

通过这个假设,可以根据已知数据点构造一个多项式函数,并通过求解多项式的系数来计算任意点的取值。

例如,在区间[1,3]上已知两个点(1,2)和(3,4),可以通过多项式插值方法构造一个二次多项式函数y=ax^2+bx+c,并通过求解a, b, c的值来计算任意点的值。

样条插值是一种更加平滑的插值方法。

样条插值的原理是将插值区间划分为若干小的子区间,在每个子区间内通过一个较低次数的多项式来拟合数据。

通过连接每个子区间内的多项式函数,可以获得整个插值区间内的光滑曲线。

通过样条插值方法,可以更好地拟合非线性数据,提高插值结果的准确性。

二、拟合的原理拟合是指根据已知的数据样本,确定一个数学模型来描述数据的变化趋势。

拟合的原理是基于一个假设,即给定的数据点可以通过选定的数学模型进行近似表示。

常见的拟合方法包括线性回归、多项式拟合和非线性拟合。

其中,线性回归是最简单的一种拟合方法。

线性回归的原理是假设给定的数据点符合一个线性函数模型y=ax+b,通过最小化实际数据点与拟合直线之间的距离,可以求解出最优的拟合直线的斜率a和截距b。

插值与曲线拟合实验报告

插值与曲线拟合实验报告

插值与曲线拟合实验报告实验目的:1. 了解插值和曲线拟合的原理和方法;2. 掌握梯形公式的应用;3. 掌握拉格朗日插值多项式和牛顿插值多项式的构造方法;4. 掌握用MATLAB进行数据拟合的方法。

实验仪器:1. 计算机;2. MATLAB软件。

实验原理:插值:给定一组数据点,插值就是在这些数据点之间插入某些值,以尽量接近原函数的方式得到一个新的函数。

插值方法有很多种,其中比较常用的是拉格朗日插值多项式和牛顿插值多项式。

拉格朗日插值多项式:以一种通用的方式构造多项式,使其通过给定的一组数据点。

构造方法是依据n个数据点(x1,y1),(x2,y2),…,(xn,yn)构造n-1次函数L(x),使得L(xi)=yi且有L(xj)=0(j不等于i)。

该多项式的形式为:L(x)=y1*L1(x)+y2*L2(x)+…+yn*Ln(x)其中,Lk(x)的构造方法是:Lk(x)=(x-x1)(x-x2)…(x-xk-1)(x-xk+1)…(x-xn) /(xk-x1)(xk-x2)…(xk-xk-1)(xk-xk+1)…(xk-xn)牛顿插值多项式:采用递推公式构造,其形式为:其中,f(x0,x1)表示在x0和x1之间的斜率,f(x0,x1,x2)表示在x0、x1和x2之间的曲率,以此类推。

曲线拟合:给定一组数据点,拟合就是寻找一个函数或者曲线,以最优化的方式拟合这些数据点,从而对未知的数据点进行预测。

拟合方法有很多种,其中比较常用的是线性方程、最小二乘法和多项式拟合。

最小二乘法:使用这种方法时,需要有一个数学模型,以此作为拟合函数。

当给定输入-输出数据时,使用最小二乘法以最小化误差平方和的方式来确定函数中未知的参数。

在MATLAB中使用polyfit函数实现多项式拟合。

实验结果:选择数据点如下:x = [1,2,3,4,5];y = [0.7652, 0.6347, 0.4496, 0.2499, 0.0621];使用梯形公式计算插值结果为 0.3865;使用拉格朗日插值多项式计算插值结果为 0.3865;使用牛顿插值多项式计算插值结果为 0.3865。

数学实验8-曲线拟合及插值

数学实验8-曲线拟合及插值

23
a =1.0e+006 *
-0.00000000000014
0.00000000107892 -0.00000304878595
0.00381927346813
-1.79012132225427
仿真结果表明, 人口增加的模型用多项式拟合能 比较准确地反映人口自然增长的规律,对长期预 测具有指导意义。
8
7 0 2 4 6 8 10 12 14 16 18 20
The length of the label is
L= 26.3809 (m)
% prog45.m This program is to fit the data by polynomial %
format long t=linspace(0,20,21); x=linspace(0,20,100); P=[9.01,8.96,7.96,7.97,8.02,9.05,10.13,11.18,12.26,13.2 8,13.32,12.61,11.29,10.22,9.15,7.90,7.95,8.86,9.81,10.8 0,10.93]; [a,s]=polyfit(t,P,12); yy=polyval(a,x); plot(x,yy,'r*--',t,P,'b+-'); L=0; for i=2:100 L=L+sqrt((x(i)-x(i-1))^2+(yy(i)-yy(i-1))^2); end disp('The length of the label is L=');disp(L);
实验13 人口数量预测模型实验
实验目的
1、学会用MATLAB软件 进行数据拟合 2、掌握在最小二乘意 义下数据拟合的理论和 方法. 3、通过对实际问题的 分析和研究,初步掌 握建立数据拟合数学 模型的方法
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第11章曲线拟合与插值在大量的应用领域中,人们经常面临用一个解析函数描述数据(通常是测量值)的任务。

对这个问题有两种方法。

在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况。

这种方法在下一节讨论。

这里讨论的方法是曲线拟合或回归。

人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过任何数据点。

图11.1说明了这两种方法。

标有'o'的是数据点;连接数据点的实线描绘了线性内插,虚线是数据的最佳拟合。

11.1 曲线拟合曲线拟合涉及回答两个基本问题:最佳拟合意味着什么?应该用什么样的曲线?可用许多不同的方法定义最佳拟合,并存在无穷数目的曲线。

所以,从这里开始,我们走向何方?正如它证实的那样,当最佳拟合被解释为在数据点的最小误差平方和,且所用的曲线限定为多项式时,那么曲线拟合是相当简捷的。

数学上,称为多项式的最小二乘曲线拟合。

如果这种描述使你混淆,再研究图11.1。

虚线和标志的数据点之间的垂直距离是在该点的误差。

对各数据点距离求平方,并把平方距离全加起来,就是误差平方和。

这条虚线是使误差平方和尽可能小的曲线,即是最佳拟合。

最小二乘这个术语仅仅是使误差平方和最小的省略说法。

图11.1 2阶曲线拟合在MATLAB中,函数polyfit求解最小二乘曲线拟合问题。

为了阐述这个函数的用法,让我们以上面图11.1中的数据开始。

» x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];» y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];为了用polyfit,我们必须给函数赋予上面的数据和我们希望最佳拟合数据的多项式的阶次或度。

如果我们选择n=1作为阶次,得到最简单的线性近似。

通常称为线性回归。

相反,如果我们选择n=2作为阶次,得到一个2阶多项式。

现在,我们选择一个2阶多项式。

» n=2; % polynomial order» p=polyfit(x, y, n)p =-9.8108 20.1293 -0.0317polyfit的输出是一个多项式系数的行向量。

其解是y = -9.8108x2+20.1293x-0.0317。

为了将曲线拟合解与数据点比较,让我们把二者都绘成图。

» xi=linspace(0, 1, 100); % x-axis data for plotting» z=polyval(p, xi);为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。

» plot(x, y, ' o ' , x, y, xi, z, ' : ' )画出了原始数据x和y,用'o'标出该数据点,在数据点之间,再用直线重画原始数据,并用点' : '线,画出多项式数据xi和z。

» xlabel(' x '), ylabel(' y=f(x) '), title(' Second Order Curve Fitting ')将图作标志。

这些步骤的结果表示于前面的图11.1中。

多项式阶次的选择是有点任意的。

两点决定一直线或一阶多项式。

三点决定一个平方或2阶多项式。

按此进行,n+1数据点唯一地确定n阶多项式。

于是,在上面的情况下,有11个数据点,我们可选一个高达10阶的多项式。

然而,高阶多项式给出很差的数值特性,人们不应选择比所需的阶次高的多项式。

此外,随着多项式阶次的提高,近似变得不够光滑,因为较高阶次多项式在变零前,可多次求导。

例如,选一个10阶多项式» pp=polyfit(x, y, 10) ;» format short e % change display format» pp.' % display polynomial coefficients as a columnans =-4.6436e+0052.2965e+006-4.8773e+0065.8233e+006-4.2948e+0062.0211e+006-6.0322e+0051.0896e+005-1.0626e+0044.3599e+002-4.4700e-001要注意在现在情况下,多项式系数的规模与前面的2阶拟合的比较。

还要注意在最小(-4.4700e-001)和最大(5.8233e+006)系数之间有7个数量级的幅度差。

将这个解作图,并把此图与原始数据及2阶曲线拟合相比较,结果如何呢?» zz=polyval(pp, xi); % evaluate 10th order polynomial» plot(x, y, ' o ' , xi, z, ' : ' , xi, zz) % plot data» xlabel(' x '), ylabel(' y=f(x) '), title(' 2nd and 10th Order curve Fitting ')在下面的图11.2中,原始数据标以'o',2阶曲线拟合是虚线,10阶拟合是实线。

注意,在10阶拟合中,在左边和右边的极值处,数据点之间出现大的纹波。

当企图进行高阶曲线拟合时,这种纹波现象经常发生。

根据图11.2,显然,‘越多就越好’的观念在这里不适用。

图11.2 2阶和10阶曲线拟合11.2 一维插值正如在前一节对曲线拟合所描述的那样,插值定义为对数据点之间函数的估值方法,这些数据点是由某些集合给定。

当人们不能很快地求出所需中间点的函数值时,插值是一个有价值的工具。

例如,当数据点是某些实验测量的结果或是过长的计算过程时,就有这种情况。

或许最简单插值的例子是MATLAB的作图。

按缺省,MATLAB用直线连接所用的数据点以作图。

这个线性插值猜测中间值落在数据点之间的直线上。

当然,当数据点个数的增加和它们之间距离的减小时,线性插值就更精确。

例如,» x1=linspace(0, 2*pi, 60);» x2=linspace(0, 2*pi, 6);» plot(x1, sin(x1), x2, sin(x2), ' - ')» xlabel(' x '), ylabel(' sin(x) '), title(' Linear Interpolation ')图11.3 线性插值图11.3是sine函数的两个图,一个在数据点之间用60个点,它比另一个只用6个点更光滑和更精确。

如曲线拟合一样,插值要作决策。

根据所作的假设,有多种插值。

而且,可以在一维以上空间中进行插值。

即如果有反映两个变量函数的插值,z=f(x, y),那么就可在x之间和在y之间,找出z的中间值进行插值。

MATLAB在一维函数interp1和在二维函数interp2中,提供了许多的插值选择。

其中的每个函数将在下面阐述。

为了说明一维插值,考虑下列问题,12小时内,一小时测量一次室外温度。

数据存储在两个MATLAB变量中。

» hours=1:12; % index for hour data was recorded»temps=[5 8 9 15 25 29 31 30 22 25 27 24]; % recorded temperatures» plot(hours, temps, hours, temps,' + ') % view temperatures» title(' Temperature ')» xlabel(' Hour '), ylabel(' Degrees Celsius ')图11.4 在线性插值下室外温度曲线正如图11.4看到的,MATLAB画出了数据点线性插值的直线。

为了计算在任意给定时间的温度,人们可试着对可视的图作解释。

另外一种方法,可用函数interp1。

» t=interp1(hours, temps, 9.3) % estimate temperature at hour=9.3t =22.9000» t=interp1(hours, temps, 4.7) % estimate temperature at hour=4.7t =22» t=interp1(hours, temps, [3.2 6.5 7.1 11.7]) % find temp at many points!t =10.200030.000030.900024.9000interp1的缺省用法是由interp1(x, y, xo)来描述,这里x是独立变量(横坐标),y是应变量(纵坐标),xo是进行插值的一个数值数组。

另外,该缺省的使用假定为线性插值。

若不采用直线连接数据点,我们可采用某些更光滑的曲线来拟合数据点。

最常用的方法是用一个3阶多项式,即3次多项式,来对相继数据点之间的各段建模,每个3次多项式的头两个导数与该数据点相一致。

这种类型的插值被称为3次样条或简称为样条。

函数interp1也能执行3次样条插值。

» t=interp1(hours, temps, 9.3, ' spline ') % estimate temperature at hour=9.3t =21.8577» t=interp1(hours, temps, 4.7, ' spline ') % estimate temperature at hour=4.7t =22.3143» t=interp1(hours, temps, [3.2 6.5 7.1 11.7], ' spline ')t =9.673430.042731.175525.3820注意,样条插值得到的结果,与上面所示的线性插值的结果不同。

因为插值是一个估计或猜测的过程,其意义在于,应用不同的估计规则导致不同的结果。

一个最常用的样条插值是对数据平滑。

也就是,给定一组数据,使用样条插值在更细的间隔求值。

例如,» h=1:0.1:12; % estimate temperature every 1/10 hour» t=interp1(hours, temps, h, ' spline ') ;» plot(hours, temps, ' - ' , hours, temps, ' + ' , h, t) % plot comparative results» title(' Springfield Temperature ')» xlabel(' Hour '), ylabel(' Degrees Celsius ')在图11.5中,虚线是线性插值,实线是平滑的样条插值,标有' + '的是原始数据。

相关文档
最新文档