@


前言

插值和拟合都是要求通过已知的数据去寻求某个近似函数,使得近似函数与与已知数据有较高的拟合精度。本文将介绍两者的区别,相应的算法以及如何用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. GPU编程和流式多处理器(四)

    GPU编程和流式多处理器(四) 3.2. 单精度(32位) 单精度浮点支持是GPU计算的主力军.GPU已经过优化,可以在此数据类型上原生提供高性能,不仅适用于核心标准IEEE操作(例如加法和乘法),还 ...

  2. 将DataTable转成Json字符串

    1 public string ToJson(DataTable tbl) 2 { 3 if (tbl.Rows.Count > 0) 4 { 5 DataRowCollection rows ...

  3. 工作流中的流程追溯!详细解析Activiti框架中的历史组件

    Activit中的历史简介 历史: Activiti中的一个组件,可以捕获发生在进程执行中的信息并永久的保存.与运行时数据不同的是,当流程实例运行完成之后它还会存在于数据库中 历史实体对象有5个: H ...

  4. 【CMD】修改文件夹的属性

    将 d:\文件夹 添加 只读 属性: attrib +r d:\文件夹 /d 将 d:\文件夹 去掉 只读 属性: attrib -r d:\文件夹 /d 其他属性可以参考帮助文件:

  5. 【题解】Luogu p2016 战略游戏 (最小点覆盖)

    题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...

  6. c#根据名称反射对应的枚举类型

    今天遇到了要配置串口的停止位,这个时候直接反射枚举比较方便. 第一反射所有的枚举值 FieldInfo[] fieldInfoes= typeof(StopBits).GetFields(Bindin ...

  7. Spring事件发布与监听机制

    我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 目录 ...

  8. B站英文教学视频的字幕获取 学习必看!

    前言 最近在B站看一些纯英文的课程,视频课程有的是纯中文字幕的,有的是纯英文字幕的.由于英文的重要性,一份字幕的文档在我们观看后,留着日后粗略再读是很有益处的.但是为了得到这个英文字幕走了许多弯路.最 ...

  9. Spring Boot 2.x基础教程:使用Redis的发布订阅功能

    通过前面一篇集中式缓存的使用教程,我们已经了解了Redis的核心功能:作为K.V存储的高性能缓存. 接下来我们会分几篇来继续讲讲Redis的一些其他强大用法!如果你对此感兴趣,一定要关注收藏我哦! 发 ...

  10. Room-数据持久化存储(入门)

    @ 目录 一.简单使用 1.Entity 2.Dao 3.DataBase 4.使用 二.参数解析 1.Entity 2.Dao 3.查询方式 总结 # 前言 官方简介: Room 持久性库在 SQL ...