第六章 Matlab插值、拟合与回归

合集下载

matlab的数据拟合与插值

matlab的数据拟合与插值

matlab的数据拟合与插值Matlab 的数据的分析处理-拟合与插值在数学建模过程中,常常需要确定⼀个变量依存于另⼀个或更多的变量的关系,即确定这些变量之间的函数关系。

但在实际中确定这些变量之间函数函数关系时往往没有先验的依据,只能在收集的实际数据的基础上对若⼲合乎理论的形式进⾏试验,从中选择⼀个最有可能反映实际的函数形式,这就是统计学中的拟合和回归⽅程问题。

本节我们主要介绍如何分析处理实际中得到的数据。

下⾯先看⼀个例⼦。

例1 “⼈⼝问题”是我国最⼤社会问题之⼀,估计⼈⼝数量和发展趋势是我们制定⼀系列相关政策的基础。

有⼈⼝统计年鉴,可查到我国从1949年⾄1994⼀般地,我们采⽤下⾯的分析处理⽅法:⾸先,在直⾓坐标系上作出⼈⼝数与年份的散点图象。

观察随着年份的增加⼈⼝数与年份变化关系,初步估计出他们之间的关系可近似地可看做⼀条直线。

那么我们如何把这条直线⽅程确定出来呢?并⽤他来估计1999年我国的⼈⼝数。

⽅法⼀:先选择能反映直线变化的两个点,如(1949,541.67),(1984,1034.75)⼆点确定⼀条直线,⽅程为 N = 14.088 t – 26915.842 ,代⼊t =1999,得N ≈12.46亿⽅法⼆:可以多取⼏组点对,确定⼏条直线⽅程,将t = 1999代⼊,分别求出⼈⼝数,在取其算数平值。

⽅法三:可采⽤“最⼩⼆乘法”求出直线⽅程。

这就是曲线拟合的问题。

⽅法⼀与⽅法⼆都具有⼀定的局限性,下⾯我们重点介绍数据的曲线拟合。

所谓曲线拟合是指给定平⾯上的n 个点(x i ,y i ),i=1,2,….,n,找出⼀条曲线使之与这些点相当吻合,这个过程称之为曲线拟合。

最常见的曲线拟合是使⽤多项式来作拟合曲线。

曲线拟合最常⽤的⽅法是最⼩⼆乘法。

其原理是求f(x),使21])([i ni i y x f -=∑=δ达到最⼩。

matlab 提供了基本的多项式曲线拟合函数命令polyfit格式::polyfit(x,y,n)说明:polyfit(x,y,n)是找n 次多项式p(x)的系数,这些系数满⾜在最⼩⼆乘法意义下p(x(i)) ~= y(i).已知⼀组数据,⽤什么样的曲线拟合最好呢?可以根据散点图进⾏直观观察,在此基础上,选择⼏种曲线分别拟合,然后⽐较,观察那条曲线的最⼩⼆乘指标最⼩。

插值与拟合的MATLAB实现

插值与拟合的MATLAB实现

3.3 插值与拟合的MATLAB实现简单的插值与拟合可以通过手工计算得出,但复杂的只能求助于计算机了。

3.3.1 线性插值在MATLAB 中,一维的线性插值可以用函数interpl 来实现。

函数interpl 的调用格式如下:yi = interpl ( x , y , xi ) ,其中yi 表示在插值向量xi 处的函数值,x 与y 是数据点。

这个函数还有如下两种形式:yi = interpl(y , xi),省略x,x 此时为l : N,其中N 为向量y 的长度。

yi = interpl(x , y , xi , method ) ,其中method 为指定的插值方法,可取以下凡种:nearest :最近插值。

linear :线性插值。

spline :三次样条插值。

cubic :三次插值。

注意:对于上述的所有的调用格式,都要求向量x 为单调。

例如:对以下数据点:( 2 * pi , 2 ) , ( 4 * pi , 3 ) , ( 6 * pi , 5 ) , ( 8 * pi , 7 ) , ( 10 * pi , 11 ) , ( 12 * pi , 13 ) , ( 14 * pi , 17) 进行插值,求x = pi , 6 的函数值。

>> x=linspace(0, 2 * pi, 8 );>> y=[2, 3, 5, 7, 11, 13, 17, 19 ];>> xl=[pi , 6 ];>> yl=interpl(x, y, xl)yl =90000 1836903.3.2 Lagrange 插值Lagrange 插值比较常用,是MATLAB 中相应的函数,但根据Lagrange 插值函数公式,可以用M 文件实现:Lagrange.mfunctions = Larange(x, y, x0 )% Lagrange 插值,x 与y 为已知的插值点及其函数值,x0 为需要求的插值点的值nx = length( x );ny = length( y );if nx ~=nywaming( ‘向量x 与y 的长度应该相同’)return;endm = length ( x0 ) ;%按照公式,对需要求的插值点向量x0 的元素进行计算for i = l: mt =0.0;for j = l : nxu = 1.0;for k = l : nxif k~=ju=j * ( x0( i )-x ( k ) ) / ( x( j )-( k ) ) ;endendt = t + u * y( j );ends( i ) = t ;endreturn例如:对(l , 2 ) , ( 2 , 4 ) , ( 3 , 6 ) , ( 4 , 8 ) , ( 5 , 10 ) 进行Lagrange 插值,求x = 23 , 3.7 的函数值。

matlab曲线拟合,插值

matlab曲线拟合,插值

一曲面)通过这些点,并能够求出这些已知点以外的点的函数值,这一过程称为二维插值。
MATLAB 函数:Zi=interp2(X,Y,Z,Xi,Yi,method)
该命令用指定的算法找出一个二元函数 ,然后以 给出 处的值。返回数据矩阵 ,Xi, Yi 是向量,且必须单调, 和 meshgrid(Xi,Yi)是同类型的。method 可以下列方法之一:
[p,s]= polyfit(x,y,n) 说明:x,y 为数据点,n 为多项式阶数,返回 p 为幂次从高到低的多项式系数向量 p。x 必须 是单调的。矩阵 s 用于生成预测值的误差估计。(见下一函数 polyval) 多项式曲线求值函数:polyval( ) 调用格式: y=polyval(p,x) [y,DELTA]=polyval(p,x,s) 说明:y=polyval(p,x)为返回对应自变量 x 在给定系数 P 的多项式的值。 [y,DELTA]=polyval(p,x,s) 使用 polyfit 函数的选项输出 s 得出误差估计 Y DELTA。它假设 polyfit 函数数据输入的误差是独立正态的,并且方差为常数。则 Y DELTA 将至少包含 50% 的预测值。
例 2:由离散数据
x 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 y .3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2 拟合出多项式。 程序:
x=0:.1:1; y=[.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2] n=3; p=polyfit(x,y,n) xi=linspace(0,1,100); z=polyval(p,xi); %多项式求值 plot(x,y,’o’,xi,z,’k:’,x,y,’b’) legend(‘原始数据’,’3 阶曲线’) 结果:

Matlab数据插值与拟合

Matlab数据插值与拟合

end
end
end
第16页,共49页。
例4-3 根据下表的数据点求出其拉格朗日 插值多项式,并计算当x=1.6时y的值。
x
1
y 0.8415
1.2
0.9320
1.8
2. 5
0.9738 0.5985
4
-0.7568
解:
>> x=[1 1.2 1.8 2.5 4]; >> y=[0.8415 0.9320 0.9738 0.5985 -0.7568]; >> f=language(x,y)
同‘pchip’,三次Hermite多项式插值
第5页,共49页。
1.Linear(分段线性插值)
它 在的区算间法[xi是,xi在+1]每上个的小子区插间值[多xi,x项i+式1]上为采:用简单的线性插值。
Fi
x xi1 xi xi1
f
(xi )
x xi xi1 xi
f (xi1)
由此整个区间[xi,xi+1]上的插值函数为:
邻近的已知点的线性函数插值计算该区间内插值点上的函数
值。
第11页,共49页。
例4-2 用其他一维插值方法对以下7个离散数据点 (1,3.5)、(2,2.1)、(3,1.3)、(4.0.8)、(5,2.9)、(6,4.2)、(7,5.7
进行一维插值方法。
解:在MATLAB命令窗口中输入以下命令:
>> x=[1 2 3 4 5 6 7];
end;
%计算拉格朗日基函数
f = f + l; simplify(f);
%计算拉格朗日插值函数 %化简
if(i==n)

MATLAB中的曲线拟合与插值

MATLAB中的曲线拟合与插值

MATLAB 中的曲线拟合和插值在大量的使用领域中,人们经常面临用一个分析函数描述数据(通常是测量值)的任务。

对这个问题有两种方法。

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

这种方法在下一节讨论。

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

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

图11.1说明了这两种方法。

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

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

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

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

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

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

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

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

最小二乘这个术语仅仅是使误差平方和最小00.20.40.60.81-2024681012xy =f (x )Second O rder C urv e Fitting图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作为阶次,得到最简单的线性近似。

第六讲 高等应用数学问题的MATLAB求解(拟合与插值)

第六讲  高等应用数学问题的MATLAB求解(拟合与插值)
% 绘制过若干给定点的任意曲线。点的个数事先确定,且作为输入信息 绘制过若干给定点的任意曲线。点的个数事先确定,
x=[];y=[]; h=[];axis([0 1 0 1]); for k=1:pn [x0,y0]=ginput(1); x=[x,x0];y=[y,y0]; % 接受由鼠标确定的点 h=line(x0,y0);set(h, 'Marker', 'o'); % 绘出点 end step=(x(end)-x(1))/100; % 以起终点间距离的 以起终点间距离的1/100作为步长 作为步长 xx=x(1):step:x(end); % 以上述步长来得到插值点 yy=interp1(x,y,xx, 'spline'); % 求得插值。可改为其他方法再试。 求得插值。可改为其他方法再试。 hold on plot(xx,yy, 'b')
图示
1、一元函数的插值 、
一元函数的插值,从几何角度理解, 一元函数的插值,从几何角度理解,就是找到穿过平 面上的样本点的一条曲线。 面上的样本点的一条曲线。由于样本点就是未知函数上的 所以插值的数学提法是: 点,所以插值的数学提法是: 设给定连续函数y=f(x)(未知)在若干点上的函数值: 设给定连续函数 (未知)在若干点上的函数值: xi yi=f (xi) x1 y1 x2 y2 … … xn yn
指数拟合
y=f (x)
插值
线性拟合 观测值 多项式拟合
x01
观测点
x02
x03
x04
x05
x
实用中样本数据多为时间序列数据。 实用中样本数据多为时间序列数据。一般都等距 取样。即以相同的时间间隔取样观测, 取样。即以相同的时间间隔取样观测,再根据这些观 测值来求一些非取样点上的数据。 测值来求一些非取样点上的数据。 如果利用插值或拟合曲线对x 如果利用插值或拟合曲线对 n点以后的数据进行 估计,从时间概念上来理解,就是预测问题。 估计,从时间概念上来理解,就是预测问题。从图中 要对取样点范围内的数据进行逼近, 看,要对取样点范围内的数据进行逼近,误差比较容 易控制;而对预测问题, 易控制;而对预测问题,不同的模型得出的结果会有 很大的差别寻求一个次数不大于 次的多项式Pn(x),使满足 次的多项式 ,

matlab回归拟合

matlab回归拟合

matlab回归拟合在机器学习和统计学中,回归分析是一种建立输入变量(自变量)和输出变量(因变量)之间关系的方法。

回归拟合是回归分析的一种技术,旨在找到最佳的函数曲线来描述数据的趋势和关系。

而MATLAB是一种功能强大的数值计算和科学计算软件,提供了许多用于回归拟合的函数和方法。

在MATLAB中,可以使用多种回归方法进行拟合。

下面是一些常用的回归拟合方法及其相应的MATLAB函数:1. 线性回归拟合:线性回归是最简单和最常见的回归方法之一,试图通过直线来拟合数据。

在MATLAB中,可以使用"polyfit"函数来进行线性回归拟合,该函数返回多项式系数。

2. 多项式回归拟合:多项式回归通过多项式函数来拟合数据。

在MATLAB中,可以使用"polyfit"函数来进行多项式回归拟合,需要指定多项式的阶数。

3. 非线性回归拟合:非线性回归通过非线性函数来拟合数据,可以更好地适应复杂的数据模式。

在MATLAB中,可以使用"lsqcurvefit"函数来进行非线性回归拟合,需要指定拟合函数和初始参数。

4. 支持向量机回归拟合:支持向量机(SVM)是一种常用的回归方法,通过寻找最佳超平面来拟合数据。

在MATLAB中,可以使用"fitrsvm"函数来进行支持向量机回归拟合,需要指定核函数和相关参数。

5. 决策树回归拟合:决策树是一种基于树结构的回归方法,通过一系列决策节点来拟合数据。

在MATLAB中,可以使用"fitrtree"函数来进行决策树回归拟合,可以指定树的最大深度和其他参数。

在进行回归拟合之前,需要将数据加载到MATLAB中,并进行预处理,例如删除缺失值、标准化等。

可以使用"readmatrix"函数来读取数据文件,使用"rmmissing"函数来删除缺失值,使用"zscore"函数来进行标准化。

matlab插值曲线拟合解析

matlab插值曲线拟合解析

四种插值方法比较
函数
格式
zi=interp2(x,y,z,xi,yi)
功能
二维插值。Z为由已知点的值组成的 矩阵,参量x与y是与z同维的已知点 的矩阵,且必须是单调的。xi与yi为 需要插值的点。若xi与yi中有在x与y 范围之外的点,则相应地返回NaN。
zi=interp2(z,xi,yi) Interp2
包角系 数
0.91
0.92
0.93
0.95
0.96
0.98
0.99
1
>>a1=[90,100,110,120,125,130,135,140,145,150,155,160,165,170,175,180]; >>a2=[0.69,0.74,0.78,0.82,0.84,0.86,0.88,0.89,0.91,0.92,0.93,0.95,0.96,0.98,0.99 ,1]; >>ka=interp1(a1,a2,133.5) >>ka=0.8740
例4

y
1
1 x2
在[-5,
5]上,
用n=11个等距分点作分段线
性插值和三次样条插值, 用m=21个插值点作图,比较结果.
xy
y1
y2
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000
例3. 已知实验数据如表。
x
0
0.25 0.50 0.75 1.00
y
0.9162 0.8109 0.6931 0.5596 0.4055
计算插值点x0=0.6处的函数值y0。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

示例1:
x=0:0.12:1; y=(x.^2-3*x+5).*exp(-5*x).*sin(x);
plot(x,y,'ro',x,y);
x1=0:0.02:1; %要插值点 y1=(x1.^2-3*x1+5).*exp(-5*x1).*sin(x1); y2=interp1(x,y,x1);y3=interp1(x,y,x1,'spline'); y4=interp1(x,y,x1,'nearest');y5=interp1(x,y,x1,'cubic'); plot(x1,[y2' y3' y4' y5'],':',x,y,'ro',x1,y1); legend('linear','spline','nearest','cubic','样本点','原函数'); %计算各插值的最大误差 [max(abs(y1-y2)),max(abs(y1-y3)),max(abs(y1-y4)),max(abs(y1y5))];
第六章 Matlab插值、拟合与回归
主要内容
6.1. 插值运算 6.2. 拟合运算 6.3. 回归分析
6.1. 插值运算
6.1.1一维插值
Matlab提供了interp1()函数进行一维多项式插值,该函数使用多项式
技术,用多项式函数通过所提供的数据点计算目标插值点上的插值函数值。
其调用方法有:
格式1 yi = interp1(x,Y,xi) %返回插值向量yi,每一元素对应于参量xi,同时由向量x与Y的内插值决 定。参量x指定数据Y的点。若Y为一矩阵,则按Y的每列计算。 格式2 yi = interp1(x,Y,xi,method) %用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算; ’linear’:线性插值(缺省方式),直接完成计算; ’spline’:三次样条函数插值。 ’cubic’: 分段三次Hermite插值。 其它,如’v5cubic’ 。 对于超出x范围的xi的分量,使用方法’nearest’、’linear’、’cubic’的插 值算法,相应地将返回NaN。对其他的方法,interp1将对超出的分量执行外插值 算法。i = interp1(x,Y,xi,method,'extrap')
clear;[x,y]=meshgrid(-3:0.6:3,-2:0.4:2); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); surf(x,y,z);figure [x1,y1]=meshgrid(-3:0.2:3,-2:0.2:2); z1=interp2(x,y,z,x1,y1); z2=interp2(x,y,z,x1,y1,'cubic'); z3=interp2(x,y,z,x1,y1,'spline'); surf(x1,y1,z1);figure %比较误差 z0=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1); surf(x1,y1,abs(z0-z2));axis([-3,3,-2,2,0,0.08]) figure;surf(x1,y1,abs(z0-z3)); axis([-3,3,-2,2,0,0.08])
interp2函数能够较好的进行二维插值运算,但是它只能处理以网格形
式给出的数据,如果数:z=griddata(x0,y0,z0,x,y,’method’) ’ v4 ’:MATLAB4.0提供的插值算法,公认效果较好; ’linear’:双线性插值算法(缺省算法); ’nearest’:最临近插值;
6.1.2 二维插值
Matlab提供了两个二维插值的函数interp2(对二维网格数据插值)和 griddata(对二维随机数据点的插值)。其中interp2的调用格式有:
格式1 ZI = interp2(X,Y,Z,XI,YI) 返回矩阵ZI,其元素包含对应于参量XI与YI(可以是向量、或同型矩阵)的元素。 参量X与Y必须是单调的,且相同的划分格式(与meshgrid相似)。若Xi与Yi中有在X
小,在Matlab中使用polyfit()函数实现,调用格式为:p=polyfit(x,y,n),n为选 定的多项式的次数,p是多项式按降幂排列得出的行向量,可以使用
poly2sym转换为多项式,使用polyval()计算多项式的值。
clear;clc; x0=-1+2*[0:10]/10; y0=1./(1+25*x0.^2); x=-1:0.01:1; ya=1./(1+25*x.^2); p3=polyfit(x0,y0,3);y1=polyval(p3,x); p5=polyfit(x0,y0,5);y2=polyval(p5,x); p8=polyfit(x0,y0,8);y3=polyval(p8,x);
clear x=-3+6*rand(199,1);y=-2+4*rand(199,1); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); plot(x,y,'*');figure;plot3(x,y,z,'*');figure; [x1,y1]=meshgrid(-3:0.2:3,-2:0.2:2); z1=griddata(x,y,z,x1,y1,'cubic'); surf(x1,y1,z1);figure; z2=griddata(x,y,z,x1,y1,'v4');surf(x1,y1,z2); %误差比较
’cubic’:双三次插值。
还有三维插值运算函数interp3,n维网格插值interpn,其调用格式同 interp1和interp2,对应的三维网格生成函数为[x,y,z]=meshgrid(x1,y1,z1) 和非网格生成函数griddata3(),griddatan(),他们同griddata调用格式相同。
z0=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);
surf(x1,y1,abs(z0-z1));axis([-3,3,-2,2,0,0.15]) figure; surf(x1,y1,abs(z0-z2));axis([-3,3,-2,2,0,0.15])
[x,y,z]=meshgrid(-1:0.2:1); [x0,y0,z0]=meshgrid(-1:0.05:1); V=exp(x.^2.*z+y.^2.*x+z.^2.*y).*cos(x.^2.*y.*z+z.^2.*y.*x); V0=exp(x0.^2.*z0+y0.^2.*x0+z0.^2.*y0).*cos(x0.^2.*y0.*z0+z0.^2.*y0.*x0); V1=interp3(x,y,z,V,x0,y0,z0,'spline'); err=V1-V0; max(err(:)) slice(x0,y0,z0,V1,[-0.5,0.3, 0.9],[0.6,-0.1],[-1,-0.5,0.5,1]) title('Slives for Four Dim Figures');
legend('位移曲线','速度曲线','位移点','速度点');
6.1.3 三次样条插值
已知平面上n个点xi,yi(i=1...n),其中x1<x2<…<xn,S(x)为三次样条 函数需要满足三个条件: (1)S(xi)=yi(i=1...n),即函数经过样本点; (2)S(x)在每个子区间[xi,xi+1]上为三次多项式:
(3)S(x)在整个区间[x1,xn]上有连续的一阶及二阶导数。 Matlab提供了一个生成三次参数样条类的函数S=csapi(x,y) 其中x=[x1,x2,….,xn], y=[y1,y2,…,yn]为样本点。S返回样条函数对象的
而实际去只能通过观测得到一些离散的数据点。针对这些分散的数据点,运
用某种拟合方法生成一条连续的曲线,这个过程称为曲线拟合。 曲线拟合可分为:
(1)参数拟合 — 最小二乘法
(2)非参数拟合 — 插值法
6.2.1 多项式拟合
一般多项式拟合的目标是寻找一组多项式系数ai,使得多项式
f(x)=a1xn+a2xn-1 +…+anx+an+1 能够较好的拟合原始数据,使整体拟合误差较
x0=-3:.6:3; y0=-2:.4:2; [x,y]=ndgrid(x0,y0); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); sp=csapi({x0,y0},z); fnplt(sp);
示例7:对离散分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算
v=[0 .4794 .8415 .9975 .9093 .5985 .1411]; s=[1 1.5 2 2.5 3 3.5 4]; p1=polyfit(t,s,8); p2=polyfit(t,v,8); tt=0:0.1:3; s1=polyval(p1,tt); v1=polyval(p2,tt); plot(tt,s1,'r-',tt,v1,'b',t,s,'p',t,v,'d'); xlabel('t');ylabel('x(t),y(t)');
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)
相关文档
最新文档