拟合与插值|线性最小二乘拟合|非线性最小二乘拟合|一维插值|二维插值

拟合的介绍 本文用于介绍拟合 阅读详情

挖掘数据背后的规律是数学建模的重要任务,拟合与插值是常用的分析方法

  • 掌握拟合与插值的基本概念和方法
  • 熟悉Matlab相关程序实现
  • 能够从数据中挖掘数学规律

拟合问题的基本提法

拟合问题的概念

已知一组数据(以二维为例),即平面上n个点(xi,yi),i=1,2,…,n(x_{i},y_{i}),i =1,2,\dots,n(xi​,yi​),i=1,2,…,n,寻求一个函数y=f(x)y=f(x)y=f(x),使得f(x)f(x)f(x)在某种准则下与所有数据点最为接近
![[Pasted image 20240819085354.png]]

∑i=1n(δi)2→min \sum_{i=1}^{n}(\delta_{i})^{2}\to min i=1∑n​(δi​)2→min

  1. 确定f(x)f(x)f(x)表达式的形式
  2. 估计f(x)f(x)f(x)中待定系数
拟合要解决的两个基本问题

确定f(x)f(x)f(x)表达式的形式

  1. 数据可视化,直观判断f(x)f(x)f(x)的形式
    ![[Pasted image 20240819090140.png]]
    ![[Pasted image 20240819090155.png]]

  2. 通过机理分析来确定f(x)f(x)f(x)的形式
    饮酒驾车中酒精浓度拟合问题
    y=ke−at y = ke^{-at} y=ke−at
    SARS的传播规律拟合问题
    i(t)=11+(1i0−1)e−λt i(t)=\frac{1}{1+\left( \frac{1}{i_{0}}-1 \right)e^{-\lambda t}} i(t)=1+(i0​1​−1)e−λt1​
    估计f(x)f(x)f(x)中的待定参数
    根据f(x)f(x)f(x)表达式中,待定参数具体形式的不同,一般有两种方法
    线性最小二乘法:适用于f(x)f(x)f(x)中待定参数为线性形式
    非线性最小二乘法:适用于f(x)f(x)f(x)中待定参数为非线性形式

线性最小二乘拟合及其实现

线性最小二乘拟合

基本思路

  1. 选定一组基本函数r1(x),r2(x),…,rm(x);m<nr_{1}(x),r_{2}(x),\dots,r_{m}(x);m<nr1​(x),r2​(x),…,rm​(x);m<n,确定f(x)f(x)f(x)表达式
    f(x)=a1r1(x)+a2r2(x)+⋯+amrm(x) f(x)=a_{1}r_{1}(x)+a_{2}r_{2}(x)+\dots+a_{m}r_{m}(x) f(x)=a1​r1​(x)+a2​r2​(x)+⋯+am​rm​(x)
    其中,a1,a2,…,ama_{1},a_{2},\dots,a_{m}a1​,a2​,…,am​为待定参数
  2. 按照最小二乘原则确定待定系数
    求a1,a2,…,ama_{1},a_{2},\dots,a_{m}a1​,a2​,…,am​使n个点(xi,yi)(x_{i},y_{i})(xi​,yi​)与曲线f(x)f(x)f(x)的距离平方和J(a1,a2,…,am)J(a_{1},a_{2},\dots,a_{m})J(a1​,a2​,…,am​)最小
    mina1,a2,…,amJ(a1,a2,…,am)=∑i=1n(δi)2 min_{a_{1},a_{2},\dots,a_{m}}J(a_{1},a_{2},\dots,a_{m})=\sum_{i=1}^{n}(\delta_{i})^{2} mina1​,a2​,…,am​​J(a1​,a2​,…,am​)=i=1∑n​(δi​)2
    =∑i=1n(yi−a1r1xi−a1r1xi−⋯−amrmxi)2 =\sum_{i=1}^{n}(y_{i}-a_{1}r_{1}x_{i}-a_{1}r_{1}x_{i}-\dots-a_{m}r_{m}x_{i})^{2} =i=1∑n​(yi​−a1​r1​xi​−a1​r1​xi​−⋯−am​rm​xi​)2

优化问题的求解
超定方程组,方程个数大于未知量个数的方程组
{r11a1+r12a2+⋯+r1mam=y1r21a1+r22a2+⋯+r2mam=y2……rn1a1+rn2a2+⋯+rnmam=yn \left\{\begin{matrix} r_{11}a_{1}+r_{12}a_{2}+\dots+r_{1m}a_{m}=y_{1} \\ r_{21}a_{1}+r_{22}a_{2}+\dots+r_{2m}a_{m}=y_{2} \\ \dots\dots \\ r_{n1}a_{1}+r_{n2}a_{2}+\dots+r_{nm}a_{m}=y_{n} \end{matrix}\right. ⎩⎨⎧​r11​a1​+r12​a2​+⋯+r1m​am​=y1​r21​a1​+r22​a2​+⋯+r2m​am​=y2​……rn1​a1​+rn2​a2​+⋯+rnm​am​=yn​​
R=(r11r12…r1mr21r22…r2m…………rn1rn2…rnm) R=\begin{pmatrix} r_{11}&&r_{12}&&\dots&&r_{1m} \\ r_{21}&&r_{22}&&\dots&&r_{2m} \\ \dots&&\dots&&\dots&&\dots \\ r_{n1}&&r_{n2}&&\dots&&r_{nm} \end{pmatrix} R=​r11​r21​…rn1​​​r12​r22​…rn2​​​…………​​r1m​r2m​…rnm​​​
a=(a1a2…am)y=(y1y2…yn) a=\begin{pmatrix} a_{1} \\ a_{2} \\ \dots \\ a_{m} \end{pmatrix}\qquad y=\begin{pmatrix} y_{1} \\ y_{2} \\ \dots \\ y_{n} \end{pmatrix} a=​a1​a2​…am​​​y=​y1​y2​…yn​​​
超定方程组可改写为:Ra=yRa=yRa=y
一般地,超定方程组是不存在解的矛盾方程组,不存在准确解
需要在最小二乘的意义下求解
∑i=1n(δi)2=∑i=1n(yi−a1r1xi−a1r1xi−⋯−amrmxi)2 \sum_{i=1}^{n}(\delta_{i})^{2}=\sum_{i=1}^{n}(y_{i}-a_{1}r_{1}x_{i}-a_{1}r_{1}x_{i}-\dots-a_{m}r_{m}x_{i})^{2} i=1∑n​(δi​)2=i=1∑n​(yi​−a1​r1​xi​−a1​r1​xi​−⋯−am​rm​xi​)2
最小化的解a1,a2,…,ama_{1},a_{2},\dots,a_{m}a1​,a2​,…,am​,称为超定方程组的线性最小二乘解

线性最小二乘的求解

当RTRR^{T}RRTR可逆时,超定方程组Ra=yRa=yRa=y存在最小二乘解,且为如下正规方程组的解
RTRa=RTy R^{T}Ra=R^{T}y RTRa=RTy
a=(RTR)−1RTy a=(R^{T}R)^{-1}R^{T}y a=(RTR)−1RTy
线性最小二乘的Matlab实现
对超定方程组Rn×mam×1=yn×1R_{n\times m}a_{m\times_{1}}=y_{n\times_{1}}Rn×m​am×1​​=yn×1​​

a = R \ y

即可得到相应的最小二乘解

例

![[Pasted image 20240819095322.png]]

求二次多项式
f(x)=a1x2+a2x+a3 f(x)=a_{1}x^{2}+a_{2}x+a_{3} f(x)=a1​x2+a2​x+a3​
中的系数a1,a2,a3a_{1},a_{2},a_{3}a1​,a2​,a3​
(x12x11x22x21………x112x111)=(a1a2a3)=(y1y2…y11) \begin{pmatrix} x_{1}^{2} &&x_{1}&&1\\ x_{2}^{2} &&x_{2}&&1\\ \dots &&\dots&&\dots\\ x_{11}^{2}&&x_{11}&&1 \end{pmatrix}=\begin{pmatrix} a_{1} \\ a_{2} \\ a_{3} \end{pmatrix}=\begin{pmatrix} y_{1} \\ y_{2} \\ \dots \\ y_{11} \end{pmatrix} ​x12​x22​…x112​​​x1​x2​…x11​​​11…1​​=​a1​a2​a3​​​=​y1​y2​…y11​​​

x = 0 : 0.1 : 1;
y = [-0.447, 1.978, 3.28, 6.16, 7.08, 7.34, 7.66, 9.58, 9.48, 9.30, 11.2];
R = [(x.^2)',x',ones(11,1)];
A=R\y'

计算结果

A = [-9.8108, 20.1293, -0.0317]

f(x)=−9.8108x2+20.1293x−0.0317 f(x)=-9.8108x^{2}+20.1293x-0.0317 f(x)=−9.8108x2+20.1293x−0.0317

非线性最小二乘拟合及其实现

基本思路
  1. 确定问题的函数表达式的形式
    y=f(a1,a2,…,am;x) y=f(a_{1},a_{2},\dots,a_{m};x) y=f(a1​,a2​,…,am​;x)
    其中a1,a2,…,ama_{1},a_{2},\dots,a_{m}a1​,a2​,…,am​为待定参数
  2. 按照最小二乘原则确定待定参数
    在最小二乘意义下,求使得
    mina1,a2,…,amJ(a1,a2,…,am)=∑i=1n(δi)2 min_{a_{1},a_{2},\dots,a_{m}}J(a_{1},a_{2},\dots,a_{m})=\sum_{i=1}^{n}(\delta_{i})^{2} mina1​,a2​,…,am​​J(a1​,a2​,…,am​)=i=1∑n​(δi​)2
    =∑i=1n(yi−f(a1,a2,…,am;xi))2 =\sum_{i=1}^{n}(y_{i}-f(a_{1},a_{2},\dots,a_{m};x_{i}))^{2} =i=1∑n​(yi​−f(a1​,a2​,…,am​;xi​))2
    最小化的解a1^,a2^,…,am^\hat{a_{1}},\hat{a_{2}},\dots,\hat{a_{m}}a1​^​,a2​^​,…,am​^​,称为待定系数a1,a2,…,ama_{1},a_{2},\dots,a_{m}a1​,a2​,…,am​的非线性最小二乘解
非线性最小二乘拟合的Matlab实现

两个非线性最小二乘拟合函数

  • lsqcurvefit
  • lsqnonlin

非线性最小二乘求解命令lsqcurvefit
已知数据点
xdata=(xdata1,xdata2,…,xdatan)T xdata=(xdata_{1},xdata_{2},\dots,xdata_{n})^{T} xdata=(xdata1​,xdata2​,…,xdatan​)T
ydata=(ydata1,ydata2,…,ydatan)T ydata=(ydata_{1},ydata_{2},\dots,ydata_{n})^{T} ydata=(ydata1​,ydata2​,…,ydatan​)T
lsqcurvefit通过求解如下最小二乘问题,得到参数向量x的估计
min∣∣ydata−F(x,xdata)∣∣22=minx∑i(ydatai−F(x,xdatai)2 min| |ydata-F(x,xdata)| |_{2}^{2}=min_{x}\sum_{i}(ydata_{i}-F(x,xdata_{i})^{2} min∣∣ydata−F(x,xdata)∣∣22​=minx​i∑​(ydatai​−F(x,xdatai​)2
其中,F(x,xdata)F(x,xdata)F(x,xdata)表示预测值向量
F(x,xdata)=(F(x,xdata1)F(x,xdata2)…F(x,xdatan)) F(x, xdata)=\begin{pmatrix} F(x,xdata_{1}) \\ F(x,xdata_{2}) \\ \dots \\ F(x,xdata_{n}) \end{pmatrix} F(x,xdata)=​F(x,xdata1​)F(x,xdata2​)…F(x,xdatan​)​​
基本格式

x = lsqcurvefit('fun', x0, xdata, ydata);
  • fun是预先定义的函数,实现待拟合非线性函数F(x,xdata)F(x,xdata)F(x,xdata)
  • x0给定参数初始值(lsqcurvefit求解非线性优化问题的初始迭代点)
  • xdata和ydata是样本数据的输入和输出向量(或矩阵)
  • x为未知参数的非线性最小二乘估计
例

![[Pasted image 20240819133318.png]]

F(x,xdata)=(F(x,xdata1)F(x,xdata2)…F(x,xdatan)) F(x, xdata)=\begin{pmatrix} F(x,xdata_{1}) \\ F(x,xdata_{2}) \\ \dots \\ F(x,xdata_{n}) \end{pmatrix} F(x,xdata)=​F(x,xdata1​)F(x,xdata2​)…F(x,xdatan​)​​

  • x,三个待定参数组成的向量
  • xdata,所有的自变量的取值组成的向量
  • 输出,是待拟合的函数在每一个样本点处对应的拟合值
    =(a+be−0.02kt1a+be−0.02kt2…a+be−0.02kt11) =\begin{pmatrix} a+be^{-0.02kt_{1}} \\ a+be^{-0.02kt_{2}} \\ \dots \\ a+be^{-0.02kt_{11}} \end{pmatrix} =​a+be−0.02kt1​a+be−0.02kt2​…a+be−0.02kt11​​​
function f = curvefun(x, tdata)
f = x(1) + x(2)*exp(-0.02*x(3)*tdata) %其中x(1)=a;x(2)=b;x(3)=k
%主程序命令
tdata = 100:100:1000
ydata = 1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];
x0 = [0.1; 0.1; 0.1];
x = lsqcurvefit('curvefun', x0, xdata, ydata)
y_pred = curvefun(x, tdata)
plot(tdata, ydata, 'bo', tdata, y_pred, 'r.:') %可视化预测结果

运算结果

x = 0.0070  -0.0030  0.1012
y_pred = 0.0045  0.0050  0.0054  0.0057  0.0059  0.0061  0.0063  0.0064  0.0065  0.0066

结论
a = 0.0070, b=-0.0030, k=1012
f(t)=0.0070−0.0030e−0.02×0.1012×t f(t)=0.0070-0.0030e^{-0.02\times 0.1012\times t} f(t)=0.0070−0.0030e−0.02×0.1012×t
![[Pasted image 20240819135525.png]]

一维插值及其实现

一维插值的定义

已知n+1个节点(xi,yi);i=0,1,…,n(x_{i},y_{i});i= 0,1,\dots,n(xi​,yi​);i=0,1,…,n,其中xix_{i}xi​互不相同,设
a=x0<x1<⋯<xn=b a = x_{0}<x_{1}<\dots<x_{n}=b a=x0​<x1​<⋯<xn​=b
构建一个函数y=f(x)y=f(x)y=f(x)通过全部节点,即
f(xi)=yi;i=0,1,…,n f(x_{i})=y_{i};\quad i=0,1,\dots,n f(xi​)=yi​;i=0,1,…,n
用函数f(x)f(x)f(x)计算任一被插值点x∗x^{*}x∗处的插值,即
y∗=f(x∗) y^{*}=f(x^{*}) y∗=f(x∗)
![[Pasted image 20240819140124.png]]

拉格朗日插值

已知n+1个节点(xi,yi);i=0,1,…,n(x_{i},y_{i});i= 0,1,\dots,n(xi​,yi​);i=0,1,…,n,构造一个n次多项式Pn(x)P_{n}(x)Pn​(x),满足
Pn(xi)=yi;i=1,2,…,n P_{n}(x_{i})=y_{i};\quad i=1,2,\dots,n Pn​(xi​)=yi​;i=1,2,…,n
被称为拉格朗日插值多项式,构造方法如下
Pn(x)=∑i=1nLi(x)yi P_{n}(x)=\sum_{i=1}^{n}L_{i}(x)y_{i} Pn​(x)=i=1∑n​Li​(x)yi​
其中,Li(x)L_{i}(x)Li​(x)为n次多项式
Li(x)=(x−x0)(x−x1)…(x−xi−1)(x−xi+1)…(x−xn)(xi−x0)(xi−x1)…(xi−xi−1)(xi−xi+1)…(xi−xn) L_{i}(x)=\frac{(x-x_{0})(x-x_{1})\dots(x-x_{i-1})(x-x_{i+1})\dots(x-x_{n})}{(x_{i}-x_{0})(x_{i}-x_{1})\dots(x_{i}-x_{i-1})(x_{i}-x_{i+1})\dots(x_{i}-x_{n})} Li​(x)=(xi​−x0​)(xi​−x1​)…(xi​−xi−1​)(xi​−xi+1​)…(xi​−xn​)(x−x0​)(x−x1​)…(x−xi−1​)(x−xi+1​)…(x−xn​)​
称为拉格朗日插值基函数
Li(xj)={0, i≠j1, i=j L_{i}(x_{j})= \left\{\begin{matrix} 0,\ i\ne j \\ 1,\ i=j \end{matrix}\right. Li​(xj​)={0, i=j1, i=j​
Pn(xj)=yjj=0,1,…,n P_{n}(x_{j})=y_{j}\quad j=0,1,\dots,n Pn​(xj​)=yj​j=0,1,…,n
两点一次线性插值多项式
P1(x)=(x−x1)(x0−x1)y0+(x−x0)(x1−x0)y1 P_{1}(x)=\frac{(x-x_{1})}{(x_{0}-x_{1})}y_{0}+\frac{(x-x_{0})}{(x_{1}-x_{0})}y_{1} P1​(x)=(x0​−x1​)(x−x1​)​y0​+(x1​−x0​)(x−x0​)​y1​
三点二次抛物插值多项式
P2(x)=(x−x1)(x−x2)(x0−x1)(x0−x2)y0+(x−x0)(x−x2)(x1−x0)(x1−x2)y1+(x−x0)(x−x1)(x2−x0)(x2−x1)y2 P_{2}(x)=\frac{(x-x_{1})(x-x_{2})}{(x_{0}-x_{1})(x_{0}-x_{2})}y_{0}+\frac{(x-x_{0})(x-x_{2})}{(x_{1}-x_{0})(x_{1}-x_{2})}y_{1}+\frac{(x-x_{0})(x-x_{1})}{(x_{2}-x_{0})(x_{2}-x_{1})}y_{2} P2​(x)=(x0​−x1​)(x0​−x2​)(x−x1​)(x−x2​)​y0​+(x1​−x0​)(x1​−x2​)(x−x0​)(x−x2​)​y1​+(x2​−x0​)(x2​−x1​)(x−x0​)(x−x1​)​y2​
有可能产生震荡现象

例
![[Pasted image 20240819163240.png]]
![[Pasted image 20240819163348.png]]
![[Pasted image 20240819163404.png]]
![[Pasted image 20240819163423.png]]
![[Pasted image 20240819163435.png]]
![[Pasted image 20240819163450.png]]

随着节点个数的增加,多项式阶数不断增大,Pn(x)P_{n}(x)Pn​(x)产生较大的震荡现象

分段线性插值

基本思想:构造一条一条的直线段进行插值计算
Ln(x)=∑i=1nli(x)yi L_{n}(x)=\sum_{i=1}^{n}l_{i}(x)y_{i} Ln​(x)=i=1∑n​li​(x)yi​
其中
li(x)={x−xi−1(xi−xi−1),xi−1≤x<xix−xi+1(xi−xi+1),xi≤x<xi+10,otherwise l_{i}(x)= \left\{\begin{matrix} \frac{x-x_{i-1}}{(x_{i}-x_{i-1})},\qquad x_{i-1}\le x<x_{i} \\ \frac{x-x_{i+1}}{(x_{i}-x_{i+1})},\qquad x_{i}\le x<x_{i+1} \\ 0,\qquad otherwise \end{matrix}\right. li​(x)=⎩⎨⎧​(xi​−xi−1​)x−xi−1​​,xi−1​≤x<xi​(xi​−xi+1​)x−xi+1​​,xi​≤x<xi+1​0,otherwise​

  • 思路简单易实现
  • 计算量小
  • 不会产生震荡现象
  • 光滑性不好
    ![[Pasted image 20240819163641.png]]
三次样条插值

基本思想
构造一段一段的三次多项式曲线进行插值计算
si(x)=ai(x)3+bi(x)2+cix+di, i=1,2,…,n s_{i}(x)=a_{i}(x)^{3}+b_{i}(x)^{2}+c_{i}x+d_{i},\ i=1,2,\dots,n si​(x)=ai​(x)3+bi​(x)2+ci​x+di​, i=1,2,…,n

![[Pasted image 20240819164059.png]]

三次样条插值函数
S(x)={si(x),x∈[xi−1,xi]∣i=1,2,…,n} S(x)=\left \{ s_{i}(x),x\in [x_{i-1},x_{i}]| i=1,2,\dots,n \right \} S(x)={si​(x),x∈[xi−1​,xi​]∣i=1,2,…,n}
利用如下三类条件

  1. 插值条件n+1
    S(xi)=yi, i=0,1,2,…,n S(x_{i})=y_{i},\ i=0,1,2,\dots,n S(xi​)=yi​, i=0,1,2,…,n
  2. 二阶光滑3n-3
    S(x)∈C2[x0,xn] S(x)\in C^{2}[x_{0},x_{n}] S(x)∈C2[x0​,xn​]
  3. 自然边界条件2
    S′′(x0)=S′′(xn)=0 S''(x_{0})=S''(x_{n})=0 S′′(x0​)=S′′(xn​)=0
    可求得三次样条插值函数的所有待定系数
一维插值的Matlab实现
yi = interp1(x, y, xi, 'method')
  • x,y,插值节点对应的坐标
  • xi,被插值节点的坐标
  • yi,与xi对应的插值结果
  • ‘method’,插值方法
    nearest:最邻近插值
    linear:分段线性插值
    spline:三次样条插值
    cubic:立方插值
    缺省时:分段线性插值
  • x是单调的
  • xi不能够超过x的范围(内插)
例

![[Pasted image 20240819165803.png]]

hours = 1:12;
temps =[5 8 9 15 25 29 31 30 22 25 27 24];
h= 1 : 0.1 : 12;
t_nearest = interp1(hours, temps, h, 'nearest');%邻近插值
t_linear = interp1(hours, temps, h, 'linear');%分段线性插值
t_spline = interp1(hours, temps, h, 'spline');%三次样条插值
  • hours,原始的插值节点,横坐标的取值向量
  • temps,因变量温度的取值
  • h,被插值节点对应的向量,每隔1/10小时产生一个时间点对应的等差数列
subplot(2,2,1), plot(hours, temps, 'bo')
subplot(2,2,2), plot(hours, temps, 'bo', h, t_nearest,'r:')%邻近插值
subplot(2,2,3), plot(hours, temps, 'bo', h, t_linear,  'r:')%线性插值
subplot(2,2,4), plot(hours, temps, 'bo', h, t_spline, 'r:')%三次样条插值

![[Pasted image 20240819170440.png]]

二维插值及其实现

二维插值定义
  1. 网格节点
    已知mxn个节点
    (xi,yi,zij); i=1,…,m;j=1,…,n (x_{i},y_{i},z_{ij});\ i=1,\dots,m;j=1,\dots,n (xi​,yi​,zij​); i=1,…,m;j=1,…,n
    其中xi,yix_{i},y_{i}xi​,yi​互不相同,设
    a=x1<x2<⋯<xm=b a = x_{1}<x_{2}<\dots<x_{m}=b a=x1​<x2​<⋯<xm​=b
    c=y1<y2<⋯<yn=d c=y_{1}<y_{2}<\dots<y_{n}=d c=y1​<y2​<⋯<yn​=d
    构造一个二元函数z=f(x,y)z=f(x,y)z=f(x,y),通过已知节点,即
    f(xi,yj)=zij; i=1,…,m; j=1,…,n f(x_{i},y_{j})=z_{ij};\ i=1,\dots,m;\ j=1,\dots,n f(xi​,yj​)=zij​; i=1,…,m; j=1,…,n
    并由此计算插值
    z∗=f(x∗,y∗) z^{*}=f(x^{*},y^{*}) z∗=f(x∗,y∗)
    ![[Pasted image 20240819171122.png]]

  2. 散乱节点
    已知n个节点
    (xi,yi,zi); i=1,…,n (x_{i},y_{i},z_{i});\ i=1,\dots,n (xi​,yi​,zi​); i=1,…,n
    其中xi,yix_{i},y_{i}xi​,yi​互不相同
    构造一个二元函数z=f(x,y)z=f(x,y)z=f(x,y),通过已知节点,即
    f(xi,yj)=zi; i=1,…,n f(x_{i},y_{j})=z_{i};\ i=1,\dots,n f(xi​,yj​)=zi​; i=1,…,n
    并由此计算插值
    z∗=f(x∗,y∗) z^{*}=f(x^{*},y^{*}) z∗=f(x∗,y∗)
    ![[Pasted image 20240819174355.png]]

二维插值方法
  1. 最邻近插值
    基本思想
    将与被插值点最邻近节点的函数值作为插值结果
    ![[Pasted image 20240819174727.png]]
  • 思路直观,易理解
  • 计算量小,易于实现
  • 不连续
  1. 分片线性插值
    基本思想
    构造一片一片的空间三角平面进行插值计算
    ![[Pasted image 20240819174905.png]]
  • 直观,易于实现
  • 连续
  • 光滑性不好
  1. 双线性插值
    基本思想
    构造一片一片的双线性空间二次曲面进行插值计算
    双线性插值函数表达式为
    f(x,y)=(ax+b)(cy+d) f(x,y)=(ax+b)(cy+d) f(x,y)=(ax+b)(cy+d)
    四个待定系数的确定:
    利用矩形四个顶点(插值节点)处的函数值,建立四个方程进行求解
    ![[Pasted image 20240819175043.png]]
  • 易理解实现
  • 函数连续
  • 光滑性不好
  1. 三次卷积插值,三次样条插值
    保证光滑
二维插值的Matlab实现
  1. 网格节点
z = interp2(x0, y0, z0, x, y, 'method')
  • x0,y0,z0,指定插值节点对应的坐标
  • x,y,指定被插值节点的信息
  • z,被插值节点的插值结果
  • method,插值方法
    nearest:最邻近插值
    linear:线性插值C0C^{0}C0
    spline:三次样条插值C2C^{2}C2
    cubic:三次卷积插值C1C^{1}C1
    缺省时:线性插值
  • x0,y0单调
  • x,y为同型矩阵,或一个行向量另一个列向量
  • x,y不能够超过x0,y0的范围(内插)
  1. 散乱节点
z = gridata(x0, y0, z0, x, y, 'method')
  • x0,y0,z0,指定插值节点对应的坐标
  • x,y,指定被插值节点的信息
  • z,被插值节点的插值结果
  • method,插值方法
    nearest:最邻近插值
    linear:线性插值C0C^{0}C0
    cubic:三次插值C2C^{2}C2
    v4:双调和样条插值C2C^{2}C2
    缺省时:线性插值
  • x,y为同型矩阵,或一个行向量另一个列向量
  • x,y不能够超过x0,y0的范围(内插)
例1

![[Pasted image 20240819180032.png]]

画出原始数据的温度分布图

x=1:5;
y=1:3;
temps=[82 81 80 82 84;
	79 63 61 65 81;
	84 84 82 85 86];
mesh(x,y, temps)

![[Pasted image 20240819213301.png]]

然后,在x,y方向上每隔0.2个单位处进行插值,
再输入以下命令:

xi = 1: 0.2 : 5;
yi = 1: 0.2 : 3;
zi = interp2(x, y, temps, xi', yi, 'cubic');
mesh(xi, yi, zi)

画出插值后的温度分布曲面图
![[Pasted image 20240819213628.png]]

例2

![[Pasted image 20240819213644.png]]

画出原始海拔高度数据分布图

x=1200: 400: 4000;
y=[1200 1600 2400 2800 3200 3600];
[X,Y] = meshgrid(x,y);
Z=[1130 1250 1280 1230 1040 900 500 700;
1320 1450 1420 1400 1300 700 900 850;
1390 1500 1500 1400 900 1100 1060 950;
1500 1200 1100 1350 1450 1200 1150 1010;
1500 1550 1600 1550 1600 1600 1600 1550;
1480 1500 1550 1510 1430 1300 1200 980];
surfc(X, Y, Z);
  • meshgrid,对分割向量进行网格交叉,得到网格矩阵
  • surfc,三维空间曲面绘制
    ![[Pasted image 20240819215809.png]]

然后,对x,y方向上的取值向量加密,定义被插值数据点

xi = linspace(1200, 4000, 50);
yi = linspace(1200, 3600, 50);
[XI,YI]=meshgrid(xi,yi);
  • linspace,从1200到4000,产生50个均匀分布的点,构成等差数列
    进行插值计算,并可视化
methods = {'nearest', 'linear', 'spline', 'cubic'};
for i = 1 : 4
	ZI = interp2(X, Y, Z, XI, YI, methods{i});
	subplot(2, 2, i);
	surfc(XI, YI, ZI);%这个函数直接就是把等高线画在下面
	title(['方法:',methods{i}]);
	xlabel('x');
	ylabel('y');
end

![[Pasted image 20240819220510.png]]

数学建模之插值与拟合(附实例及MATLAB源码) MATLAB拟合和插值 写了整整一天,希望能给做建模的小伙伴一点帮助。 很用心,新手应该能看懂,其实理论知识也就那样,关键是自己动手实践,里面加了很多例题,希望小伙们们能看懂,我们建模国赛见???? 阅读详情

相关推荐

【机器学习入门到精通系列】插值与拟合

文章目录1 插值!2 一维插值拉格朗日插值法分段线性插值法例题3 二维插值网络结点插值法例题散乱数据插值4 拟合!5 区别与联系 1 插值! 在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。插值:用来填充图像变换时像素之间的空隙。 在应用领域中,由有限个已知数据点,构造一个函数,由此计算数据点之间的函数值,称为插值。 2 一维插值 拉格朗日插值法 基本原理 构造一组基函数 Lagra

NJU phd 在读。 1555

【Python机器学习系列】拟合和回归傻傻分不清?一文带你彻底搞懂它

拟合和回归傻傻分不清?一文带你彻底搞懂它

数据杂坛 5805

图解凸函数与凹函数:别再被数学定义搞晕了!

本文通过图解和生活化类比,深入浅出地解释了凸函数与凹函数的数学定义及其与日常直觉的差异。文章详细介绍了凸函数的图像特征、数学定义(包括二阶导数判断)、在机器学习中的重要性,以及常见误区和实际应用中的判断技巧,帮助读者彻底理解这一关键数学概念。

weixin_29159441的博客 650

深度学习中拟合是什么意思?

前言 拟合从数学图像角度来说就是将一组平面图像上的点用平滑的曲线连接起来。 在深度学习中平面图像上的点就是数据特征(验证集样本特征值),然后用线将已经学到的数据特征连接起来,这样才称为拟合。 拟合也分三种:正确拟合、欠拟合、过拟合。 正确拟合 正确拟合是将样本特征学习的非常平滑,也就是学习到的样本与验证样本特征差距不大,经过算法学习样本特征值与验证集样本特征值差距并不大 如下图是一个正确拟合的数据曲线图: 从上图中可以看到有许多的方块点,然后用曲线将每个原点按顺序连接在一起,但是你可.

17岁boy的博客 1万+

《缠中说禅108课》5:市场无须分析,只要看和干

喜欢吹牛皮的,在市场里最常见,例如一种以分析市场、吹牛皮为生的职业,叫什么股评、专家的。此类人不过是市场上的寄生虫,真正的猎手只会观察、操作,用嘴是打不了豺狼的。 市场就是一个狩猎场,首先你要成为一个好猎手,而一个猎手,首先要习惯于无言。如果真有什么真理,那真理也是无言的。可言说的,都不过是人类思想的分泌物,臭气熏天。真不可言说了,就无不可言,言而无言,是乃真言。 一个好的猎手,可以没有嘴巴,但一定会有一双不为外物所动的眼睛,在这眼睛下,一切如幻化般透明。要不被外物所动,则首先要不被自我所迷惑,其实..

BenRen1314的博客 800

【WRF-UCM】BEP+BEM 模拟:README

【WRF-UCM】BEP+BEM 模拟:README

WW、forever的博客 223

拟合是什么意思

当我们说一个模型"拟合"了数据时,意味着该模型通过学习数据的模式和结构,能够产生与实际观测数据相匹配的预测结果。拟合的目标是使模型的预测值与实际观测值尽可能接近。在分类问题中,拟合指的是通过学习训练数据中的模式和特征,构建一个能够对新样本进行正确分类的模型。在机器学习和统计学中,“拟合”(Fitting)是指使用模型来适应数据的过程。在回归问题中,拟合通常指的是通过拟合函数来逼近实际数据的分布趋势。总而言之,"拟合"是指通过调整模型参数使其与给定数据集相匹配的过程,以获得较好的预测能力和泛化能力。

weixin_44943389的博客 5382

【即插即用模块】注意力篇 | MICCAI 2023 | MFE:多尺度特征提取,告别固定感受野,猛涨2个点!

本文提出一种用于低分辨率乳腺癌病理图像超分辨率与分类的网络SHISRCNet。针对现有方法处理低分辨率图像效果差、感受野固定等问题,设计了多特征提取模块(MFE),通过多速率空洞卷积覆盖全尺度感受野(局部到全局),结合递进残差连接和动态权重融合机制,实现自适应多尺度特征增强。实验表明,该模块在超分辨率任务中PSNR提升近2个点,分类准确率显著提高。代码提供详细注释,支持即插即用,适用于各类多尺度视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 206

什么是拟合?

在机器学习中,我们通常将问题抽象为“函数拟合”:假设数据的真实规律可以用一个未知的函数 f∗(x) 表示(如房价与面积的关系、图像与标签的映射),而我们的目标是找到一个​​可训练的模型函数​​ f(x;θ)(其中 θ 是模型的参数,如权重、偏置),通过调整 θ 使得 f(x;θ) 尽可能接近 f∗(x)。​​关键目标​​:让模型 f(x;θ) 的预测值 y^​=f(x;θ) 与真实值 y 的偏差尽可能小。损失函数 L(θ) 是模型参数 θ 的函数,用于衡量模型在训练数据上的“不拟合程度”。​​回归任务​。

jixingye_1987的专栏 3289

宇树科技嵌入式面试题及参考答案(春晚机器人的公司)

内存对齐是指在内存中为数据对象分配存储空间时,按照一定的规则将数据存储在特定的地址上,以提高内存访问效率。不同的数据类型在内存中都有其特定的对齐要求,例如,int类型通常要求 4 字节对齐,double类型通常要求 8 字节对齐。这意味着数据的存储地址必须是其对齐字节数的整数倍。如果不进行内存对齐,处理器在访问数据时可能需要进行多次内存访问,从而降低了访问效率。指令可以用于控制结构体内存布局,它允许程序员指定结构体成员的对齐方式。其基本用法是在结构体定义之前使用来指定对齐字节数n,其中n。

大模型大数据攻城狮的专栏 3224

UE5 推荐的资产命名规范

在开发阶段中,随着 虚幻引擎(UE)(Unreal Engine (UE)) 项目日益复杂,内容浏览器(Content Browser) 中的 资产(Assets) 列表会不断扩充。这会导致资产出现各种变体版本,也会导致资产名称因过于相似而造成混淆。比如,你有一个文件夹名为"Soldier",这个文件夹中有蓝图、纹理和模型,它们的名称中都带"Soldier"一词,但在简单列表中,很难区别它们。

一碗清深的博客 3373

matlab笔记--插值与拟合

第一次写博客,是关于使用matlab插值与拟合的笔记,借鉴了网上的一些例题,以下是我关于学习插值与拟合的一些总结。 如有不足,请多包涵,也可评论给我一些建议,谢谢! 一、什么是插值与拟合 1.插值与拟合:如果要求近似函数经过所已知的所有数据点,此时称为插值问题;如果不要求近似函数经过所有数据点,而是要求它能较好地反映数据变化规律,称为数据拟合。 2.共同点:插值与拟合都是根据实际中一组已知数据来构...

qq_45260555的博客 1万+

具身智能:原理、算法与系统 第18章 模仿学习与人类示范

与基于试错机制的强化学习不同,模仿学习假设存在能够提供高质量轨迹示范的专家策略,学习者的目标是在不直接访问专家内部决策机制的情况下,复现或泛化专家的行为模式。此外,选项 GAIL(Option-GAIL)将分层强化学习与对抗模仿结合,学习选项(Options)级别的策略,能够捕捉专家示范中的多模态行为与高层意图。X-Sim 框架提出从真实到模拟再到真实的迁移路径:首先从人类视频中重建物理仿真环境,在仿真中训练状态级策略,随后通过策略蒸馏获得基于视觉的策略,最后通过在线领域自适应对齐真实与仿真观测。

VectorShift的博客 125

Matlab求解优化问题(规划问题、插值与拟合)

目录 想查找相关内容也可在页面按ctrl+F搜索文字 一、线性规划 二、非线性规划 三、插值与拟合 1.拟合 1)最小二乘曲线拟合 2)非线性最小二乘拟合 2.插值 1)一维插值指令 2)二维插值指令 一、线性规划 线性规划模型如下: Matlab中求解线性规划的指令: [x,fval,exitflag,output,lambda] =linprog(c,A,b,A...

Netceor的博客 1922

Dify 第 2 篇 Dify 插件离线安装

Dify是一个支持插件扩展的AI平台,其插件市场提供5种类型插件(模型、工具、Agent策略、扩展、插件包)。由于默认pip安装速度慢,可通过dify-plugin-repackaging工具将插件转换为离线包(使用阿里云镜像加速)。该工具提供两种方式:1)自备Python环境执行脚本;2)使用Docker环境(推荐)。脚本支持从Dify市场或GitHub下载插件,并重新打包为含依赖的离线包,便于通过"本地插件"方式快速安装。

甘蓝的专栏 1261

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

MATLAB学习笔记--插值和拟合

目录(一)插值与拟合(二)一维插值及MATLAB实现(三)二维插值及MATLAB实现(四)拟合及MATLAB实现新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML...

qq_45111566的博客 3325

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

数学实验3:插值与拟合

一、实验目的和要求 熟练掌握一维插值、二维插值及方法。 熟练掌握多项式拟合、非线性最小二乘拟合及方法。 二、实验内容 1 .山区地貌:在某山区测得一些地点的高程如下表:(平面区域1200≤x≤4000,1200≤y≤3600),试作出该山区的地貌图和等高线图,并对几种插值方法进行比较. ...

weixin_44780625的博客 4875

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

matlab最小二乘法,一元,二元,散点插值函数模板总结

%---------------------------------------------------------- %参数拟合 %非线性最小二乘法拟合 % xdata = [3.6,7.7,9.3,4.1,8.6,2.8,1.3,7.9,10.0,5.4]; % ydata = [16,150.5,260.1,22.5,206.5,9.9,2.7,165.5,325.0,54.5]; % c0=[ 0 0 0]; % f_h=@(c, x) c(1)*x.^2 + c(2)*x.*sin(x) + c.

江船夜雨听笛的博客 1315

【数学建模】插值与拟合

数学建模备赛笔记 算法篇 插值与拟合

m0_61819793的博客 1227

数学建模【插值与拟合】

在数学建模过程中,通常要处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式,针对此情况,很自然的想法就是,构造一个简单的函数作为要考察数据或复杂函数的近似。插值和拟合就可以解决这样的问题。给定一组数据,需要确定满足特定要求的曲线,如果所求曲线通过所给定有限个数据点,这就是插值。有时由于给定的数据存在测量误差,往往具有一定的随机性。因而,要求曲线通过所有数据点不现实也不必要。如果不要求曲线通过所有数据点,而是要求它反映对象整体的变化态势,得到简单实用的近似函数,这就是曲线拟合。

W_O_Z的博客 2224

matlab插值与拟合例题_MATLAB学习笔记——插值与拟合

(一)插值在应用领域中,由有限个已知数据点,构造一个函数,由此计算数据点之间的函数值,称为插值。一维插值1.拉格朗日插值法基本原理构造一组基函数Lagrange插值函数因为matlab没有提供Lagrange插值函数,故需要自己构造。x0,y0为原始坐标点,维度必须相同。x为待插值的点。y是返回值,是最终插值结果。function y=lagrange(x0,y0,x) %x0,y0为初始坐标...

weixin_33782854的博客 3275

预测问题中的插值拟合模型

给定一组数据,如果所求曲线通过全部给定的数据,这就是插值。很显然,求曲线通过全部的数据点不现实也不必要。如果不要求曲线通过所有数据点而是要求它反映对象整体的变化趋势得到一个近似函数,这就是曲线拟合。...

zby_0430的博客 1473

数学建模 —— 插值与拟合(1)

plot(x) —— 缺省自变量绘图格式plot(x,y) —— 基本格式,以y(x)的函数关系作出直角坐标图,如果y为n×m的矩阵,则以x为自变量,作出m条曲线plot(x1,y1,x2,y2,…,xn,yn) —— 多条曲线绘图格式plot(x1,y1,选项1,x2,y2, 选项2,…,xn,yn,选项n)——含选项的绘图格式颜色参数颜色线型参数线型标记符号标记b蓝实线圆点g绿点线o圆圈r红-.点划线加号c青--虚线星号m品红x叉号y。

清园暖歌的博客 1182

备战数学建模(Python)

Python之建模规划篇线性规划基本介绍线性规划的实例与定义线性规划问题的解的概念求解线性规划的Matlab 解法Python Scipy库实现Python plup库实现一个十分有趣的例子整数规划基本介绍整数规划的分类整数规划的特点求解方法分类0 - 1 型整数规划蒙特卡洛法 (随机取样法)整数线性规划的计算机求解分枝定界法Python 实现 (分支定界代码)非线性规划基本介绍线性规划与非线性规划的区别非线性规划的Matlab解法Python 解决非线性规划1、等式约束下的拉格朗日乘子法2、Python实

风信子的猫Redamancy的快乐星球 8681

数模笔记(四):插值与拟合1.0

数模笔记(一):线性规划、整数规划及非线性规划 数模笔记(二):层次分析法 数模笔记(三):灰色系统分析方法 一、插值 (一)概述 1.当遇到“已知函数在某区间(域)内若干点处的值,求函数在该区间(域)内其它点处的值”等类似的问题时,我们可以使用插值方法解决。 2.一维插值问题可描述为:已知函数f(x)在x0,x1,…,xn 处的值y0,y1,…,yn,求简单函数p(x),使 p(xi) = yi。称p(x)为f(x)的插值函数,点x0,x1,…称为插值节点,...

刘躺的博客 924

数学建模 -- 插值与拟合

灰色预测要等时距已知函数在某区间内若干点处的值,求函数在该区间内其他点处的值。这种问题适合用插值的方法解决。拉格朗日插值法:用的不多,在边缘处容易出现Runge现象。高次插值的Runge现象:当插值多项式的次数超过7时,插值多项式会出现严重的震荡现象。避免该现象的方法:将插值区间分成若干小区间,在小区间内用低次插值,即分段低次插值,如样条函数插值。

保持热爱,奔赴山海。 1962
上一篇: 主成分分析SPSS步骤+Matlab程序
下一篇: 时间序列分析1|AR模型|MA模型|ARMA模型
ChoSeitaku
博客等级 码龄5年 3452粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值