第八章 插值 拟合与回归

第八章  插值 拟合与回归
第八章  插值 拟合与回归

第八章插值拟合与回归

在生产和实验中,由于函数()

f x的表达式不便于计算或者没有表达式而只有在给定点的函数值(或其导数值),为此,我们希望建立一个简单的而且便于计算的近似函数()

f x,这就用到插值和拟合方法。

g x,来逼近函数()

8.1 插值

插值就是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。

MATLAB中的插值函数主要有以下几个。

8.1.1 interp1函数

MATLAB中用于一维数据插值的函数是interp1,其调用格式为:

yi = interp1(x, y, xi, 'method, 'extrap')

该命令用于找出由参量x决定的一元函数y=y(x)在点xi处的值yi。其中x,y 为插值节点的横坐标和纵坐标,yi为在被插值点xi处的插值结果;x,y为向量,‘method’表示采用的插值方法,MATLAB提供的插值方法有几种:‘nearest’:最近邻点插值算法;

‘linear’:线性插值(默认);

‘spline’:三次样条函数插值;

‘pchip’:分段三次Hermite插值;

‘cubic’:与’pchip’操作相同;

‘v5cubic’:在MATLAB 5.0中的三次插值。

缺省时表示线性插值。

‘extrap’表示对于超出x 范围的xi 中的分量将执行特殊的外插值法extrap。

注意:所有的插值方法都要求x是单调的。

例1 对函数sin

从0到10,步长为1进行采样得到插值节点,利用线

y x x

性插值给出步长为0.25的插值函数图形。

在命令窗口输入:

>> x = 0:10;

y = x.*sin(x);

xx = 0:.25:10;

yy = interp1(x,y,xx);

plot(x,y,'kd',xx,yy)

输出结果如图8.1所示。

例2 在一天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为

12,9,9,1,0,18 ,24,28,27,25,20,18,15,13

推测中午13时的温度。

我们采用三次样条插值,在命令窗口输入:

>> x=0:2:24;

a=13;

y=[12 9 9 10 18 24 28 27 25 20 18 15 13];

y1=interp1(x,y,a,'spline')

输出结果为:

y1 =

27.8725

若要得到一天24小时的温度曲线,则输入:

xi=0:1/3600:24;

yi=interp1(x,y,xi, 'spline');

plot(x,y,'o' ,xi,yi)

温度函数曲线图如图8.2所示。

图8.1 线性插值函数曲线图图8.2 温度曲线图

8.1.2 interp2函数

MATLAB中用于二维数据插值的函数是interp2,其调用格式为:

zi = interp2(x, y, z, xi, yi, ‘method’)

该命令用于找出由参量x,y决定的二元函数z=z(x,y)在点(xi,yi)处的值zi。其中返回矩阵为zi,其元素为对应于参量xi与yi(可以是向量、或同型矩阵)的元素,若xi与yi 中有在x与y范围之外的点,则相应地返回NaN(Not a Number),method和interp1一样,常用的是‘cubic’(双三次插值),缺省为‘linear’(双线性插值算法)。

例3 在命令窗口输入

[X,Y] = meshgrid(-3:.25:3);

Z = peaks(X,Y); %具有两个变量的采样函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点。

[XI,YI] = meshgrid(-3:.125:3);

ZZ = interp2(X,Y,Z,XI,YI);

surf(X,Y,Z);hold on;

surf(XI,YI,ZZ+15) %为作比较,将插值曲面向上平移15单位。

hold off

输出结果如图8.3

图8.3 二维插值曲面

8.1.3 interp3函数

MATLAB中用于三维数据插值的函数是interp3,其调用格式为:

vi = interp3(x, y, z, v, xi, yi, zi, ‘method’)

该命令用于找出由参量x,y,z决定的三元函数v=v(x,y,z)在点(xi,yi,zi)处的

值vi。参量xi,yi,zi是同型阵列或向量。若向量参量xi,yi,zi是不同长度,不同方向(行或列)的向量,这时输出参量vi与y1,y2,y3为同型矩阵。其中y1,y2,y3为用命令meshgrid(XI,YI,ZI)生成的同型阵列。若插值点(xi,yi,zi)中有位于点(x,y,z)之外的点,则相应地返回特殊变量值NaN。method和interp1一样。

例4 三维插值举例

命令窗口输入

[x,y,z,v] = flow(20);

[xx,yy,zz] = meshgrid(.1:.25:10, -3:.25:3, -3:.25:3);

vv = interp3(x,y,z,v,xx,yy,zz);

slice(xx,yy,zz,vv,[6 9.5],[1 2],[-2 .2]);

shading interp;

colormap cool

输出图形如图8.4所示。

图8.4 三维插值结果

8.1.4 griddata函数

griddata也是一种常用的二维插值方法,其调用格式为:

zi =griddata (x, y, z, xi, yi, ‘method’)

该命令用于找出由参量x,y决定的二元函数z=z(x,y)在点(xi,yi)处的值zi。它和interp2的区别在于,interp2的插值数据必须是矩形域,即已知数据点(x,y)组成规则的矩阵,可使用meshgid生成。而griddata函数的已知数据点(x,y)不要求规则排列,特别是对试验中随机没有规律采取的数据进行插值具有很好的效果。

method包括:‘linear’(线性插值,为缺省算法);‘natural’(自然邻点插值),‘nearest’(最近邻点插值);‘cubic’(基于三角形的三次插值)和‘v4’(Matlab4中的griddata 算法)。

例5 在命令窗口输入:

rand('seed',0)

x = rand(100,1)*4-2; y = rand(100,1)*4-2;

z = x.*exp(-x.^2-y.^2);

ti = -2:.125:2;

[XI,YI] = meshgrid(ti,ti);

ZI = griddata(x,y,z,XI,YI);

mesh(XI,YI,ZI), hold;

plot3(x,y,z,'o'), hold off;

输出结果如图8.5所示。

图8.5 griddata插值结果

例6 有一组散乱数据点矩阵如下:

A=[1.486,3.059,0.1;2.121,4.041,0.1;2.570,3.959,0.1;3.439,4.396,0.1;

4.505,3.012,0.1;3.402,1.604,0.1;2.570,2.065,0.1;2.150,1.970,0.1;

1.794,3.059,0.2;

2.121,

3.615,0.2;2.570,3.473,0.2;3.421,

4.160,0.2;

4.271,3.036,0.2;3.411,1.876,0.2;2.561,2.562,0.2;2.179,2.420,0.2;

2.757,

3.024,0.3;3.439,3.970,0.3;

4.084,3.036,0.3;3.402,2.077,0.3;

2.879,

3.036,0.4;3.421,3.793,0.4;3.953,3.036,0.4;3.402,2.219,0.4;

3.000,3.047,0.5;3.430,3.639,0.5;3.822,3.012,0.5;3.411,2.385,0.5;

3.103,3.012,0.6;3.430,3.462,0.6;3.710,3.036,0.6;3.402,2.562,0.6;

3.224,3.047,0.7;3.411,3.260,0.7;3.542,3.024,0.7;3.393,2.763,0.7];

x=A(:,1);y=A(:,2);z=A(:,3);

[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x),20)',linspace(min(y),max(y),2 0),'v4');

mesh(X,Y,Z); hold on

plot3(x,y,z,'o'); hold off;

输出结果如图8.6所示。

图8.6 散乱数据插值图

8.1.5 spline函数

该函数是利用三次样条对数据进行插值,其调用格式为:

yy = spline(x,y,xx)

该命令用三次样条插值计算出由向量x与y 确定的一元函数y=f(x)在点xx 处的值。若参量y 是一矩阵,则以y 的每一列和x 配对,再分别计算由它们确定的函数在点xx 处的值。则yy 是一个阶数为length(xx)*size(y,2)的矩阵。

例7 对离散地分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值。

在命令窗口输入:

x = [0 2 4 5 8 12 12.8 17.2 19.9 20];

y = exp(x).*sin(x);

xx = 0:.25:20;

yy = spline(x,y,xx);

plot(x,y,'o',xx,yy)

输出结果如图8.7。

8

图8.7 三次样条插值

8.2 拟合

拟合就是用连续曲线近似地刻画或比拟平面上离散点组所表示的坐标之间的函数关系的一种数据处理方法。如果已知某函数的若干离散函数值{f1,f2,…,fn},通过调整该函数中若干待定系数f(λ1, λ2,…,λn),使得该函数与已知点集的差别(最小二乘意义)最小。如果待定函数是线性,就叫线性拟合或者线性回归(主要在统计中),否则叫做非线性拟合或者非线性回归。

MATLAB中提供了线性最小二乘拟合和非线性最小二乘拟合函数。

8.2.1 polyfit函数

ployfit函数是多项式拟合函数,其调用格式为:

p = polyfit(x,y,n)

其中x,y为长度相同的向量,n为拟合多项式的次数,返回值p是拟合多项式的系数向量,幂次由高到低,拟合多项式在x处的值可以通过y=polyval(p,x)来计算。

例8,2004年全国大学生数学建模竞赛C题,饮酒驾车问题,时间和血液中酒精浓度的函数关系,可以利用polyfit进行拟合。

可输入:

>> time=[0.25, 0.5 0.75, 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16]';

vol=[20 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12 10 7 7 4]';

plot(time,vol,'o')

p=polyfit(time,vol,7) % 7次多项式拟合

f=polyval(p,time); %求多项式的值

hold on

plot(time,f) hold off

输出7多项次的系数向量为:

p =

0.0002 -0.0113 0.2817 -3.6307 25.5345 -94.6710 153.8757 -1.2592 拟合曲线如图8.8所示。

图8.8 血液酒精浓度拟合曲线

MATLAB 提供了两个非线性最小二乘拟合函数:lsqcurvefit 和lsqnonlin 。两个命令都要先建立M-文件fun.m ,在其中定义函数f(x),但两者定义f(x)的方式是不同的。

8.2.2 lsqcurvefit 函数

该函数用来进行非线性拟合,其调用格式为:

x = lsqcurvefit ('fun',x0,xdata,ydata,options);

其中,fun 为事先建立的拟合函数F(x,xdata),其中自变量x 表示拟合函数中的待定参数,xdata 为已知拟合节点的x 坐标,x0为待定参数x 的迭代初始值,xdata,ydata 为已知数据点的x 和y 坐标,options 是一些控制参数。

lsqcurvefit 函数用来求含参数x (向量)的向量值函数

F(x,xdata)={f(x,xdata 1), f(x,xdata 2),…, f(x,xdata n )}

中的参数x (向量),使得

2

1

[(,)]

n

i

i

i f x xdata ydata =-∑

最小。

例9 根据表1中的数据,利用lsqcurvefit 函数拟合0.02()e kx y x a b -=+。

表1 已知数据点

首先建立拟合函数的M文件myfit1.m,其内容如下:

function f = myfit1(x,xdata)

f = x(1)+x(2)*exp(-0.02*x(3)*xdata);

其中x(1),x(2),x(3)分别表示拟合曲线中的参数a,b,k。

然后在命令窗口输入:

>> xdata = 100:100:1000;

ydata = 1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];

x0=[0.2,0.05,0.05];

x = lsqcurvefit ('myfit1',x0,xdata,ydata)

f= myfit1(x,xdata)

输出结果为:

x =

0.0069 -0.0029 0.0809

f =

Columns 1 through 9

0.0044 0.0048 0.0051 0.0054 0.0056 0.0058 0.0060 0.0061 0.0063

Column 10

0.0064 %拟合函数在数据点的函数值

拟合曲线如图8.9。

>> plot(xdata,ydata,'o',xdata,f)

-3

图8.9 拟合曲线

8.2.3 lsqnonlin 函数

该函数用来进行非线性拟合,其调用格式为:

x = lsqnonlin ('fun',x0, options);

其中fun 为事先建立的拟合函数F(x),其中自变量x 表示拟合函数中的待定参数,x0为待定参数x 的迭代初始值,options 是一些控制参数。

由于lsqnonlin 中定义的拟合函数的自变量是x ,所以已知参数xdata,ydata 应写在该函数中。

lsqnonlin 函数用来求含参量x (向量)的向量值函数

f(x)={f 1(x), f 2(x),…,f n (x)}

中的参量x ,使得21()n

i i f x =∑最小。其中fi(x)=f(x,xdata i ,ydayta i )=F(x, xdata i )-

ydata i 。

例10 根据表1中的数据,利用lsqnonlin 函数拟合0.02()e kx y x a b -=+。 首先建立拟合函数的M 文件myfit2.m ,其内容如下: function f=myfit2(x) xdata=100:100:1000;

ydata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59]; f=x(1)+x(2)*exp(-0.02*x(3)*xdata)- ydata; 然后在命令窗口输入:

>> x0=[0.2,0.05,0.05]; x = lsqnonlin('myfit2',x0) f = myfit2(x)

输出结果为:

x =

0.0069 -0.0029 0.0809 f =

1.0e-03 *

Columns 1 through 9

-0.0971 -0.1739 -0.2164 -0.2463 -0.2666 -0.2713 -0.2651 -0.2538 -0.2436

Column 10 -0.2313

该结果与lsqcurvefit 函数拟合的结果相同。

8.3 回归分析

MATLAB 中提供了一些线性和非线性回归分析函数。 8.3.1 regress 函数

一般地,称由01y x ββε=++确定的模型为一元线性回归模型,记为

012

0,y x E D ββε

εεσ

=++??==? 固定的未知参数0β、1β称为回归系数,自变量x 也称为回归变量。

一般地,称

2

()0,(,)n

Y X E COV I βε

εεεσ=+??==? 为高斯—马尔柯夫线性模型(k 元线性回归模型)。

1......n y Y y ??????=????

??

,1112121

22212

1...1.........

.........1...k k n n nk x x x x

x x X x x x ?????

?=??

????,01...k ββββ??????=??????,12...n εεεε??

????=??????

MATLAB 提供了多元线性回归函数regress ,采用的是最小二乘估计,其调用格式有:

b = regress (y,x)

返回值为线性模型y = x*b 的回归系数向量。其中x 为n×(k+1) 矩阵,行对

应于观测值,列对应于预测变量,y为n维向量,为因变量,一元线性回归可取k=1。

[b,bint,r,rint,stats] = regress(y,x,alpha)

其中bint是回归系数的区间估计,r是残差,rint是置信区间,stats是用于检验回归模型的统计量,有四个数值:相关系数r^2,F值,与F对应的概率P和误差方差估计,alpha是显著性水平(缺省的时候为0.05)。相关系数r^2越接近1,说明回归方程越显著;与F对应的概率P

例11输入

>> y=[8.8818 8.9487 9.0541 9.1545 9.2693 9.4289 9.6160 9.8150 9.9825 10.1558 10.3193]';

k= [7.8381 7.9167 8.0048 8.1026 8.2556 8.5822 8.8287 9.0756 9.2175 9.4148 9.6198]';

l= [8.3871 8.3872 8.3935 8.3971 8.4025 8.4048 8.4079 8.4141 8.4261 8.4377 8.4444]';

t= [9.9551 9.9057 10.0972 9.9537 9.9370 9.9449 9.9636 10.1291 10.1573 10.2944 10.2093]';

x= [ones(size(k)) k l t];

[b,bint,r,rint,stats]=regress(y,x)

输出结果为

b =

-55.4988

0.5644

7.1254

0.0222

bint =

-83.6008 -27.3968

0.4693 0.6594

3.5740 10.6769

-0.1914 0.2359

r =

-0.0262

-0.0032

0.0033

0.0261

0.0164

-0.0249

0.0006

0.0124

0.0137

-0.0101

-0.0081

rint =

-0.0620 0.0097

-0.0479 0.0415

-0.0306 0.0372

-0.0111 0.0632

-0.0218 0.0546

-0.0621 0.0124

-0.0385 0.0397

-0.0190 0.0438

-0.0304 0.0577

-0.0460 0.0259

-0.0420 0.0258

stats =

1.0e+003 *

0.0010 2.1022 0.0000 0.0000

该结果说明y=-55.4988+0.5644k+7.1254l+0.0222t,stats中的数据说明r2=1,F=2102.2,p=0,由于p<0.05可知回归模型成立。

可以利用rcoplot函数画出残差及其置信区间,红色的表示超出期望值的数

据,圆圈代表残差的值,竖线代表置信区间的范围。

输入

>> rcoplot(r,rint) 输出残差图见8.10。

R e s i d u a l s

Case Number

图8.10 残差图

8.3.2 rstool 函数

该函数是多元二项式回归函数,其调用格式为

rstool(x,y, 'model',alpha)

其中x 为n×m 为矩阵,y 为n 维列向量,'model'为以下4种模型:

'linear'(线性,缺省):011m m y x x βββ=+++;

'interaction'(交叉):0111m m jk j k j k m

y x x x x ββββ≤≠≤=++

++

'quadratic'(完全二次):0111,m m jk j k j k m

y x x x x ββββ≤≤=++++

'purequadratic'(纯二次):20111

n

m m jj j j y x x x ββββ==++++∑。

alpha 为显著性水平,默认值为0.05。

例13 设某商品的需求量与消费者的平均收入、商品价格的统计数据如表2,建立多元二项式纯二次回归模型,并预测平均收入为1000、价格为6时的商品需求量。

表2 需求量、平均收入和价格统计表

需求量 100 75 80 70 50 65 90 100 110 60 收入 1000 600 1200 500 300 400 1300 1100 1300 300 价格

5

7

6

6

8

7

5

4

3

9

可以直接使用多元二项式回归,在命令窗口输入:

>> x1=[1000 600 1200 500 300 400 1300 1100 1300 300];

x2=[5 7 6 6 8 7 5 4 3 9];

y=[100 75 80 70 50 65 90 100 110 60]';

x=[x1' x2'];

rstool(x,y,'purequadratic')

其输出如图8.11。

图8.11 多元二项式回归

在图8.11中x1上面的方框中输入1000,x2上面的方框中输入6,在图形框左侧的“Predicted Y1”下方的数据变为88.47981,即预测出平均收入为1000,价格为6时的商品需求量为88.4791。

单击图形框左边Export,则出现图8.12对话框,可以将回归参数beta、剩余标准差rmse和残差residuals传送到MATALB的工作区中。

图8.12输出对话框

在命令窗口输入:

>> beta

rmse

输出结果为:

beta = 110.5313 0.1464 -26.5709 -0.0001 1.8475 rmse = 4.5362 residuals = 5.2724 -0.7162 -4.5158 -1.9390 -3.3315 3.4566 3.4843 -3.4452 -0.0976 1.8320

故回归模型为:22

1212110.53130.146426.57090.0001 1.8475y x x x x =+--+,剩

余标准差为4.5362, 说明此回归模型的显著性较好。

还可将该模型转化为多元线性回归模型,利用regress 函数进求解。 可输入:

>> x1=[1000 600 1200 500 300 400 1300 1100 1300 300]; x2=[5 7 6 6 8 7 5 4 3 9];

X=[ones(10,1) x1' x2' (x1.^2)' (x2.^2)']; [b,bint,r,rint,stats]=regress(y,X);

输出结果为:

b =

110.5313

0.1464

-26.5709

-0.0001

1.8475

stats =

0.9702 40.6656 0.0005 20.5771

输出的回归参数和rstool函数的结果相同。

8.3.3 nlinfit函数和nlintool函数

nlinfit函数用来确定非线性回归系数,调用格式为:

[beta, r, J] = nlinfit (x, y, 'modelfun', beta0)

其中输入数据x,y分别为n×p维矩阵和n维列向量,对于一元非线性回归,取p=1,即可;'modelfun'为事先定义的非线性回归函数的M文件,是回归系数beta 和x的函数;beta0是回归系数的初值,输出参数beta是估计出的回归系数,r 为残差,J为Jacobain矩阵。

例14 根据表1中的数据,利用nlinfit函数进行非线性回归,回归函数为

0.02

=+。

y x a b-

()e kx

首先建立回归函数的M文件myfit3.m,内容如下:

function f = myfit3(beta,xdata)

f = beta(1)+beta(2)*exp(-0.02*beta(3)*xdata);

在命令窗口输入:

>> xdata = 100:100:1000;

ydata = 1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];

beta0 = [0.1 0.1 0.2];

[beta,r,J] = nlinfit(xdata,ydata,'myfit3',beta0) ;

beta

输出结果为:

beta =

0.0070 -0.0030 0.1012

这与例9结果(0.0069 -0.0029 0.0809)很接近。

可以利用nlpredci 函数求nlinfit 或nlintool 所得的回归函数在x 处的预测值Y 及其预测值的显著性为1-alpha 的置信区间Y±delta 。该函数的调用格式为:

[Y,delta]=nlpredci('modelfun',x,beta,r,J)

在命令窗口输入

>> [Y,delta]=nlpredci('myfit3',xdata,beta,r,J) ; plot(xdata,ydata,'o',xdata,Y,'r')

输出回归曲线如图8.13。将其和例9的拟合曲线对比后可见,nlinfit 函数的回归效果明显优于lsqcurvefit 函数,对比结果见图8.14(红色曲线为nlinfit 函数得到的回归曲线,蓝颜色的为lsqcurvefit 函数得到的拟合曲线)。

-3

图8.13 回归曲线 图8.14 对比图

nlintool 函数是非线性回归工具命令,其调用格式为:

nlintool(x,y,'modelfun',beta0,alpha)

在命令窗口输入:

>> nlintool(xdata,ydata,'myfit3',beta0) 输出如图8.15。

100

200 300 400 500 600 700 800 900 1000

4

图8.15 nlintool函数

类似于多元二项式回归函数rstool,按Export可以将回归参数beta等传送到MATALB的工作区中。

如输入:

>> beta

输出结果为:

beta =

0.0070 -0.0030 0.1012

这和利用nlinfit函数得到的回归系数相同。

小结:

插值:

1. interp1:一维数据插值的函数

2. interp2:二维数据插值的函数

3. interp3:三维数据插值的函数

4. griddata:散乱点插值函数

5. spline:三次样条插值

拟合:

1. ployfit:多项式拟合函数

2. lsqcurvefit:非线性拟合函数

3. lsqnonlin:非线性拟合函数

回归分析:

1. regress:多元线性回归函数

2. rstool:多元二项式回归函数

3. nlinfit:多元非线性回归函数

4. nlintool:多元非线性回归工具

实验四 插值法与曲线拟合

计算方法实验报告 专业班级:医学信息工程一班姓名:陈小芳学号:201612203501002 实验成绩: 1.【实验题目】 插值法与曲线拟合 2.【实验目的】 3.【实验内容】 4. 【实验要求】

5. 【源程序(带注释)】 (1)拉格朗日插值 #include #include #include #include #include #define n 4 //插值节点的最大下标 main() { double x1[n+1]={0.4,0.55,0.65,0.8,0.9}; double y1[n+1]={0.4175,0.57815,0.69657,0.88811,1.02652}; double Lagrange(double x1[n+1],double y1[n+1],float t); int m,k;float x,y;float X;double z; printf("\n The number of the interpolation points is m ="); //输入插值点的个数 while(!scanf("%d",&m)) { fflush(stdin); printf("\n输入错误,请重新输入:\n"); printf("\n The number of the interpolation points is m ="); } for(k=1;k<=m;k++) { printf("\ninput X%d=",k); while(!scanf("%f",&X)) { fflush(stdin); printf("\n输入错误,请重新输入:\n"); printf("\ninput X%d=",k); } z=Lagrange(x1,y1,X); printf("P(%f)=%f\n",X,z); } getch(); return (0); } double Lagrange(double x[n+1],double y[n+1],float X) { int i,j;

插值法和拟合实验报告(数值计算)

插值法和拟合实验报告 一、 实验目的 1.通过进行不同类型的插值,比较各种插值的效果,明确各种插值的优越性; 2.通过比较不同次数的多项式拟合效果,了解多项式拟合的原理; 3.利用matlab 编程,学会matlab 命令; 4.掌握拉格朗日插值法; 5.掌握多项式拟合的特点和方法。 二、 实验题目 1.、插值法实验 将区间[-5,5]10等分,对下列函数分别计算插值节点 k x 的值,进行不同类型 的插值,作出插值函数的图形并与)(x f y =的图形进行比较: ;11)(2x x f += ;a r c t a n )(x x f = .1)(42 x x x f += (1) 做拉格朗日插值; (2) 做分段线性插值; (3) 做三次样条插值. 2、拟合实验 给定数据点如下表所示: 分别对上述数据作三次多项式和五次多项式拟合,并求平方误差,作出离散函数 ),(i i y x 和拟合函数的图形。 三、 实验原理 1.、插值法实验

∏∑∏∏∏∑∑≠==≠=≠=≠=+-==--= =-= ==-=-=----==++==j i j j i i i i i n i i n n j i j j n j i j j i i n j i j j n i i i n i i n n n o i n i i n x x x x x y x l x L x x c n i x x c x x x c x x x x x x x x c y x l x L y x l y x l y x l x L ,00 ,0,0,01100 00 )(l )()() (1 ,1,0, 1)()(l ) ()())(()()()()()()()(, 故, 得 再由,设 2、拟合实验

第五章插值与拟合答案—牟善军

习题5.1: Matlab程序如下: clc,clear x=1:0.5:10; y=x.^3-6*x.^2+5*x-3; y0=y+rand; f1=polyfit(x,y0,1) y1=polyval(f1,x); plot(x,y,'+',x,y1); grid on title('一次拟合曲线'); figure(2); f2=polyfit(x,y0,2) y2=polyval(f2,x); plot(x,y,'+',x,y2); grid on title('二次拟合曲线'); figure(3); f4=polyfit(x,y0,4) y3=polyval(f4,x); plot(x,y,'+',x,y3); grid on title('四次拟合曲线'); figure(4); f6=polyfit(x,y0,6) y4=polyval(f6,x); plot(x,y,'+',x,y4); grid on title('六次拟合曲线'); 计算结果及图如下 f1 = 43.2000 -148.8307 f2 = 10.5000 -72.3000 90.0443

f4 = 0.0000 1.0000 -6.0000 5.0000 -2.3557 f6 = -0.0000 0.0000 -0.0000 1.0000 -6.0000 5.0000 -2.3557 5.2高程数据问题解答如下:matlab程序: clc,clear x0=0:400:5600 y0=0:400:4800 z0=[1350 1370 1390 1400 1410 960 940 880 800 690 570 430 290 210 150 1370 1390 1410 1430 1440 1140 1110 1050 950 820 690 540 380 300 210 1380 1410 1430 1450 1470 1320 1280 1200 1080 940 780 620 460 370 350 1420 1430 1450 1480 1500 1550 1510 1430 1300 1200 980 850 750 550 500

计算方法--插值法与拟合实验

实验三 插值法与拟合实验 一、实验目的 1. 通过本实验学会利用程序画出插值函数,并和原图形相比较 2. 通过本实验学会拟合函数图形的画法,并会求平方误差 二、实验题目 1. 插值效果的比较 实验题目:区间[]5,5-10等分,对下列函数分别计算插值节点k x 的值,进行不同类型的插值,作出插值函数的图形并与)(x f y =的图形进行比较: 2 11)(x x f +=; x x f arctan )(=; 4 41)(x x x f += (1) 做拉格朗日插值; (2) 做三次样条插值. 2. 拟合多项式实验 实验题目:给定数据点如下表所示: 分别对上述数据作三次多项式和五次多项式拟合,并求平方误差,作出离散函数),(i i y x 和拟合函数的图形. 三、实验原理 本实验应用了拉格朗日插值程序、三次样条插值程序、多项式拟合程序等实验原理. 四、实验内容 1(1) figure x=-5:0.2:5; y=1./(1+x.^2); plot(x,y,'r'); hold on %拉格朗日插值 x1=-5:1:5; y1=1./(1+x1.^2); xx=-4.5:0.5:4.5; yy=malagr(x1,y1,xx); plot(xx,yy,'+') %三次样条插值 dy0=1./(1+25); dyn=1./(1+25);

m=maspline(x1,y1,dy0,dyn,xx); plot(xx,m,'ok') 1(2) x=-5:0.2:5; y=atan(x); plot(x,y,'r'); hold on %拉格朗日插值 x1=-5:1:5; y1=atan(x1); xx=-4.5:0.5:4.5; yy=malagr(x1,y1,xx); plot(xx,yy,'+') %三次样条插值 dy0=1./(1+25); dyn=1./(1+25); m=maspline(x1,y1,dy0,dyn,xx); plot(xx,m,'ok') 1(3) x=-5:0.2:5; y=x.^2./(1+x.^4); plot(x,y,'r'); hold on %拉格朗日插值 x1=-5:1:5; y1=x1.^2./(1+x1.^4); xx=-4.5:0.5:4.5; yy=malagr(x1,y1,xx); plot(xx,yy,'+') %三次样条插值 dy0=1./(1+25); dyn=1./(1+25); m=maspline(x1,y1,dy0,dyn,xx); plot(xx,m,'ok') 2. x=[-1.5 -1.0 -0.5 0.0 0.5 1.0 1.5]'; y=[-4.45 -0.45 0.55 0.05 -0.44 0.54 4.55]'; plot(x,y,'or'); hold on %三次多项式拟合 p1=mafit(x,y,3);

插值与拟合(使用插值还是拟合)

利用matlab实现插值与拟合实验 张体强1026222 张影 晁亚敏 [摘要]:在测绘学中,无论是图形处理,还是地形图处理等,大多离不开插值与拟合的应用,根据插值与拟合原理,构造出插值和拟合函数,理解其原理,并在matlab平台下,实现一维插值,二维插值运算,实现多项式拟合,非线性拟合等,并在此基础上,联系自己所学专业,分析其生活中特殊例子,提出问题,建立模型,编写程序,以至于深刻理解插值与拟合的作用。 [关键字]: 测绘学插值多项式拟合非线性拟合 [ Abstract]: in surveying and mapping, whether the graphics processing, or topographic map processing and so on, are inseparable from the interpolation and fitting application, according to the interpolation and fitting theory, construct the fitting and interpolation function, understanding its principle, and MATLAB platform, achieve one-dimensional interpolation, two-dimensional interpolation, polynomial fitting, non-linear fitting, and on this basis, to contact their studies, analysis of their living in a special example, put forward the question, modeling, programming, so that a deep understanding of interpolation and fitting function. [ Key words]: Surveying and mapping interpolation polynomial fitting nonlinear

matlab中插值拟合与查表

MATLAB中的插值、拟合与查表 插值法是实用的数值方法,是函数逼近的重要方法。在生产和科学实验中,自变量x与因变量y的函数y = f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。当要求知道观测点之外的函数值时,需要估计函数值在该点的值。 如何根据观测点的值,构造一个比较简单的函数y=φ(x),使函数在观测点的值等于已知的数值或导数值。用简单函数y=φ(x)在点x处的值来估计未知函数y=f(x)在x点的值。寻找这样的函数φ(x),办法是很多的。φ(x)可以是一个代数多项式,或是三角多项式,也可以是有理分式;φ(x)可以是任意光滑(任意阶导数连续)的函数或是分段函数。函数类的不同,自然地有不同的逼近效果。在许多应用中,通常要用一个解析函数(一、二元函数)来描述观测数据。 根据测量数据的类型: 1.测量值是准确的,没有误差。 2.测量值与真实值有误差。 这时对应地有两种处理观测数据方法: 1.插值或曲线拟合。 2.回归分析(假定数据测量是精确时,一般用插值法,否则用曲线拟合)。 MATLAB中提供了众多的数据处理命令。有插值命令,有拟合命令,有查表命令。 2.2.1 插值命令 命令1 interp1 功能一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。各个参量之间的关系示意图为图2-14。 格式 yi = interp1(x,Y,xi) %返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y的内插值决定。参量x指定数据Y的点。若Y为一矩阵,则按Y的每列计算。yi是阶数为length(xi)*size(Y,2)的输出矩阵。 yi = interp1(Y,xi) %假定x=1:N,其中N为向量Y的长度,或者为矩阵Y的行数。 yi = interp1(x,Y,xi,method) %用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算;

第四章曲线拟合和多项式插值 - Hujiawei Bujidao

数值计算之美SHU ZHI JI SUAN ZHI MEI 胡家威 http://hujiaweibujidao.github.io/ 清华大学逸夫图书馆·北京

内容简介 本书是我对数值计算中的若干常见的重要算法及其应用的总结,内容还算比较完整。 本人才疏学浅,再加上时间和精力有限,所以本书不会详细介绍很多的概念,需要读者有一定的基础或者有其他的参考书籍,这里推荐参考文献中的几本关于数值计算的教材。 本书只会简单介绍下算法的原理,对于每个算法都会附上我阅读过的较好的参考资料以及算法的实现(Matlab或者其他语言),大部分代码是来源于参考文献[1]或者是经过我改编而成的,肯定都是可以直接使用的,需要注意的是由于Latex对代码的排版问题,导致中文注释中的英文字符经常出现错位,对于这种情况请读者自行分析,不便之处还望谅解。写下这些内容的目的是让自己理解地更加深刻些,顺便能够作为自己的HandBook,如有错误之处,还请您指正,本人邮箱地址是:hujiawei090807@https://www.360docs.net/doc/184525050.html,。

目录 第四章曲线拟合和多项式插值1 4.1曲线拟合 (1) 4.1.1使用线性方程进行曲线拟合 (1) 4.1.2非线性方程进行曲线拟合 (2) 4.1.3使用二次或者高次多项式进行曲线拟合[最小二乘问题].3 4.2多项式插值 (4) 4.2.1拉格朗日插值多项式 (4) 4.2.2牛顿插值多项式 (5) 4.2.3分段线性插值 (7) 4.2.4保形分段三次插值 (8) 4.2.5三次样条插值 (10) 4.3Matlab函数解析 (13) 参考文献14

数学建模插值及拟合详解

插值和拟合 实验目的:了解数值分析建模的方法,掌握用Matlab进行曲线拟合的方法,理解用插值法建模的思想,运用Matlab一些命令及编程实现插值建模。 实验要求:理解曲线拟合和插值方法的思想,熟悉Matlab相关的命令,完成相应的练习,并将操作过程、程序及结果记录下来。 实验内容: 一、插值 1.插值的基本思想 ·已知有n +1个节点(xj,yj),j = 0,1,…, n,其中xj互不相同,节点(xj, yj)可看成由某个函数y= f (x)产生; ·构造一个相对简单的函数y=P(x); ·使P通过全部节点,即P (xk) = yk,k=0,1,…, n ; ·用P (x)作为函数f ( x )的近似。 2.用MA TLAB作一维插值计算 yi=interp1(x,y,xi,'method') 注:yi—xi处的插值结果;x,y—插值节点;xi—被插值点;method—插值方法(‘nearest’:最邻近插值;‘linear’:线性插值;‘spline’:三次样条插值;‘cubic’:立方插值;缺省时:线性插值)。注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。 练习1:机床加工问题 每一刀只能沿x方向和y方向走非常小的一步。 表3-1给出了下轮廓线上的部分数据 但工艺要求铣床沿x方向每次只能移动0.1单位. 这时需求出当x坐标每改变0.1单位时的y坐标。 试完成加工所需的数据,画出曲线. 步骤1:用x0,y0两向量表示插值节点; 步骤2:被插值点x=0:0.1:15; y=y=interp1(x0,y0,x,'spline'); 步骤3:plot(x0,y0,'k+',x,y,'r') grid on 答:x0=[0 3 5 7 9 11 12 13 14 15 ]; y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6 ]; x=0:0.1:15; y=interp1(x0,y0,x,'spline'); plot(x0,y0,'k+',x,y,'r') grid on

第4、5讲 插值与拟合 作业参考答案

第四、五讲作业题参考答案 一、填空题 1、拉格朗日插值基函数在节点上的取值是( 0或1 )。 2、当1,1,2x =-,时()034f x =-, ,,则()f x 的二次插值多项式为 ( 2527 633 x x +- )。 3、由下列数据 所确定的唯一插值多项式的次数为( 2次 )。 4、根据插值的定义,函数()x f x e -=在[0,1]上的近似一次多项式1()P x = ( 1(1)1e x --+ ),误差估计为( 18 )。 5、在做曲线拟合时,对于拟合函数x y ax b = +,引入变量变换y =( 1 y ),x =( 1 x )来线性化数据点后,做线性拟合y a bx =+。 6、在做曲线拟合时,对于拟合函数Ax y Ce =,引入变量变换( ln()Y y = )、 X x =和B C e =来线性化数据点后,做线性拟合Y AX B =+。 7、设3()1f x x x =+-,则差商[0,1,2,3]f =( 1 )。 8、在做曲线拟合时,对于拟合函数()A f x Cx =,可使用变量变换(ln Y y =)(ln X x = )和B C e =来线性化数据点后,做线性拟合Y AX B =+。 9、设(1)1,(0)0,(1)1,(2)5,()f f f f f x -====则的三次牛顿插值多项式为 ( 3211 66x x x +-),其误差估计式为( 4()(1)(1)(2),(1,2)24f x x x x ξξ+--∈-) 10、三次样条插值函数()S x 满足:()S x 在区间[,]a b 内二阶连续可导, (),,0,1,2,,,k k k k S x y x y k n ==(已知)且满足()S x 在每一个子区间1[,] k k x x +上是( 三次多项式 )。

matlab实现插值法和曲线拟合电子教案

m a t l a b实现插值法和 曲线拟合

插值法和曲线拟合 电子科技大学 摘要:理解拉格朗日多项式插值、分段线性插值、牛顿前插,曲线拟合,用matlab编程求解函数,用插值法和分段线性插值求解同一函数,比较插值余项;用牛顿前插公式计算函数,计算函数值;对于曲线拟 合,用不同曲线拟合数据。 关键字:拉格朗日插值多项式;分段线性插值;牛顿前插;曲线拟合 引言: 在数学物理方程中,当给定数据是不同散点时,无法确定函数表达式,求解函数就需要很大的计算量,我们有多种方法对给定的表格函数进行求解,我们这里,利用插值法和曲线拟合对函数进行求解,进一步了解函数性质,两种方法各有利弊,适合我们进行不同的散点函数求解。 正文: 一、插值法和分段线性插值 1拉格朗日多项式原理 对某个多项式函数,已知有给定的k + 1个取值点: 其中对应着自变量的位置,而对应着函数在这个位置的取值。 假设任意两个不同的x j都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为: 其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为: [3] 拉格朗日基本多项式的特点是在上取值为1,在其它的点 上取值为0。 2分段线性插值原理 给定区间[a,b], 将其分割成a=x 0

第五章数据拟合.

第五章 数据拟合 这就是数据拟合成曲线的思想,简称为曲线拟合(fitting a curve)。根据一组二维数据,即平面上的若干点,要求确定一个一元函数y = f (x ),即曲线,使这些点与曲线总体来说尽量接近, 曲线拟合其目的是根据实验获得的数据去建立因变量与自变量之间有效的经验函数关系,为进一步的深入研究提供线索。本章的目的,掌握一些曲线拟合的基本方法,弄清楚曲线拟合与插值方法之间的区别,学会使用MATLAB 软件进行曲线拟合。 §1 最小二乘法 给定平面上的点(x i, y i ),(i = 1,2,…,n ),进行曲线拟合有多种方法,其中最小二乘法是解决曲线拟合最常用的方法。最小二乘法的原理是: 求 ∑∑==-==n i i i n i i y x f x f 1212])([),(δδ使 达到最小 如图1所示,其中δi 为点(x i ,y i )与曲线y=f (x )的距离。曲线拟合的实际含义是寻求一个函数y=f (x ),使f (x )在某种准则下与所有数据点最为接近,即曲线拟合得最好。最小二乘准则就是使所有散点到曲线的距离平方和最小。拟合时选用一定的拟合函数f (x ) 形式,设拟合函数可由一些简单的“基函数”(例如幂函数,三角函数等等) )(),...,(),(10x x x m ???来线性表示: )(...)()()(1100x c x c x c x f m m ???+++= 图1 曲线拟合示意图 现在要确定系数c 0,c 1,…,c m ,使d 达到极小。为此,将f (x )的表达式代入d 中,d 就成为c 0,c 1,…,c m 的函数,求d 的极小,就可令d 对 c i 的偏导数等于零,于是得到m +1个方程组,从中求解出c i 。通常取基函数为1,x ,x 2,x 3,…,x m ,这时拟合函数f (x )为多项式函数。当m =1时,f (x ) = a + bx ,称为一元线性拟合函数,它是曲线拟合最简单的形式。除此之外,常用的一元曲线拟合函数还有双曲线f (x ) = a + b/x ,指数曲线f (x ) = a e bx 等,对于这些曲线,拟合前须作变量代换,转化为线性函数。

数学建模案例分析插值与拟合方法建模1数据插值方法及应用

第十章 插值与拟合方法建模 在生产实际中,常常要处理由实验或测量所得到的一批离散数据,插值与拟合方法就是要通过这些数据去确定某一类已经函数的参数,或寻求某个近似函数使之与已知数据有较高的拟合精度。插值与拟合的方法很多,这里主要介绍线性插值方法、多项式插值方法和样条插值方法,以及最小二乘拟合方法在实际问题中的应用。相应的理论和算法是数值分析的内容,这里不作详细介绍,请参阅有关的书籍。 §1 数据插值方法及应用 在生产实践和科学研究中,常常有这样的问题:由实验或测量得到变量间的一批离散样点,要求由此建立变量之间的函数关系或得到样点之外的数据。与此有关的一类问题是当原始数据 ),(,),,(),,(1100n n y x y x y x 精度较高,要求确定一个初等函数)(x P y =(一般用多项式或分段 多项式函数)通过已知各数据点(节点),即n i x P y i i ,,1,0,)( ==,或要求得函数在另外一些点(插值点)处的数值,这便是插值问题。 1、分段线性插值 这是最通俗的一种方法,直观上就是将各数据点用折线连接起来。如果 b x x x a n =<<<= 10 那么分段线性插值公式为 n i x x x y x x x x y x x x x x P i i i i i i i i i i ,,2,1,,)(11 1 11 =≤<--+--= ----- 可以证明,当分点足够细时,分段线性插值是收敛的。其缺点是不能形成一条光滑曲线。 例1、已知欧洲一个国家的地图,为了算出它的国土面积,对地图作了如下测量:以由西向东方向为x 轴,由南向北方向为y 轴,选择方便的原点,并将从最西边界点到最东边界点在x 轴上的区间适当的分为若干段,在每个分点的y 方向测出南边界点和北边界点的y 坐标y1和y2,这样就得到下表的数据(单位:mm )。

插值法与数据拟合法

第七讲插值方法与数据拟合 § 7.1 引言 在工程和科学实验中,常常需要从一组实验观测数据(x i , y i ) (i= 1, 2, …, n) 揭示自变量x与因变量y 之间的关系,一般可以用一个近似的函数关系式y = f (x) 来表示。函数f (x) 的产生办法因观测数据与要求的不同而异,通常可采用两种方法:插值与数据拟合。 § 7.1.1 插值方法 1.引例1 已经测得在北纬32.3?海洋不同深度处的温度如下表: 根据这些数据,我们希望能合理地估计出其它深度(如500米、600米、1000米…)处的水温。 解决这个问题,可以通过构造一个与给定数据相适应的函数来解决,这是一个被称为插值的问题。 2.插值问题的基本提法 对于给定的函数表 其中f (x) 在区间[a, b] 上连续,x0,x1,…,x n为[a, b] 上n + 1个互不相同的点,要求在一个性质优良、便于计算的函数类{P(x)} 中,选出一个使 P(x i ) = y i,i= 0, 1, …, n(7.1.1) 成立的函数P(x) 作为 f (x) 的近似,这就是最基本的插值问题(见图7.1.1)。 为便于叙述,通常称区间[a, b] 为插值区间,称点x0,x1,…,x n为插值节点,称函数类{P(x)} 为插值函数类,称式(7.1.1) 为插值条件,称函数P(x) 为插值函数,称f (x) 为被插函数。求插值函数P(x) 的方法称为插值法。 § 7.1.2 数据拟合 1.引例2 在某化学反应中,已知生成物的浓度与时间有关。今测得一组数据如下: 根据这些数据,我们希望寻找一个y = f (t) 的近似表达式(如建立浓度y与时间t之间的经验公式等)。从几何上看,就是希望根据给定的一组点(1, 4.00),…,(16, 10.60),求函数y = f (t) 的图象的一条拟合曲

数值计算插值法与拟合实验

实验报告三 一、实验目的 通过本实验的学习,各种插值法的效果,如多项式插值法,牛顿插值法,样条插值法,最小二乘法拟合(即拟合插值),了解它们各自的优缺点及插值。 二、实验题目 1、 插值效果比较 实验题目:将区间[]5,5-10等份,对下列函数分别计算插值节点k x 的值,进行不同类型的插值,作出插值函数的图形并与)(x f y =的图形进行比较: 211)(x x f +=;x x f arctan )(=;4 2 1)(x x x f +=。 (1) 做拉格朗日插值; (2) 做三次样条插值。 2、 拟合多项式实验 实验题目:给定数据点如下表所示: i x -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 i y -4.45 -0.45 0.55 0.05 -0.44 0.54 4.55 分别对上述数据做三次多项式和五次多项式拟合,并求平方误差,作出离散函数()i i y x ,和拟合函数的图形。 三、实验原理 n 阶拉格朗日插值 设已知n x x x ,,,10 及()()()x L n i x f y n i i ,,,1,0 ==为不超过n 次的多项式,且满足 插值条件()().,,1,0n i y x L i i n ==由对()x L 2的构造经验,可设 ()()()()(),11000 n n n i i i n y x l y x l y x l y x l x L +++==∑= 其中,()()n i x L i ,,1,0 =均为n 次多项式且满足() .,,1,0,, ,0, ,1n j i j i j i x l j i =?? ?≠==不难验 证,这样构造出的()x L n 满足插值条件。因此问题归结为求()()n i x l i ,,1,0 =的表达式。因 ()i j x i ≠是n 次多项式()x l i 的n 个根,故可设

插值和拟合区别

插值和拟合区别 运输1203黎文皓通过这个学期的《科学计算与数学建模》课程的学习,使我掌握了不少数学模型解决实际问题的方法,其中我对于插值与拟合算法这一章,谈一谈自己的看法可能不是很到位,讲得不好的地方也请老师见谅。 首先,举一个简单的例子说明一下这个问题。 如果有100个平面点,要求一条曲线近似经过这些点,可有两种方法:插值和拟合。 我们可能倾向于用一条(或者分段的多条)2次、3次或者说“低次”的多项式曲线而不是99次的曲线去做插值。也就是说这条插值曲线只经过其中的3个、4个(或者一组稀疏的数据点)点,这就涉及到“滤波”或者其他数学方法,也就是把不需要90多个点筛选掉。如果用拟合,以最小二乘拟合为例,可以求出一条(或者分段的多条)低次的曲线(次数自己规定),逼近这些数据点。具体方法参见《数值分析》中的“线性方程组的解法”中的“超定方程的求解法”。经过上面例子的分析,我们可以大致的得到这样一个结论。插值就是精确经过,拟合就是逼近。 插值和拟合都是函数逼近或者数值逼近的重要组成部分。他们的共同点都是通过已知一些离散点集M上的约束,求取一个定义在连续集合S(M包含于S)的未知连续函数,从而达到获取整体规律目的,即通过"窥几斑"来达到"知全豹"。 所谓拟合是指已知某函数的若干离散函数值{f1,f2,…,fn},通过调

整该函数中若干待定系数f(λ1, λ2,…,λ3), 使得该函数与已知点集的差别(最小二乘意义)最小。如果待定函数是线性,就叫线性拟合或者线性回归(主要在统计中),否则叫作非线性拟合或者非线性回归。表达式也可以是分段函数,这种情况下叫作样条拟合。 而插值是指已知某函数的在若干离散点上的函数值或者导数信息,通过求解该函数中待定形式的插值函数以及待定系数,使得该函数在给定离散点上满足约束。 从几何意义上将,拟合是给定了空间中的一些点,找到一个已知形式未知参数的连续曲面来最大限度地逼近这些点;而插值是找到一个(或几个分片光滑的)连续曲面来穿过这些点。 不过是插值还是拟合都是建立在一定的数学模型的基础上进行的。多项式插值虽然在一定程度上解决了由函数表求函数的近似表达式的问题,但是在逼近曲线上有明显的缺陷,很可能不能很好的表示函数的走向,存在偏差,在实际问题中我们往往通过函数近似表达式的拟合法来得到一个较为准却的表达式。

清华大学_计算方法(数学实验)实验2插值与拟合

实验 2 插值与拟合 系班姓名学号 【实验目的】 1、掌握用MATLAB计算拉格朗日、分段线性、三次样条三种插值的方法,改变节点的数目, 对三种插值结果进行初步分析。 2、掌握用MATLAB作线性最小二乘的方法。 3、通过实例学习如何用插值方法与拟合方法解决实际问题,注意二者的联系和区别。 【实验内容】 预备:编制计算拉格朗日插值的M文件: 以下是拉格朗日插值的名为y_lagrl的M文件: function y=y_lagr1(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end 第1题(d) 选择函数y=exp(-x2) (-2≤x≤2),在n个节点上(n不要太大,如5~11)用拉格朗日、分段线性、三次样条三种插值方法,计算m个插值点的函数值(m要适中,如50~100)。通过数值和图形输出,将三种插值结果与精确值进行比较。适当增加n,在作比较,由此作初步分析。 运行如下程序: n=7;m=61;x=-2:4/(m-1):2; y=exp(-x.^2); z=0*x; x0=-2:4/(n-1):2; y0=exp(-x0.^2); y1=y_lagr1(x0,y0,x); y2=interp1(x0,y0,x); y3=interp1(x0,y0,x,'spline');

[x'y'y1'y2'y3'] plot(x,z,'w',x,y,'r--',x,y1,'b:',x,y2,'m',x,y3,'b') gtext('y=exp(-x^2)'),gtext('Lagr.'),gtext('Piece.-linear.'),gtext ('Spline'), 将三种插值结果y1,y2,y3与精确值y 项比较,显然y1在节点处不光滑,拉格朗日插值出现较大的振荡,样条插值得结果是最好的.增加n 值(使n=11),再运行以上程序,得到的图形如右图所示,比较这两个图可发现,节点增加后,三种插值方法结果的准确度均有所提高,因此可近似地认为:增加节点个数可以提高插值结果的准确程度。 第3题 用给定的多项式,如y=x 3-6x 2+5x-3,产生一组数据(x i ,y i ,i=1,2,…,n ),再在yi 上添加随机干扰(可用rand 产生(0,1)均匀分布随机数,或用randn 产生N (0,1)分布随机数),然后用x i 和添加了随机干扰的y i 作3次多项式拟合,与原系数比较。如果作2或4次多项式拟合,结果如何? 解:2 编制y_2_3.m 文件 n=15; x=0:8/(n-1):8; y=x.^3-6*x.^2+5*x-3; z=0*x; y0=y+rand(1,15); f=polyfit(x,y0,m); r=polyval(f,x) pl2ot(x,z,'k',x,y,'r:'r,'b') 程序及运行结果如下:m=2 ,y_2_3 f = 5.9888 -31.9916 17.6679 m=3 ,y_2_3

Matlab中插值拟合函数汇总和使用说明

Matlab中插值拟合函数汇总和使用说明 命令1 interp1 功能一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。 x:原始数据点 Y:原始数据点 xi:插值点 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’:三次样条函数插值。对于该方法,命令interp1 调用

函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令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。 例1 1. 2.>>x = 0:10; y = x.*sin(x); 3.>>xx = 0:.25:10; yy = interp1(x,y,xx); 4.>>plot(x,y,'kd',xx,yy) 例2 1.

计算方法上机作业插值与拟合实验报告

计算方法实验 题目: 班级: 学号: 姓名:

目录 计算方法实验 (1) 1 实验目的 (3) 2 实验步骤 (3) 2.1环境配置: (3) 2.2添加头文件 (3) 2.3主要模块 (3) 3 代码 (4) 3.1主程序部分 (4) 3.2多项式方程部分 (4) 3.3核心算法部分 (8) 3.4数据结构部分 (13) 4运行结果 (19) 4.1拉格朗日插值法运行结果 (19) 4.2牛顿插值法运行结果 (20) 4.3多项式拟合运行结果 (20) 5总结 (21) 拉格朗日插值法 (21) 牛顿插值法 (21) 多项式拟合 (21) 6参考资料 (22)

1 实验目的 1.通过编程对拉格朗日插值法、牛顿插值法以及多项式拟合数据的理解 2.观察上述方法的计算稳定性和求解精度并比较各种方法利弊 2 实验步骤 2.1环境配置: VS2013,C++控制台程序 2.2添加头文件 #include "stdio.h" #include "stdlib.h" #include "stdafx.h" 2.3主要模块 程序一共分成三层,最底层是数据结构部分,负责存储数据,第二层是交互部分,即多项式方程部分,负责输入输出获得数据,最上层是核心的算法部分,负责处理已获得的数据。具体功能如下: ●数据结构部分 数据结构部分是整个程序的最底层,负责存储部分。因方程系数作为数据元素插入和删除操作较少,而顺序表空间利用率大且查看方便,故此程序选用顺序表保存系数。数据结构文件中写的是有关顺序表的所有基本操作以供其他文件调用。本次实验使用列主元高斯消元法作为求解方程组的方法,所以也用了二维顺序表存储数组。综上,数据结构部分文件是前两个试验的文件内容和,稍作修改。 ●常系数微分方程部分 多项式方程部分是程序的第二层,内容主要是常系数微分方程导数的计算和显示菜单部分。 ●算法部分 算法部分分为两个文件,一个是插值部分,一个是拟合部分。 插值部分文件负责有关插值的核心算法,处于整个程序最上层部分,负责拉格朗日插值法和牛顿插值法的具体实现过程。调用方程文件的函数,将获得的数据进行处理运算,将结果返回给方程主函数和输出的第二层。每种方法有两个函数,一个为仅仅实现一次插值的算法,另一个是和方程部分联系的

关于几种曲线拟合基本方法的比较

关于几种曲线拟合基本方法的比较 学院:材料科学与工程学院专业:材料学(博)姓名:郑文静学号:1014208040 在实际工作中,变量之间的关系未必都是线性关系,更多时候,它们之间呈现出了曲线关系,在科学实验或社会活动中,通过实验或观测得到一些x和y数据,为了对位置点进行研究,很多时候,我们通过曲线拟合的方式,将这些离散点近似为一条连续的曲线,从而来预测或者得到所需结果。曲线拟合的方法很多,本文中,主要讨论了曲线拟合的三种基础方法--插值法、磨光法、最小二乘法的特点,并对其在科学实验和生产实践中的应用性进行了比较。 插值法是函数逼近的一种基本方法,插值法就是通过函数在有限个点处的取值情况,估算出函数在其他点处的近似值。插值法中,选取不同的插值公式,来满足实际或运算需求,得到拟合的函数。其中,最基础的插值方法是三弯矩法,该方法是利用拉格朗日插值为基础,已知平面中的n+1个不同点,寻找一条n次多项式曲线通过这些点。该曲线具有唯一性。另外,还有三转角法,该方法是利用Henmiter插值为基础,其思路与三弯矩法相同,已知条件有所差别,在Henmiter插值中,不仅已知函数在一些点的函数值,而且,还知道它在这些点的导数值,甚至知道其高阶导数值,要求所求函数不仅满足过这些点,同时也要求其导函数,甚至高阶导函数满足条件。采用Henmiter插值法求得的多项式比拉格朗日法求得的多项式有较高的光滑逼近要求。此外,还有以分段和B-样条函数为基础的δ-基函数法,其中,样条函数是:对于[a,b]上的划分,称函数S(x)为[a,b]上关于划分△的k次样条函数,记做S k,△[a,b]。该方法避免了高次插值可能引起的大幅度波动现象,在实际中通常采用分段低次插值来提高近似程度。插值法常用于填充图像变换时像素之间的空隙。 磨光法是适应保凸性要求的数据拟合方法。积分可以改变函数的光滑度,而微商是积分的逆运算,对函数进行积分,然后在微商,可以将函数还原。而差商近似为微商,对函数积分后差商,可以将函数近似还原,同时可以更光滑,这种变换就是磨光。可以采用其他方法拟合得到函数,对于不光滑的点采用一次或多次磨光,得到更加光滑连续的函数。这种方法常用于外形设计。 最小二乘法也是函数逼近的一种基本方法。该方法不要求拟合曲线通过已知点,而是通过最小化误差的平方和寻找数据的最佳函数匹配。其解题步骤是:首先通过数据点,确定其可能所属的函数类型;然后,设出函数,并求出误差平方和的表达式;之后,由表达式对函

数值分析实验插值与拟合

《数值分析》课程实验一:插值与拟合 一、实验目的 1. 理解插值的基本原理,掌握多项式插值的概念、存在唯一性; 2. 编写MATLAB 程序实现Lagrange 插值和Newton 插值,验证Runge 现象; 3. 通过比较不同次数的多项式拟合效果,理解多项式拟合的基本原理; 4. 编写MATLAB 程序实现最小二乘多项式曲线拟合。 二、实验内容 1. 用Lagrange 插值和Newton 插值找经过点(-3, -1), (0, 2), (3, -2), (6, 10)的三次插值公式,并编写MATLAB 程序绘制出三次插值公式的图形。 2. 设 ]5,5[,11 )(2 -∈+= x x x f 如果用等距节点x i = -5 + 10i /n (i = 0, 1, 2, …, n )上的Lagrange 插值多项式L n (x )去逼近它。不妨取n = 5和n = 10,编写MATLAB 程序绘制出L 5(x )和L 10(x )的图像。 3. 在某冶炼过程中,根据统计数据的含碳量与时间关系如下表,试求含碳量与时间t 的拟合曲线。

(1) 用最小二乘法进行曲线拟合; (2) 编写MATLAB 程序绘制出曲线拟合图。 三、实验步骤 1. (1) Lagrange 插值法:在线性空间P n 中找到满足条件: ?? ?≠===j i j i x l ij j i , 0,, 1)(δ 的一组基函数{}n i i x l 0)(=,l i (x )的表达式为 ∏ ≠==--= n i j j j i j i n i x x x x x l ,0),,1,0()( 有了基函数{}n i i x l 0)(=,n 次插值多项式就可表示为 ∑==n i i i n x l y x L 0)()( (2) Newton 插值法:设x 0, x 1, …, x n 是一组互异的节点,y i = f (x i ) (i = 0, 1, 2, …, n ),f (x )在处的n 阶差商定义为 1102110] ,,,[],,,[],,,[x x x x x f x x x f x x x f n n n n --= - 则n 次多项式 ) ())(](,,[) )(](,,[)](,[)()(11010102100100----++--+-+=n n n x x x x x x x x x f x x x x x x x f x x x x f x f x N 差商表的构造过程:

相关文档
最新文档