多项式拟合

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


Leabharlann Baidu




clc clear all; x=0:1.1:8; y=sin(x); n=2*length(x); %增采样1倍 yi=interpft(y,n); %采用一维快速傅立叶插值 xi=0:0.55:8.3; %要插值的数据 figure; %画图显示 hold on; plot(x,y,'ro',xi,yi,'b-'); legend('原始数据','插值后结果');

(1)最近邻插值(method='nearest') (2)线性插值(method='linear')省缺 (3)三次样条插值(method='spline') (4)三次(Hermite)插值(method='pchip'或'cubic')



yi=interp1(x,y,xi, 'spline'); y1=spline(x,y,xi); 是一样的



clc clear all x=0:16; y=tan(pi*x/20); xi=linspace(0,16) yi=interp1(x,y,xi, 'spline'); y1=spline(x,y,xi); subplot(211); plot(x,y,'o',xi,yi) subplot(212); plot(x,y,'o',xi,y1)

曲线拟合:已知离散点上的数据集,即已知 在点集上的函数值,构造一个解析函数(其 图形为一曲线)使在原离散点上尽可能接近 给定的值。
MATLAB软件提供了基本的曲线拟合函 数的命令,多项式函数拟合: a=polyfit(xdata,ydata,n), 其中n表示多项式的最高阶数, xdata,ydata为将要拟合的数据,它是 用数组的方式输入。输出参数a为拟合多 项式 y=a1x^n+...+anx+a,共n+1个系数。 多项式在x处的值y可用下面程序计算。 y=polyval(a,x,m)
clc clear all x=[0.5,1.0,1.5,2.0,2.5,3.0]; y=[1.75,2.45,3.81,4.80,7.00,8.60]; xi=linspace(0,3); yi=interp1(x,y,xi, 'linear'); y1=interp1(x,y,xi,'nearest'); y2=interp1(x,y,xi, 'spline'); y3=interp1(x,y,xi, 'cubic'); subplot(221); plot(x,y,'o',xi,yi);title('线性插值');xlabel('x');ylabel('y'); subplot(222); plot(x,y,'o',xi,y1);title('最近邻插值');xlabel('x');ylabel('y'); subplot(223); plot(x,y,'o',xi,y2);title('三次样条插值');xlabel('x');ylabel('y'); subplot(224); plot(x,y,'o',xi,y3);title('三次Hermite插值');xlabel('x');ylabel('y');
其他基本函数拟合
还记得线性回归方程吗 其实就是多项式拟合(一次多项式)


一组观测结果的数字统计与相应数值组的 吻合。形象的说,拟合就是把平面上一系列 的点,用一条光滑的曲线连接起来(不一 定全经过各点)。因为这条曲线有无数种 可能,从而有各种拟合方法。拟合的曲线 一般可以用函数表示,根据这个函数的不 同有不同的拟合名字。 在MATLAB中可以用polyfit 来拟合多项式。
拟合与插值的区别



从几何意义上将,拟合是给定了空间中的一些点, 找到一个已知形式 未知参数的连续曲面来最大限 度地逼近这些点;而插值是找到一个( 或几个分片 光滑的)连续曲面来穿过这些点。 若要求所求曲线(面)通过所给所有数据点,就 是插值问题; 若不要求曲线(面)通过所有数据点,而是要求 它反映对象整体的变化趋势,这就是数据拟合, 又称曲线拟合或曲面拟合。
interp2()进行二维插值





clear all; [x,y]=meshgrid(-4:0.8:4); %原始数据 z=peaks(x,y); [xi,yi]=meshgrid(-4:0.2:4); %插值数据 zi_nearest=interp2(x,y,z,xi,yi,'nearest'); %临近点插值 zi_linear=interp2(x,y,z,xi,yi); %系统默认为线性插值 zi_spline=interp2(x,y,z,xi,yi,'spline'); %三次样条插值 zi_cubic=interp2(x,y,z,xi,yi,'cubic'); %三次多项式插值 figure; %数据显示 hold on; subplot(321); surf(x,y,z); %绘制原始数据点 title('原始数据'); subplot(322); surf(xi,yi,zi_nearest); %绘制临近点插值的结果 title('临近点插值'); subplot(323); surf(xi,yi,zi_linear); %绘制线性插值的结果 title('线性插值'); subplot(324); surf(xi,yi,zi_spline); %绘制三次样条插值的结果 title('三次样条插值'); subplot(325); surf(xi,yi,zi_cubic); %绘制三次多项式插值的结果 title('三次多项式插值');
多项式拟合和样条函数拟合
首先谈一下“拟合”


所谓拟合是指已知某函数的若干离散函 数值{f1,f2,…,fn},通过调整该函数中若干 待定系数f(λ1, λ2,…,λn),使得该函数与已 知点集的差别(最小二乘意义)最小。 如果待定函数是线性,就叫线性拟合或 者线性回归(主要在统计中),否则叫作非 线性拟合或者非线性回归。表达式也可 以是分段函数,这种情况下叫作样条拟 合。
最小二乘法(又称最小平方法)是一种数学优化技术。 它通过最小化误差的平方和寻找数据的最佳函数匹配。 利用最小二乘法可以简便地求得未知的数据, 并使得这些求得的数据与实际数据之间误差的平方和为最小。
最小二乘法
基 于 拟合 非线性拟合 (曲线、曲面拟合) N项式拟合(N≥2) 线性拟合 (线性回归)
指数函数拟合
x=0:16; y=tan(pi*x/20);
xi=linspace(0,16) yi=spline(x,y,xi)
plot(x,y,'o',xi,yi)

matlab也可以用cftool工具直接拟合
多项式插值

用interp1()函数进行一维多项式插值。语法格 式为:

yi=interp1(x,y,xi,method) 其中,x、y和xi均为矢量。x和y为给定的长度相同 的矢量,y是函数值矢量,x是与y对应的自变量的 矢量;xi矢量包含用于插值的点;method用于指定 插值方法,包括:

基于FFT的插值

函数interpft()用基于FFT的方法进行一维插 值。调用形式为:


y=interpft(x,n) 其中,x是一个包含周期函数值的矢量,这些值 在等间隔的点上采集;n是样本大小。如果x是一 个向量,数据x的长度为m,采样间隔为dx,则 数据y的采样间隔是dx×m/n,其中n必须大于m。

三次样条函数本质上是一段一段的三次 多项式拼合而成的曲线。在拼接处,不仅 函数是连续的,且一阶和二阶导数也是连 续的。
三次样条函数matlab实现






x=[0.2:0.2:1.0]; y=[0.98 0.92 0.81 0.64 0.38]; figure(3) plot(x,y,'*r'); hold on P=spline(x,y); Y=ppval(P,x); plot(x,Y,'k') hold off

pp=spline(x,y)

上式是根据已知的x,y数据,求出它的样条 函数表达式。pp是样条多项式的系数矩阵。

它可用于命令ppval的计算。 yi=spline(x,y,xi)

式中,x,y为插值点的向量,xi为所求点的 横坐标值,yi为所求点的纵坐标值,使用目 的是通过三次样条函数插值求函数值。
所谓的样条函数,是指 满足一定的连续条件的 分段多项式。
假定节点为 n 1 个点 t , t ,..., t n 满足t t t n . 0 1 0 1 (有时,也称为网格点 ) k 0为给定的整数。 在节点 A t , t ,..., t n 处的 0 1 k 样条函数 S (x) 满足 1. 在每个区间 l [t , t ), S (x) 是次数不超过 k的多项式; i -1 i 2. 在整个区间[t , t n ]S(x) 具有(k -1)次连续导数。 0 因此, S (x) 是k次分段多项式,整体具 有(k -1)次连续导数。
样条函数spline function


样条函数的研究始于20世纪中叶,到了 60年代它与计算机辅助设计相结合,在 外形设计方面得到成功的应用。样条理 论已成为函数逼近的有力工具。 spline function 指一类分段(片)光滑、 并且在各段交接处也有一定光滑性的函 数。简称样条。


样条:是 指飞机或轮船等的制造过程中 为描绘出光滑的外形曲线(放样)所用的工 具。1946年,Schoenberg将样条引入数 学,即所谓的样条函数。 样条函数是指满足一定的连续条件的分 段多项式。
可用不同阶的多项式来拟合数据, 但也不是阶数越高拟合的越好。

例:x=1:20,y=x+3*sin(x)



程序: x=1:20; y=x+3*sin(x); p=polyfit(x,y,6) p1=polyfit(x,y,10) p2=polyfit(x,y,20) xi=linspace(1,20,100); z=polyval(p,xi); %多项式求值函数 z1=polyval(p1,xi); z2=polyval(p2,xi); plot(x,y,'o',xi,z,'k:') hold on plot(xi,z1,'r:',xi,z2,'g:') legend('原始数据','6阶曲线','10阶曲线','20阶曲线')
非线性(曲线)拟合
MATLAB程序:
clc clear all x=[0.5,1.0,1.5,2.0,2.5,3.0]; y=[1.75,2.45,3.81,4.80,7.00,8.60] p1=polyfit(x,y,1) p2=polyfit(x,y,2) x1=0.5:0.1:3.0; y1=polyval(p1,x1); y2=polyval(p2,x1); plot(x,y,'*r',x1,y1,'-b',x1,y2,':k'); axis([0,3.5,1,9]); legend('原始数据','一阶直线','二阶 曲线');
相关文档
最新文档