• 【学习笔记】函数逼近与数据拟合


    函数逼近与数据拟合

    多项式插值

    拉格朗日插值

    插值公式

    已知(y=f(x))的函数表为

    (x) (x_0) (x_1) (x_n)
    (f(x)) (f(x_0)) (f(x_1)) (f(x_n))

    寻找(n)次多项式(L_n(x))使满足插值条件:(f(x_i)=L_n(x_i)(i=0,...,n))

    [L_n(x)=sum_{k=0}^n f(x_k)l_k(x) ]

    [l_k(x)=frac{(x-x_0)(x-x_1)...(x-x_{k-1})(x-x_{k+1})...(x-x_n)}{(x_k-x_0)(x_k-x_1)...(x_k-x_{k-1})(x_k-x_{k+1})...(x_k-x_n)} ]

    (l_k(x))是设计出来的形式,满足条件。[1]

    引入记号:

    [omega_{n+1}(x)=(x-x_0)(x-x_1)...(x-x_n)=prod_{j=0}^n(x-x_j) ]

    [omega_{n+1}^{prime}(x_k)=(x_k-x_0)(x_k-x_1)...(x_k-x_{k-1})(x_k-x_{k+1})...(x_k-x_n)=prod_{j=0,j e k}^n(x_k-x_j) ]

    则:

    [L_n(x)=sum_{k=0}^nfrac{omega_{n+1}(x)}{(x-x_k)omega_{n+1}^{prime}(x_k)}f(x_k) ]

    插值误差 / 插值余项表达式

    在非节点处有误差,记为(R_n(x)),则(R_n(x)=f(x)-L_n(x))

    [|R_n(x)|=frac{f^{(n+1)}(xi)}{(n+1)!}omega_{n+1}(x) ]

    其中(f^{(n+1)})表示(n+1)阶导数。

    由于(xi)在(a,b)内的具体位置通常不能确切给出,求(M_{n+1}=max_{a<x<b}|f^{(n+1)}(x)|),得到误差的边界

    [|R_n(x)|le frac{M_{n+1}}{(n+1)!}omega_{n+1}(x) ]

    可知,误差和节点(x_0...x_n)有关,为使误差小,应使(|omega_{n+1}(x)|)尽可能小,即插值基点尽可能靠近(x)

    公式记忆

    线性插值

    [L_1(x)=frac{x-x_1}{x_0-x_1}f(x_0)+frac{x-x_0}{x_1-x_0}f(x_1) ]

    [R_1(x)=frac{f^{(2)}(xi)}{2}(x-x_0)(x-x_1) ]

    抛物线插值

    [L_2(x)=frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}f(x_0)+frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}f(x_1)+frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}f(x_2) ]

    [R_2(x)=frac{f^{(3)}(xi)}{3!}(x-x_0)(x-x_1)(x-x_2) ]

    牛顿插值

    基于拉格朗日插值的改进,拉氏插值在更新节点数量时,每次都要重新计算L,设计一种方法避免重复计算。

    差商

    (frac{f(x_j)-f(x_i)}{x_j-x_i})为函数(f(x))关于节点(x_i,x_j)的一阶差商,记为:

    [f[x_i,x_j]=frac{f(x_j)-f(x_i)}{x_j-x_i} ]

    称两个一阶差商(f[x_i,x_j])(f[x_j,x_k])之间的差商为二阶差商,即:

    [f[x_i,x_j,x_k]=frac{f[x_j,x_k]-f[x_i,x_j]}{x_k-x_i} ]

    (k)阶差商:

    [f[x_0,x_1,...,x_k]=frac{f[x_1,...,x_k]-f[x_0,...,x_{k-1}]}{x_k-x_0} ]

    基本性质:

    1. (k)阶差商可表示为函数值的线性组合。

      [f[x_0,x_1,...,x_k]=sum_{i=0}^nfrac{f(x_i)}{omega^{prime}_{k+1}(x_i)} ]

    2. 差商具有对称性,在(f[x_0,x_1,...,x_k])中任意改变节点次序,值不变。

      [f[x_0,x_1,x_2]=frac{f[x_1,x_2]-f[x_0,x_1]}{x_2-x_0}=frac{f[x_0,x_2]-f[x_0,x_1]}{x_2-x_1} ]

    3. (n)次多项式(f(x))(k)阶差商(f[x,x_0,...,x_{k-1}]),当(kle n)(n-k)次多项式,当(k>n)时其值恒等于0。

    4. (f[x,x_0,...,x_{k}]=frac{f^{(k)}(xi)}{k!}),其中(xi)介于(x_0,...,x_k)的最大值和最小值之间。

    节点相重时的差商,有:

    [f[x,x,x_0,...,x_k]=frac{d}{dx}f[x,x_0,...,x_n] ]

    [funderbrace{[x,x,...,x]}_{n+1个}=frac{f^{(n)}(x)}{n!} ]

    Newton插值多项式

    用差商来构造:

    [N_n(x)=f(x_0)+f[x_0,x_1](x-x_0)+...+f[x_0,x_1,...,x_n](x-x_0)...(x-x_{n-1}) ]

    [ ilde{R}_n(x)=f[x,x_0,...,x_n](x-x_0)...(x-x_{n-1})(x-x_n) ]

    (f(x)=N_n(x)+ ilde{R}_n(x))

    Newton插值多项式有递推关系式:

    [N_{k+1}(x)=N_k(x)+f[x_0,x_1,...,x_k,ar{x}](x-x_0)...(x-x_k) ]

    公式记忆

    差商表

    (x_i) (f(x_i)) 一阶差商 二阶差商 三阶差商 四阶差商
    (x_0) (f(x_0))
    (x_1) (f(x_1)) (f[x_0,x_1]=frac{f(x_1)-f(x_0)}{x_1-x_0})
    (x_2) (f(x_2)) (f[x_1,x_2]) (f[x_0,x_1,x_2]=frac{f[x_1,x_2]-f[x_0,x_1]}{x_2-x_0})
    (x_3) (f(x_3)) (f[x_2,x_3]) (f[x_1,x_2,x_3]) (f[x_0,x_1,x_2,x_3]=frac{f[x_1,x_2,x_3]-f[x_0,x_1,x_2]}{x_3-x_0})
    (x_4) (f(x_4)) (f[x_3,x_4]) (f[x_2,x_3,x_4]) (f[x_1,x_2,x_3,x_4]) (f[x_0,x_1,x_2,x_3,x_4])

    * 等距节点插值

    差分

    等距节点:(x_i=x_0+ih i = 0,1,...,n),其中 (h) 称为步长。称等距节点对应的函数值之差为差分。(f_{k+1}-f_k)(f(x))(x_k) 处步长为 (h) 的一阶向前差分,简称一阶差分:

    [Delta f_k=f_{k+1}-f_k ]

    (f(x))(x_k) 处步长为 (h) 的二阶向前差分:

    [Delta^2f_k = Delta f_{k+1}-Delta f_k ]

    (f(x))(x_k) 处步长为 (h)(m) 阶向前差分:

    [Delta^m f_k = Delta ^{m-1} f_{k+1}-Delta ^{m-1} f_k ]

    差分和差商之间的关系:

    [f[x_i,...,x_{i+k}]=frac{Delta^k f_i}{k!h^k} ]

    将牛顿插值公式中各阶差商分别用相应的差分代替,得到等距节点的插值公式。

    牛顿前插公式

    已知节点 (x_i = x_0+ih i = 0,1,...,n),要用 (m+1) 个函数值信息计算靠近 (x_0) 附近点的函数近似值,则:

    [N_m(x)=f_0+tDelta f_0 +frac{t(t-1)}{2!}Delta^2 f_0+...+frac{t(t-1)...(t-m+1)}{m!}Delta ^mf_0 ]

    [R_m(x)=frac{h^{m+1}f^{(m+1)}(xi)}{(m+1)!}t(t-1)...(t-m) quad xi in (x_0,x_m) ]

    其中 (t) 表示 (x=x_0+th 0 le t le m),从 (x)(x_0) 的步数。

    牛顿后插公式

    (m+1) 个函数值信息计算靠近 (x_n) 附近点的函数近似值,则:

    [N_m(x)=f_n+tDelta f_{n-1} +frac{t(t+1)}{2!}Delta^2 f_{n-2}+...+frac{t(t+1)...(t+m-1)}{m!}Delta ^mf_{n-m} ]

    [R_m(x)=frac{h^{m+1}f^{(m+1)}(xi)}{(m+1)!}t(t+1)...(t+m) quad xi in (x_{n-m},x_n) ]

    公式记忆

    一般当(x)靠近(x_0)时用前插,靠近(x_n)时用后插。如果对相同节点进行插值,前插公式和后插公式只有形式上的区别,实际是一个多项式,即:

    [N_n(x)=f_0 +frac{Delta f_0}{h}(x-x_0)+...+frac{Delta^n f_0}{n!h^n}(x-x_0)...(x-x_{n-1}) ]

    [N_n(x)=f_n +frac{Delta f_{n-1}}{h}(x-x_n)+...+frac{Delta^n f_0}{n!h^n}(x-x_n)...(x-x_1) ]

    常用公式:

    三次前插

    [N_3(x)=f_0+frac{Delta f_0}{h}(x-x_0)+frac{Delta^2f_0}{2!h^2}(x-x_0)(x-x_1)+frac{Delta ^3 f_0}{3!h^3}(x-x_0)(x-x_1)(x-x_2) ]

    二次后插

    [N_2(x)=f_2+frac{Delta f_1}{h}(x-x_2)+frac{Delta ^2 f_0}{2!h^2}(x-x_2)(x-x_1) ]

    PS: 差分值从差分表中直接读取

    差分表

    (x_i) (f_i) (Delta f_i) (Delta^2 f_i) (Delta^3 f_i) (Delta^n f_i)
    (x_0) (f_0)
    (Delta f_0)
    (x_1) (f_1) (Delta^2 f_0)
    (Delta f_1) (Delta^3 f_0)
    (x_2) (f_2) (Delta^2 f_1) (Delta^n f_0)
    (Delta f_2) (Delta^3 f_{n-3})
    (x_3) (f_3) (Delta^2 f_{n-2})
    (Delta f_{n-1})
    (x_n) (f_n)

    规律:前插就是上到下一条线的系数,后插就是下到上的一条线。n次插值用到n个系数。

    埃尔米特插值

    多项式插值在次数较高时,会产生Runge现象,解决方法是加入导数约束、分段插值。

    埃尔米特插值不仅要求节点处函数值相等,还要求导数值相等。

    设已知 (y=f(x)) 的函数及导数表为:

    (x_i) (x_0) (x_1) (x_n)
    (f(x_i)) (f(x_0)) (f(x_1)) (f(x_n))
    (f^{prime}(x_i)) (f^{prime}(x_0)) (f^{prime}(x_1)) (f^{prime}(x_n))

    寻求 (2n+1) 次多项式 (H_{2n+1}(x)) 满足:

    [H_{2n+1}(x_k)=f(x_k) \ H^{prime}_{2n+1}(x_k)=f^{prime}(x_k)quad k=0,1,...,n ]

    埃尔米特插值多项式

    构造插值基函数 (h_i(x),ar{h}_i(x)) 使得 (H_{2n+1}(x)=sum_{i=0}^nh_i(x)f(x_i)+sum_{i=0}^n ar{h}_i(x)f^{prime}(x_i))

    注意埃尔米特插值和拉格朗日插值的相同点

    根据公式(2),有:

    [l_i(x)=frac{(x-x_0)(x-x_1)...(x-x_{i-1})(x-x_{i+1})...(x-x_n)}{(x_i-x_0)(x_i-x_1)...(x_i-x_{i-1})(x_i-x_{i+1})...(x_i-x_n)} ]

    构造埃尔米特插值基函数:

    [h_i(x)=(1-2l^{prime}_i(x_i)(x-x_i))l^2_i(x) ]

    [ar{h}_i(x)=(x-x_i)l_i^2(x) ]

    (l_i(x)) 两端取对数求导后,可以得到 (l^{prime}_i(x))

    [l^{prime}_i(x_i)=sum_{k=0,k e i}^n frac{1}{x_i-x_k} ]

    所以,埃尔米特插值多项式为:

    [H_{2n+1}(x)=sum_{i=0}^n(1-2sum_{k=0,k e i}^n frac{1}{x_i-x_k}(x-x_i))l_i^2(x)f(x_i)+sum_{i=0}^n(x-x_i)l_i^2(x)f^{prime}(x_i) ]

    [R_{2n+1}(x)=frac{f^{(2n+2)}(xi)}{(2n+2)!}omega^2_{n+1}(x) ]

    注意:余项(R=f_{原}-f_{插}),给定了函数的导数,要注意0,要结合函数值,注意余项平方。

    最小二乘拟合

    最小二乘问题

    由实验采集到大量观测数据:

    (x_i) (x_1) (x_2) (x_3) (x_N)(N很大)
    (y_i) (y_1) (y_2) (y_3) (y_N)

    已知基函数 (phi_0(x),phi_1(x),...,phi_n(x)(n ll N ))(需线性无关),寻找 (p_n(x)=sum_{k=0}^n a_k phi_k(x)) ,使得误差函数 (Phi(a_0,a_1,...,a_n)=sum_{k=0}^N omega_k(f(x_k)-p_n(x_k))^2) 达到最小,其中 (omega_k) 是权系数,称 (p_n(x)) 为拟合函数。[2]

    (delta_i=f(x_i)-p_n(x_i)(i=1,...,N)) ,则称(delta_i)(x_i)处的偏差或残差。将基函数取为幂函数,即(phi_k(x)=x^k,k=0,1,...,n),考虑误差函数:

    [Phi(a_0,a_1,...,a_n)=sum_{k=0}^N omega_kdelta_i^2=sum_{k=0}^N omega_k(f(x_i)-sum_{k=0}^na_kx_i^k)^2 ]

    称多元极值问题

    [Phi(a_0^{star},a_1^{star},...,a_n^{star})=min_{a_0,...,a_nin R}Phi(a_0,...,a_n) ]

    为最小二乘问题,其解对应的

    [p_n^{star}(x)=a_0^{star}+a_1^{star}x+...+a_n^{star}x^n ]

    为数据 ((x_i,f(x_i)),i=0,...,N)(n) 次最小二乘拟合多项式。

    解(42)式应满足方程组 (frac{partial Phi}{partial a_j}=0),即

    (n+1) 阶线性方程组称为正规方程组(或法方程组)。

    记公式

    如果是 (y=a+bx),对应 (j=0,1),则 (a,b) 应满足的正规方程组为:

    [asum_{i=1}^nomega_i+bsum_{i=1}^nomega_ix_i=sum_{i=1}^nomega_if(x_i)\ asum_{i=1}^nomega_ix_i+bsum_{i=1}^nomega_ix_i^2=sum_{i=1}^nomega_ix_if(x_i) ]

    如果是 (y=a+bx^2),对应 (j=0,2),则 (a,b) 应满足的正规方程组为:

    [asum_{i=1}^nomega_i+bsum_{i=1}^nomega_ix_i^2=sum_{i=1}^nomega_if(x_i)\ asum_{i=1}^nomega_ix_i^2+bsum_{i=1}^nomega_ix_i^4=sum_{i=1}^nomega_ix_i^2f(x_i) ]

    如果经验公式是幂函数形式,就先取对数变成加和形式。


    1. 设计出的系数形式,(i=k)时为1,其余为0。 ↩︎

    2. 权系数反映该点数据的重要程度。如果题目没有给出,默认都是1。若观测数据有明显周期性,基函数取三角函数;若观测数据有明显单调性,基函数取指数函数;一般情况下,基函数可取幂函数。(phi_k(x)=x^k)↩︎

  • 相关阅读:
    angular5 二维码插件
    ag-grid 设置默认选中多行
    断点续传和下载原理分析
    Volley 实现原理图
    Volley全方位解析,带你从源码的角度彻底理解
    23种设计模式
    android service
    Android drawable微技巧
    Android ListView实现不同item的方法和原理分析
    Android 网络框架 volley源码剖析
  • 原文地址:https://www.cnblogs.com/ColleenHe/p/13627737.html
Copyright © 2020-2023  润新知