@


前言

插值和拟合都是要求通过已知的数据去寻求某个近似函数,使得近似函数与与已知数据有较高的拟合精度。本文将介绍两者的区别,相应的算法以及如何用matlab实现。

一、拟合

1.定义

已知一组(二维)数据,即平面上的n个点\((x_i,y_i)\),\(i=1,2,...,n\),\(x_i\)互不相同,寻求一个函数(曲线)\(y=f(x)\),使\(f(x)\)在某种准则下与所有数据点最为接近,即曲线拟合得最好。

注意:拟合曲线不要求经过所有的数据点

2.三种判别准则

使偏差的绝对值最小;

使偏差的最大绝对值最小;

使偏差的平方和最小(即最小二乘法)。

3.最小二乘法

(1)一般形式

最小二乘法是解决拟合的最常用方法,基本思路是令

\[f(x)=a_1r_1(x)+a_2r_2(x)+...+a_mr_m(x
)\]

其中,\(r_k(x)\)为实现选定的一组线性无关的函数;\(a_k\)为待定系数\((k=1,2,...,m;m<n)\)

\[R=\begin{bmatrix} r_1(x_1) & ... & r_m(x_1) \\ r_1(x_n) & ... & r_m(x_n) \\ \end{bmatrix}\quad_{n \times\ m}
\]
\[A=[a_1,...,a_m]^T,Y=[y_1,...,y_n]^T
\]

则有唯一解

\[A=(R^TR)^{-1}R^TY
\]

证明略

(2)常用函数

直线:\(y=a_1x+a_2\)

多项式:\(y=a_1x^m+...+a_mx+a_{m+1}\)(m一般为2或3)

双曲线(一支):\(y=\frac{a_1}{x}+a_2\)

指数曲线:\(y=a_1e^{a_2x}\)

注意:对于指数曲线,需要现转化为线性函数

(3)matlab实现

解方程组方法:

\[J(a_1,...,a_m)=\sum\limits_{i=1}^{n}[f(x_i)-y_i]^2=||RA-Y||^2
\]

易得

\[A=R\backslash Y
\]

注意是左除

多项式拟合方法:

a=polyfit(x0,y0,m);
y=polyval(a,x);

其中\(x_0,y_0\)是要拟合的数据,\(m\)为拟合的多项式次数,\(a\)为拟合多项式

\[y=a(1)x^m+...,a(m)x+a(m+1)
\]

的系数向量\(a=[a(1),...,a(m),a(m+1)]\)。

二、插值

1.定义

在平面上给定一组离散点列,要求一条曲线,把这些点按次序连接起来,称为插值。

注意:拟合曲线必须经过所有的数据点

2.方法

(1)分段线性插值

分段线性插值,字面意思,就是把相邻两点用直线连接起来,记作\(I_n(x)\)。那么\(I_n(x)\)必经过所有数据点。\(I_n(x)\)可表示为\(I_n(x)=\sum\limits_{i=0}^{n}y_il_i(x)\),其中

\[l_i(x)=
\begin{cases}
\frac{x-x_{i-1}}{x_i-x_{i-1}},\quad x \in [x_{i-1},x_i],i\neq0 \\
\frac{x-x_{i+1}}{x_i-x_{i+1}}, \quad x \in [x_i,x_{i+1}] ,i\neq n \\
0
\end{cases}
\]

\(I_n\)具有良好的收敛性,即当\(n \rightarrow \infty\)时,\(I_n(x)=f(x)\)

分段线性插值适用于大多数情况。但如果对函数的光滑性要求较高时,就需要使用其它方法。

(2)拉格朗日插值多项式

\[L(x)=\sum\limits_{i=0}^{n}y_il_i(x)=\sum\limits_{i=0}^{n}y_i(\prod\limits_{j=0,j\neq i}^{n}\frac{x-x_j}{x_i-x_j})
\]

(3)样条插值

样条插值的优势在于产生的函数有连续的曲率,本质是一个具有一定光滑性的分段多项式。一般使用三次样条插值。

3.matlab实现

(1)一维插值函数

y=interp1(x0,y0,x,'...');
'linear'//线性插值(默认)
'spline'//三次样条插值
'nearest'//最近项插值
'cubic'//立方插值

\(x_0\)必须是单调的

(2)三次样条插值

y=interp1(x0,y0,x,'spline');

y=spline(x0,y0,x);

pp=csape(x0,y0);
y=fnval(pp,x);

(3)二维插值

interp2(x0,y0,z0,x,y,'...');

pp=csape({x0,y0},z0),z=fnval(pp,{x,y});//三次样条插值

用法同一维插值

总结

本篇文章只是非常非常非常粗略地介绍了插值与拟合及实现方法,省去了证明过程、函数的更多用法和优化等。欢迎指正。

matlab——插值与拟合的更多相关文章

  1. Matlab随笔之插值与拟合(上)

    原文:Matlab随笔之插值与拟合(上) 1.拉格朗日插值 新建如下函数: function y=lagrange(x0,y0,x) %拉格朗日插值函数 %n 个节点数据以数组 x0, y0 输入(注 ...

  2. Matlab随笔之插值与拟合(下)

    原文:Matlab随笔之插值与拟合(下) 1.二维插值之插值节点为网格节点 已知m x n个节点:(xi,yj,zij)(i=1…m,j=1…n),且xi,yi递增.求(x,y)处的插值z. Matl ...

  3. matlab学习——05插值和拟合(黄河小浪底调水调沙问题)

    05插值和拟合 黄河小浪底调水调沙问题 data3.txt 1800 1900 2100 2200 2300 2400 2500 2600 2650 2700 2720 2650 32 60 75 8 ...

  4. matlab学习——05插值和拟合(一维二维插值,拟合)

    05插值和拟合 1.一维插值 (1) 机床加工零件,试用分段线性和三次样条两种插值方法计算.并求x=0处的曲线斜率和13<=x<=15范围内y的最小值. x0=[0 3 5 7 9 11 ...

  5. matlab最小二乘法数据拟合函数详解

    定义: 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可 以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小. ...

  6. Matlab插值计算各时刻磁法勘探日变观测值

    Matlab插值计算各时刻磁法勘探日变观测值 在磁法勘探中,消日变影响的改正称为日变改正.进行日变改正时必须设立日变站,观测日变情况.根据日变数据和测点观测时间,对观测数据进行改正. 在本次磁法实习中 ...

  7. MATLAB插值

    转自原文 MATLAB插值 插值问题 在应用领域中,由有限个已知数据点,构造一个解析表达式,由此计算数据点之间的函数值,称之为插值. 实例:海底探测问题 某公司用声纳对海底进行测试,在5×5海里的坐标 ...

  8. Python SciPy库——插值与拟合

    插值与拟合 原文链接:https://zhuanlan.zhihu.com/p/28149195 1.最小二乘拟合 实例1 # -*- coding: utf-8 -*- import numpy a ...

  9. MATLAB实现插值和拟合

    插值问题在应用领域中,由有限个已知数据点,构造一个解析表达式,由此计算数据点之间的函数值,称之为插值.实例:海底探测问题某公司用声纳对海底进行测试,在5×5海里的坐标点上测得海底深度的值,希望通过这些 ...

随机推荐

  1. Python+Selenium学习笔记19 - 自动发送邮件

    发送简单的邮件 用一个QQ邮箱发送到另一个QQ邮件. 首先设置QQ邮箱,邮箱设置 -> 账号 开启SMTP服务,点击开启按钮,按提示进行操作,需要1毛钱的短信费.开启后如下所示 1 # codi ...

  2. C# 尝试还原程序包是出错:找不到“XXXXX”版本的程序包“XXXXXX”

    在C#管理程序包的时候有时会出现找不到某某版本的程序包 如果出现这样的情况,解决办法是在你当前项目获取当前类库下的packages.config里去删除一段配置就可以解决! 我的缺少的是版本为9.0. ...

  3. Linux实现ffmpeg H.265视频编码

    Linux实现ffmpeg H.265视频编码 几乎所有观看的视频,数字地面电视,电缆,卫星或互联网上的压缩.原始的,未压缩的视频太大,会浪费太多的带宽.在DVD和Blu-ray之前,有视频CD(VC ...

  4. PyTorch 图像分类

    PyTorch 图像分类 如何定义神经网络,计算损失值和网络里权重的更新. 应该怎么处理数据? 通常来说,处理图像,文本,语音或者视频数据时,可以使用标准 python 包将数据加载成 numpy 数 ...

  5. 在cuDNN中简化Tensor Ops

    在cuDNN中简化Tensor Ops 在Tesla V100 GPU中引入神经网络模型以来,神经网络模型已迅速利用NVIDIA Tensor Cores进行深度学习.例如,基于Tensor Core ...

  6. 转置卷积Transposed Convolution

    转置卷积Transposed Convolution 我们为卷积神经网络引入的层,包括卷积层和池层,通常会减小输入的宽度和高度,或者保持不变.然而,语义分割和生成对抗网络等应用程序需要预测每个像素的值 ...

  7. C语言代码区错误以及编译过程

    C语言代码区错误 欲想了解C语言代码段会有如何错误,我们必须首先了解编译器是如何把C语言文本信息编译成为可以执行的机器码的. 背景介绍 测试使用的C语言代码 导入标准库,定义宏变量,定义结构体,重命名 ...

  8. mybatis——一级缓存、二级缓存

    一.Mybatis缓存 ● MyBatis包含一个非常强大的查询緩存特性,它可以非常方便地定制和配置缓存.绶存可以极大的提升查询效率. ● MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存 ...

  9. 四、提高SSH服务安全

    配置基本安全策略 [root@proxy ~]# vim /etc/ssh/sshd_config    //调整sshd服务配置 .. .. Protocol 2                   ...

  10. 6.10考试总结(NOIP模拟6)

    前言 就这题考的不咋样果然还挺难改的.. T1 辣鸡 前言 我做梦都没想到这题正解是模拟,打模拟赛的时候看错题面以为是\(n\times n\)的矩阵,喜提0pts. 解题思路 氢键的数量计算起来无非 ...