插值与拟合
来源:互联网 发布:中小学教学软件 编辑:程序博客网 时间:2024/05/16 05:39
定义
在实际问题中,一般通过实际观测得出一个函数
当需要知道
拟合也是已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小,即最佳地拟合数据。
分段线性插值
将每个相邻点用直线连起来。如此形成的折线就是分段线性插值。
样条插值
使得插值函数更加光滑。将具有一定光滑性的分段多项式称为样条函数。
MATLAB实现插值
拉格朗日插值法:
%% 设n个节点数据以数组x0, y0输入(注意Matlat 的数组下标从1 开始),m 个插值点以数组x 输入,输出数组y 为m 个插值function y=lagrange(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
埃尔米特(Hermite)插值
%% 设n个节点的数据以数组x0(已知点的横坐标),y0(函数值),y1(导数值)输入(注意Matlat 的数组下标从1 开始),m 个插值点以数组x 输入,输出数组y 为m个插值。function y=hermite(x0,y0,y1,x);n=length(x0);m=length(x); for k=1:m yy=0.0; for i=1:n h=1.0; a=0.0; for j=1:n if j~=i h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2; a=1/(x0(i)-x0(j))+a; end end yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i)); end y(k)=yy;end
一维插值函数
语法:y = interp1(x0, y0, x, ‘method’)
method指定插值的方式,默认为线性插值。有以下几种插值方法:
‘nearest’ 最近项插值
‘linear’ 线性插值
‘spline’ 立方样条插值
‘cubic’ 立方插值
所有插值方法要求
当
三次样条插值
一维插值函数:
利用样条函数进行插值,即取插值函数为样条函数,称为样条插值。
y = interp1(x0, y0, x, ‘spline’);
y = spline(x0, y0, x);
pp = csape(x0, y0, conds);
pp = csape(x0, y0, conds, valconds); y = ppval(pp, x);
其中
举例:12小时内,每小时测量一次室外温度,并进行样条插值
几种一维插值方式比较:
clc,clearx0=[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;y1=lagrange(x0,y0,x); % 调用前面编写的Lagrange插值函数y2=interp1(x0,y0,x);y3=interp1(x0,y0,x,'spline');pp1=csape(x0,y0); y4=ppval(pp1,x);pp2=csape(x0,y0,'second'); y5=ppval(pp2,x);fprintf('比较一下不同插值方法和边界条件的结果:\n')fprintf('x y1 y2 y3 y4 y5\n')xianshi=[x',y1',y2',y3',y4',y5'];fprintf('%f\t%f\t%f\t%f\t%f\t%f\n',xianshi')subplot(2,2,1), plot(x0,y0,'+',x,y1), title('Lagrange')subplot(2,2,2), plot(x0,y0,'+',x,y2), title('Piecewise linear')subplot(2,2,3), plot(x0,y0,'+',x,y3), title('Spline1')subplot(2,2,4), plot(x0,y0,'+',x,y4), title('Spline2')dyx0=ppval(fnder(pp1),x0(1)) %求x=0处的导数ytemp=y3(131:151);index=find(ytemp==min(ytemp));xymin=[x(130+index),ytemp(index)]
效果:
二维插值函数:
z = interp2(x0, y0, z0, x, y, ‘method’)
其中x0,y0分别为想m维和n维向量,表示节点,z0为n*m维矩阵,表示节点值,x,y为一维数组,表示插值点,x与y应是方向不同的向量,即一个是行向量,一个是列向量,z为矩阵。
如果使用三次样条插值,可以使用命令
pp = csape({x0, y0}, z0, conds, valconds); z = fnval(pp, {x, y});
举例:
MATLAB实现拟合
线性最小二乘法
问题:已知一组数据,即平面上n个点,i=1,2,…,n,xi互不相同,寻求一个函数y = f(x),使f(x)在某种准则下与所有数据点最为接近,即曲线拟合得最好。
令
拟合准则是使
多项式拟合方法
a = ployfit(x0, y0, m),其中输入参数x0, y0为要拟合的数据,m为拟合多项式的次数,输出参数a为拟合多项式
多项式在x处的值y可用下面的函数计算y = polyval(a,x)
举例:
最小二乘优化
用于求解最小二乘优化问题的函数有lsqlin、lsqcurvefi、lsqnonlin、lsqnonneg
x = lsqcurvefit(‘fun’, x0, xdata, ydata, options);
x = lsqnonlin(‘fun’, x0, options);
- 插值与拟合
- 插值与拟合
- 插值与拟合
- Matlab插值与拟合
- 插值与拟合简介
- 层次分析法 插值与拟合
- MATLAB插值与拟合(3)
- 插值与拟合 课件链接
- 数据拟合与插值方法
- (十)插值与拟合
- 插值与拟合的MATLAB实现
- 插值和拟合
- 插值和拟合
- 插值和拟合
- 插值和拟合
- 插值拟合
- 插值、逼近、拟合
- Matlab随笔之插值与拟合(上)
- 自定义Toast
- find the safest road 【最长路】
- Win adminstrator用户安装Oracle,普通用户无权限使用解决方案
- artTemplate入门学习笔记
- CSS三大特性
- 插值与拟合
- Effective C++第七章-模板和泛型编程之traits和TMP(模板元编程)
- 函数
- Python 命令行解析工具 Argparse
- Linux学习第二十六篇--ShellScript基础
- Ubuntu单机版 Storm 开发环境搭建与org.apache.storm.utils.NimbusLeaderNotFoundException问题
- 鼠标mouseenter, mouseleave , mouseout mousehover mousemove等事件
- 大整数排序
- 探索多个变量