圆拟合算法

圆拟合算法

文章目录

  • 圆拟合算法
    • 最小二乘法拟合(least square fitting)
      • 代数拟合 (algebraic fitting)
        • Kåsa Fit
        • Pratt Fit
          • 算法分析
        • Taubin Fit
      • 迭代重加权最小二乘法(IRLS, iteratively reweighted least-squares)
        • 迭代加权最小二乘法在图形拟合中的应用
        • 削波因数的计算
        • Huber 函数
        • M 估计
          • M 估计的发展
          • M 估计的极值法定义
      • 几何拟合(geometric fitting)
        • 雅克比矩阵
          • 雅克比矩阵的定义
          • 向量微积分
        • 高斯 - 牛顿迭代法
          • 高斯- 牛顿迭代法的定义
          • 高斯-牛顿迭代的求解步骤
          • 泰勒公式
            • 泰勒公式的定义
          • 泰勒级数
        • 非线性最小二乘拟合
        • 圆的几何拟合
    • RANSAC (Random Sample Consensus)拟合
      • RANSAC 算法的流程
      • RANSAC 与最小二乘的区别
      • 验证思路
      • 参数选择
        • RANSAC 的数学原理
      • 优点与缺点
        • 优点
        • 缺点
      • 应用
      • 优点与缺点
        • 优点
        • 缺点
      • 应用

最小二乘法拟合(least square fitting)

使用最小二乘法,对几何特征进行拟合,主要有两大类方式:代数拟合和几何拟合,这两种方式的区别,在于它们对误差距离的定义方式。

代数距离:为要进行拟合的几何特征(直线、圆、椭圆等)写下隐式方程,然后将点的坐标带入此隐式方程就得到了点到该几何特征的距离。这种方法对于直线拟合、圆拟合,返回的就是到其的真实距离。而对于椭圆拟合,它返回的值是与距离有类似的属性,但不是一个真正的距离值。因此这个距离被称为 代数距离

代数拟合 (algebraic fitting)

代数拟合几何特征是通过带有参数向量 a ⃗ = ( a 1 , ⋯   , a q ) \vec a = (a_1, \cdots, a_q) a =(a1,,aq) 的隐式方程 F ( X , a ) = 0 F(X, a) = 0 F(X,a)=0 来表示的。其误差距离是由隐式方程与每个给定点的期望值(即零)的偏差定义。但方程的不确定性导致给出的点会出现不位于图形上的现象(即存在一些拟合误差)。

关于圆的最小二乘法拟合,大多数论文给出的其代数距离平方和及其修正公式,如下所示:
∑ i = 1 m e i 2 = ∑ i = 1 m [ ( x i − x c ) 2 + ( y i − y c ) 2 − r 2 ] 2 (1) \sum_{i=1}^m e_i^2 = \sum_{i=1}^m[(x_i - x_c)^2 + (y_i - y_c)^2 - r^2]^2 \tag{1} i=1mei2=i=1m[(xixc)2+(yiyc)2r2]2(1)
尽管代数拟合在实现和计算成本方面具有优势,但在精度方面以及与拟合参数和误差的物理解释相关方面都存在缺陷。其中,已知的代数拟合的缺点,有以下几点:

  • 误差距离的定义与测量准则不符;
  • 拟合参数的可靠性,难以检验;
  • 拟合参数对坐标变换来说是可变的(如,椭圆拟合过程中,对给定点进行一个简单的平移变换,不仅会造成中心点的坐标发生变化,而且还会造成椭圆轴的长度及角度的变化);
  • 预估的拟合参数存在偏差;
  • 拟合误差存在不合理的加权;
  • 拟合过程有时会以意外的几何特征结束(如,可能会以双曲线代替椭圆的拟合);
Kåsa Fit
注:网络上查到的大多数最小二乘法求拟合圆的算法,均是该算法的实现。

以下是 Kåsa Fit 的求解过程:

首先,根据圆的公式 ( x − A ) 2 + ( y − B ) 2 = R 2 (x-A)^2 + (y-B)^2 = R^2 (xA)2+(yB)2=R2 可得,
R 2 = x 2 − 2 A x + A 2 + y 2 − 2 B y + B 2 ; R^2 = x^2 - 2Ax + A^2 + y^2 - 2By + B^2; R2=x22Ax+A2+y22By+B2;
令:
a = − 2 A , b = − 2 B , c = A 2 + B 2 − R 2 a = -2A, b = -2B, c = A^2 + B^2 - R^2 a=2A,b=2B,c=A2+B2R2
可得圆的方程的另一种形式:
x 2 + y 2 + a x + b y + c = 0 (1) x^2 + y^2 + ax + by + c = 0 \tag{1} x2+y2+ax+by+c=0(1)

根据公式 ( 1 ) (1) (1),只要求出参数 a, b, c 即可得到圆心及半径的参数;
A = − a 2 , B = − b 2 , R = a 2 + b 2 − 4 c 2 A = -\frac {a}{2}, B = -\frac{b}{2},R = \frac{\sqrt{a^2 + b^2 - 4c}}{2} A=2aB=2bR=2a2+b24c

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HoQMhYw6-1584789138214)(图1.png)]

样本集 ( X i , Y i ) , i ∈ ( 1 , 2 , 3 , ⋯   , n (X_i, Y_i), i \in (1, 2, 3, \cdots, n (Xi,Yi),i(1,2,3,,n 中,点到圆心的距离为 d i d_i di
d i 2 = ( X i − A ) 2 + ( Y i − B ) 2 d_i^2 = (X_i - A)^2 + (Y_i - B)^2 di2=(XiA)2+(YiB)2
令,点 ( X i , Y i ) (X_i, Y_i) (Xi,Yi)到圆边缘的距离的平方与半径的平方差为:
δ = d i 2 − R 2 = ( X i − A ) 2 + ( Y i − B ) 2 − R 2 = X i 2 + Y i 2 + a X i + b Y i + c \delta = d_i^2 - R^2 = (X_i - A)^2 + (Y_i - B)^2 - R^2 = X_i^2 + Y_i^2 + aX_i + bY_i + c δ=di2R2=(XiA)2+(YiB)2R2=Xi2+Yi2+aXi+bYi+c

令, Q ( a , b , c ) Q(a, b, c) Q(a,b,c) δ 2 \delta^2 δ2 的平方和:
Q ( a , b , c ) = ∑ i = 1 n δ i 2 = ∑ i = 1 n [ ( X i 2 + Y i 2 + a X i + b Y i + c ) ] 2 Q(a, b, c) = \sum_{i=1}^n {\delta_i^2} = \sum_{i=1}^n[(X_i^2 + Y_i^2 + aX_i + bY_i + c)]^2 Q(a,b,c)=i=1nδi2=i=1n[(Xi2+Yi2+aXi+bYi+c)]2
求参数 ( a , b , c ) (a, b, c) (a,b,c) 使得 Q ( a , b , c ) Q(a, b, c) Q(a,b,c) 的值最小。

解:平方差 Q ( a , b , c ) Q(a, b, c) Q(a,b,c) 大于等于 0 0 0,因此,函数存在大于或等于 0 0 0 的极小值,其最大值为无穷大;
F ( a , b , c ) F(a, b, c) F(a,b,c) ( a , b , c ) (a, b, c) (a,b,c),令偏导等于 0 0 0,则得到极值点,比较所有的极值点函数,即可得到极小值;
∂ Q ( a , b , c ) ∂ a = ∂ ( ∑ i = 1 n [ ( X i 2 + Y i 2 + a X i + b Y i + c ) ] 2 ) \frac{\partial {Q(a, b, c)}}{ \partial a} = \partial ({\sum_{i=1}^n[(X_i^2 + Y_i^2 + aX_i + bY_i + c)]^2}) aQ(a,b,c)=(i=1n[(Xi2+Yi2+aXi+bYi+c)]2)
令,常数 D = ( X i 2 + Y i 2 + b Y i + c ) D = (X_i^2 + Y_i^2 + bY_i + c) D=(Xi2+Yi2+bYi+c),则上式可转化为:
∂ Q ( a , b , c ) ∂ a = ∂ ( ∑ i = 1 n [ ( D + a X i ) ] 2 ) \frac{\partial {Q(a, b, c)}}{ \partial a} = \partial ({\sum_{i = 1}^n[(D + aX_i)]^2}) aQ(a,b,c)=(i=1n[(D+aXi)]2)
则,
∂ Q ( a , b , c ) ∂ a = ∂ ( ∑ i = 1 n [ ( D 2 + 2 D a X i + X i 2 a 2 ) ] ) = ∑ i = 1 n ( 2 X i 2 a + 2 D X i ) = ∑ i = 1 n 2 ( a X i + D ) X i \frac{\partial {Q(a, b, c)}}{ \partial a} = \partial({\sum_{i=1}^n[(D^2 + 2DaX_i + X_i^2a^2)]}) =\sum_{i=1}^n{(2X_i^2a + 2DX_i)} = \sum_{i=1}^n2(aX_i + D)X_i aQ(a,b,c)=(i=1n[(D2+2DaXi+Xi2a2)])=i=1n(2Xi2a+2DXi)=i=1n2(aXi+D)Xi
D D D代入上式,得:
∂ Q ( a , b , c ) ∂ a = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) X i = 0 (2) \frac{\partial{Q(a, b, c)}}{\partial a} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c)X_i = 0\tag{2} aQ(a,b,c)=i=1n2(Xi2+Yi2+aXi+bYi+c)Xi=0(2)
同理,可得 b , c b, c b,c 的偏导数:
∂ Q ( a , b , c ) ∂ b = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) Y i = 0 (3) \frac{\partial{Q(a, b, c)}}{\partial b} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c)Y_i = 0\tag{3} bQ(a,b,c)=i=1n2(Xi2+Yi2+aXi+bYi+c)Yi=0(3)

∂ Q ( a , b , c ) ∂ c = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) = 0 (4) \frac{\partial{Q(a, b, c)}}{\partial c} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c) = 0 \tag{4} cQ(a,b,c)=i=1n2(Xi2+Yi2+aXi+bYi+c)=0(4)

将上述等式,改写成方程的形式:
{ ∂ Q ( a , b , c ) ∂ a = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) X i = 0 ∂ Q ( a , b , c ) ∂ b = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) Y i = 0 ∂ Q ( a , b , c ) ∂ c = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) = 0 \begin{cases} \frac{\partial{Q(a, b, c)}}{\partial a} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c)X_i = 0 \\ \frac{\partial{Q(a, b, c)}}{\partial b} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c)Y_i = 0 \\ \frac{\partial{Q(a, b, c)}}{\partial c} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c) = 0 \end{cases} aQ(a,b,c)=i=1n2(Xi2+Yi2+aXi+bYi+c)Xi=0bQ(a,b,c)=i=1n2(Xi2+Yi2+aXi+bYi+c)Yi=0cQ(a,b,c)=i=1n2(Xi2+Yi2+aXi+bYi+c)=0

根据 ∑ \sum 运算法则,将常数提出,并且因为等式等于 0 0 0,所以,可以直接省略,得下式;

{ ∂ Q ( a , b , c ) ∂ a = ∑ i = 1 n ( X i 3 + X i Y i 2 + a X i 2 + b X i Y i + c X i ) = 0 ∂ Q ( a , b , c ) ∂ b = ∑ i = 1 n ( X i 2 Y i + Y i 3 + a X i Y i + b Y i 2 + c Y i ) = 0 ∂ Q ( a , b , c ) ∂ c = ∑ i = 1 n ( X i 2 + Y i 2 + a X i + b Y i + c ) = 0 \begin{cases} \frac{\partial{Q(a, b, c)}}{\partial a} = \sum_{i=1}^n(X_i^3 + X_iY_i^2 + aX_i^2 + bX_iY_i + cX_i) = 0 \\ \frac{\partial{Q(a, b, c)}}{\partial b} = \sum_{i=1}^n(X_i^2Y_i + Y_i^3 + aX_iY_i + bY_i^2 + cY_i) = 0 \\ \frac{\partial{Q(a, b, c)}}{\partial c} = \sum_{i=1}^n(X_i^2 + Y_i^2 + aX_i + bY_i + c) = 0 \end{cases} aQ(a,b,c)=i=1n(Xi3+XiYi2+aXi2+bXiYi+cXi)=0bQ(a,b,c)=i=1n(Xi2Yi+Yi3+aXiYi+bYi2+cYi)=0cQ(a,b,c)=i=1n(Xi2+Yi2+aXi+bYi+c)=0

将上式展开,成下列形式:

{ ∑ i = 1 n X i 3 + ∑ i = 1 n X i Y i 2 + a ∑ i = 1 n X i 2 + b ∑ i = 1 n X i Y i + c ∑ i = 1 n X i = 0 ∑ i = 1 n X i 2 Y i + ∑ i = 1 n Y i 3 + a ∑ i = 1 n X i Y i + b ∑ i = 1 n Y i 2 + c ∑ i = 1 n Y i = 0 ∑ i = 1 n X i 2 + ∑ i = 1 n Y i 2 + a ∑ i = 1 n X i + b ∑ i = 1 n Y i + ∑ i = 1 n c = 0 \begin{cases} \sum_{i=1}^n{X_i^3} + \sum_{i=1}^n{X_iY_i^2} + a\sum_{i=1}^n{X_i^2} + b\sum_{i=1}^n{X_iY_i} + c\sum_{i=1}^n{X_i} = 0 \\ \sum_{i=1}^n{X_i^2Y_i} + \sum_{i=1}^n{Y_i^3} + a\sum_{i=1}^n{X_iY_i} + b\sum_{i=1}^n{Y_i^2} + c\sum_{i=1}^n{Y_i} = 0 \\ \sum_{i=1}^n{X_i^2} + \sum_{i=1}^n{Y_i^2} + a\sum_{i=1}^n{X_i} + b\sum_{i=1}^n{Y_i} + \sum_{i=1}^nc = 0 \end{cases} i=1nXi3+i=1nXiYi2+ai=1nXi2+bi=1nXiYi+ci=1nXi=0i=1nXi2Yi+i=1nYi3+ai=1nXiYi+bi=1nYi2+ci=1nYi=0i=1nXi2+i=1nYi2+ai=1nXi+bi=1nYi+i=1nc=0

根据求和公式,得 ∑ i = 1 n c = N c \sum_{i=1}^n c = Nc i=1nc=Nc,代入方程得:
{ ∑ i = 1 n X i 3 + ∑ i = 1 n X i Y i 2 + a ∑ i = 1 n X i 2 + b ∑ i = 1 n X i Y i + c ∑ i = 1 n X i = 0 ∑ i = 1 n X i 2 Y i + ∑ i = 1 n Y i 3 + a ∑ i = 1 n X i Y i + b ∑ i = 1 n Y i 2 + c ∑ i = 1 n Y i = 0 ∑ i = 1 n X i 2 + ∑ i = 1 n Y i 2 + a ∑ i = 1 n X i + b ∑ i = 1 n Y i + N c = 0 \begin{cases} \sum_{i=1}^n{X_i^3} + \sum_{i=1}^n{X_iY_i^2} + a\sum_{i=1}^n{X_i^2} + b\sum_{i=1}^n{X_iY_i} + c\sum_{i=1}^n{X_i} = 0 \\ \sum_{i=1}^n{X_i^2Y_i} + \sum_{i=1}^n{Y_i^3} + a\sum_{i=1}^n{X_iY_i} + b\sum_{i=1}^n{Y_i^2} + c\sum_{i=1}^n{Y_i} = 0 \\ \sum_{i=1}^n{X_i^2} + \sum_{i=1}^n{Y_i^2} + a\sum_{i=1}^n{X_i} + b\sum_{i=1}^n{Y_i} + Nc = 0 \end{cases} i=1nXi3+i=1nXiYi2+ai=1nXi2+bi=1nXiYi+ci=1nXi=0i=1nXi2Yi+i=1nYi3+ai=1nXiYi+bi=1nYi2+ci=1nYi=0i=1nXi2+i=1nYi2+ai=1nXi+bi=1nYi+Nc=0

所以,解方程组,消去 c c c,式 ( 2 ) ∗ N − ( 4 ) ∗ ∑ i = 1 n X i (2)*N - (4)*\sum_{i=1}^nX_i (2)N(4)i=1nXi
( N ∑ i = 1 n X i 2 − ∑ i = 1 n X i ∑ i = 1 n X i ) a + N ( ∑ i = 1 n X i Y i − ∑ i = 1 n X i ∑ i = 1 n Y i ) b + (N\sum_{i=1}^n{X_i}^2 - \sum_{i=1}^n{X_i}\sum_{i=1}^n{X_i})a + N(\sum_{i=1}^n{X_iY_i} -\sum_{i=1}^nX_i\sum_{i=1}^nY_i)b + (Ni=1nXi2i=1nXii=1nXi)a+N(i=1nXiYii=1nXii=1nYi)b+
N ∑ i = 1 n X 3 + N ∑ i = 1 n X i Y i 2 − ∑ i = 1 n ( X i 2 + Y i 2 ) ∑ i = 1 n X i = 0 (5) N\sum_{i=1}^n{X^3} + N\sum_{i=1}^n{X_iY_i^2} - \sum_{i=1}^n(X_i^2 + Y_i^2)\sum_{i=1}^n{X_i} = 0 \tag{{5}} Ni=1nX3+Ni=1nXiYi2i=1n(Xi2+Yi2)i=1nXi=0(5)

( 3 ) ∗ N − ( 4 ) ∗ ∑ i = 1 n Y i (3)*N - (4)*\sum_{i=1}^nY_i (3)N(4)i=1nYi,得
N ( ∑ i = 1 n X i Y i − ∑ i = 1 n X i ∑ i = 1 n Y i ) a + ( N ∑ i = 1 n Y i 2 − ∑ i = 1 n Y i ∑ i = 1 n Y i ) b + N(\sum_{i=1}^n{X_i}{Y_i} - \sum_{i=1}^n{X_i}\sum_{i=1}^n{Y_i})a + (N\sum_{i=1}^n{Y_i}^2 - \sum_{i=1}^n{Y_i}\sum_{i=1}^n{Y_i})b + N(i=1nXiYii=1nXii=1nYi)a+(Ni=1nYi2i=1nYii=1nYi)b+
N ∑ i = 1 n X i 2 Y i + N ∑ i = 1 Y i 3 − ∑ i = 1 n ( X i 2 + Y i 2 ) ∑ i = 1 n Y i = 0 (6) N\sum_{i=1}^n{X_i^2}{Y_i} + N\sum_{i=1}{Y_i^3} - \sum_{i=1}^n(X_i^2 + Y_i^2)\sum_{i=1}^n{Y_i} = 0 \tag{6} Ni=1nXi2Yi+Ni=1Yi3i=1n(Xi2+Yi2)i=1nYi=0(6)

令:
C = ( N ∑ i = 1 n X i 2 − ∑ i = 1 n X i ∑ i = 1 n X i ) , C = (N\sum_{i=1}^n{X_i}^2 - \sum_{i=1}^n{X_i}\sum_{i=1}^n{X_i}), C=(Ni=1nXi2i=1nXii=1nXi),
D = N ( ∑ i = 1 n X i Y i − ∑ i = 1 n X i ∑ i = 1 n Y i ) , D = N(\sum_{i=1}^n{X_iY_i} -\sum_{i=1}^nX_i\sum_{i=1}^nY_i), D=N(i=1nXiYii=1nXii=1nYi),
E = N ∑ i = 1 n X i 3 + N ∑ i = 1 n X i Y i 2 − ∑ i = 1 n ( X i 2 + Y i 2 ) ∑ i = 1 n X i E = N\sum_{i=1}^n{X_i^3} + N\sum_{i=1}^n{X_iY_i^2} - \sum_{i=1}^n(X_i^2 + Y_i^2)\sum_{i=1}^n{X_i} E=Ni=1nXi3+Ni=1nXiYi2i=1n(Xi2+Yi2)i=1nXi
G = ( N ∑ i = 1 n Y i 2 − ∑ i = 1 n Y i ∑ i = 1 n Y i ) G = (N\sum_{i=1}^n{Y_i}^2 - \sum_{i=1}^n{Y_i}\sum_{i=1}^n{Y_i}) G=(Ni=1nYi2i=1nYii=1nYi)
H = N ∑ i = 1 n X i 2 Y i + N ∑ i = 1 Y i 3 − ∑ i = 1 n ( X i 2 + Y i 2 ) ∑ i = 1 n Y i H = N\sum_{i=1}^n{X_i^2}{Y_i} + N\sum_{i=1}{Y_i^3} - \sum_{i=1}^n(X_i^2 + Y_i^2)\sum_{i=1}^n{Y_i} H=Ni=1nXi2Yi+Ni=1Yi3i=1n(Xi2+Yi2)i=1nYi
则,得方程:
{ C a + D b + E = 0 D a + G b + H = 0 \begin{cases} Ca + Db + E = 0 \\ Da + Gb + H = 0 \end{cases} {Ca+Db+E=0Da+Gb+H=0

解得:
a = H D − E G C G − D 2 a = \frac{HD-EG}{CG-D^2} a=CGD2HDEG
b = H C − E D D 2 − C G b = \frac{HC-ED}{D^2-CG} b=D2CGHCED
c = − ∑ i = 1 n ( X i 2 + Y i 2 ) + a ∑ i = 1 n X i + b ∑ i = 1 n Y i N c = -\frac{\sum_{i=1}^n{(X_i^2+Y_i^2)} + a\sum_{i=1}^n{X_i} + b\sum_{i=1}^n{Y_i}}{N} c=Ni=1n(Xi2+Yi2)+ai=1nXi+bi=1nYi

得到 A 、 B 、 R A、B、R ABR 的估计值,
A = − a 2 , B = − b 2 , R = a 2 + b 2 − 4 c 2 A=-\frac{a}{2}, B=-\frac{b}{2}, R=\frac{\sqrt{a^2 + b^2 - 4c}}{2} A=2a,B=2bR=2a2+b24c

注:该方法常用于求迭代方式拟合圆的初始值;

使用 Kåsa 的好处之一就是,如果点 ( x i , y i ) (x_i, y_i) (xi,yi) 碰巧在圆上,则该方法会找到正确的圆;但当样本点位于小圆弧上时, Kåsa 会偏离很大地估计出一个更小的圆

以下两种,仅作了解,不再给出详细推导过程
Pratt Fit

kasa方法圆拟合作为最常见的圆拟合方法,虽然计算方法简单,效率快,但是拟合结果存在较大偏差(Heavy bias)。通过将 D = ( x − a ) 2 + ( y − b ) 2 D=\sqrt{(x−a)^2+(y−b)^2} D=(xa)2+(yb)2 与半径R的差值 D − R D−R DR 转换为 D 2 − R 2 D^2−R^2 D2R2,将非线性问题转换为线性问题。但是因为 D 2 − R 2 = d ( d + 2 R ) D^2−R^2=d(d+2R) D2R2=d(d+2R)(令 d = D − R d=D−R d=DR),当偏离值 d d d 较大时,Kåsa 方法导致R明显变小。Pratt 通过将较大时,Kåsa 方法的目标除以 ( 2 R ) 2 (2R)^2 (2R)2 的方式,取得更准确的结果。
f = ∑ i = 1 n ( ( x i − a ) 2 + ( y i − b ) 2 − R 2 ) 2 ( 2 R ) 2 f = \frac{\sum_{i=1}^n((x_i-a)^2 + (y_i-b)^2 -R^2)^2}{(2R)^2} f=(2R)2i=1n((xia)2+(yib)2R2)2

类似于Kåsa method,pratt 方法将圆方程描述为 A ( x 2 + y 2 ) + B x + C y + D = 0 A(x^2+y^2)+Bx+Cy+D=0 A(x2+y2)+Bx+Cy+D=0。这样圆心 ( a , b ) = ( − B 2 A , − C 2 A (a,b)=(−\frac{B}{2A},−\frac{C}{2A} (a,b)=(2AB,2AC,半径 R = B 2 + X 2 − 4 A D 2 A R=\frac{\sqrt{B^2 + X^2 -4AD}}{2A} R=2AB2+X24AD 。注意,A有可能为0,此时圆拟合方法得到的是一条直线,或者说一个曲率为0的圆。但是在这里,因为A,B,C,D的值乘以一个标量也不会改变圆的方程,可以让A=1,所以目标方程可以改写为:
f = ( ∑ A ( x 2 + Y 2 ) + B x + C y + D B 2 + C 2 − 4 A D ) 2 f = (\frac{\sum{A(x^2+Y^2)+Bx+Cy+D}}{B^2+C^2-4AD})^2 f=(B2+C24ADA(x2+Y2)+Bx+Cy+D)2

Pratt 将这个方程转化为求: g = ( ∑ A ( x i 2 + y i 2 ) + B x i + C y i + D ) 2 g = (\sum{A(x_i^2+y_i^2)+Bx_i+Cy_i+D})^2 g=(A(xi2+yi2)+Bxi+Cyi+D)2 的最小值,并在约束条件: B 2 + C 2 − 4 A D = 1 B^2+C^2-4AD=1 B2+C24AD=1 的条件下。
惯例上将上式写成矩阵的形式:
g = A T M A ( A ⃗ = [ A , B , C , D ] ; M = [ ∑ z 2 ∑ x z ∑ y z ∑ z ∑ x z ∑ x 2 ∑ x y ∑ x ∑ y z ∑ x y ∑ y 2 ∑ y ∑ z ∑ x ∑ y n ] ; z i = x i 2 + y i 2 ) g = A^TMA(\vec{A}=[A,B,C,D];M = \left[ \begin{matrix} \sum{z^2} & \sum{xz} & \sum{yz} & \sum{z} \\ \sum{xz} & \sum{x^2} & \sum{xy} & \sum{x} \\ \sum{yz} & \sum{xy} & \sum{y^2} & \sum{y} \\ \sum{z} & \sum{x} & \sum{y} & n \end{matrix} \right];z_i = x_i^2 + y_i^2 ) g=ATMA(A =[A,B,C,D];M=z2xzyzzxzx2xyxyzxyy2yzxyn;zi=xi2+yi2)
A T B A = [ A B C D ] [ 0 0 0 − 2 0 1 0 0 0 0 1 0 − 2 0 0 0 ] [ A B C D ] = 1 A^TBA = \left[ \begin{matrix} A & B & C & D \end{matrix} \right] \left[ \begin{matrix} 0 & 0 & 0 & -2 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ -2 & 0 & 0 & 0 \end{matrix} \right] \left[ \begin{matrix} A \\ B \\ C \\ D \end{matrix} \right] = 1 ATBA=[ABCD]0002010000102000ABCD=1

通过引入拉格朗日乘子解决最小值问题:
g ( A , η ) = A T M A – η ( A T B A − 1 ) g(A,\eta)=ATMA–\eta(ATBA−1) g(A,η)=ATMAη(ATBA1)

A ⃗ \vec{A} A 求偏导: M A – η B A = 0 MA–\eta BA=0 MAηBA=0。因为 B B B 可逆,可以变换为 B − 1 M A = η A B^{−1}MA=\eta A B1MA=ηA。可知 η \eta η为矩阵 B − 1 M B^{-1}M B1M 的特征值,A为其特征向量。

M A – η B A = 0 MA–\eta BA=0 MAηBA=0可得 A T M A – η A T B A = A T M A − η = 0 ATMA–\eta ATBA=ATMA−\eta=0 ATMAηATBA=ATMAη=0,即 A T M A ATMA ATMA的极值为 η \eta η,那么矩阵 B − 1 M B^{−1}M B1M有四个特征值,最小的特征值就是 A T M A ATMA ATMA的最小值?不然。如果 η < 0 \eta < 0 η<0 ,那么拟合出的圆将没有意义,因为 A T M A ≥ 0 ATMA \ge 0 ATMA0。(Nikolai Chernov 教授经过复杂的证明, B − 1 M B^{−1}M B1M 存在一个负特征值。)因此, A A A的值应该是对应矩阵 B − 1 M B^{−1}M B1M 最小非负特征值的特征向量。

算法分析

pratt 方法有两个明显优势,一个是消除了半径的影响,使得曲率半径非常大、噪音大的情况下算法也能正确运行。

一个是在方程式上融合了直线方程,当系数A=0时,求得的曲线是直线,在实际应用中,不清楚待拟合曲线为直线还是曲线的情况下非常有效。

还有一点就是 pratt 方法的效率也比较高,因此是一种非常实用的方法。

Taubin Fit
注:暂时只作简单了解

Taubin Fit 的最小拟合函数为:
F T = [ ∑ ( x i − a ) 2 + ( y i − b ) 2 − R 2 ] 2 4 n − 1 ∑ [ ( x i − a ) 2 + ( y i − b ) 2 ] F_T = \frac{[\sum{(x_i-a)^2 + (y_i-b)^2}-R^2]^2}{4n^{-1}\sum{[(x_i-a)^2 + (y_i-b)^2]}} FT=4n1[(xia)2+(yib)2][(xia)2+(yib)2R2]2
转化为下列形式:
F T = [ A z i 2 + B x i + C y i + D ] 2 n − 1 ∑ 4 A 2 z i + 4 A B x i + 4 A C y i + B 2 + C 2 F_T = \frac{[Az_i^2 + Bx_i + Cy_i + D]^2}{n^{-1}\sum{4A^2z_i + 4ABx_i + 4ACy_i + B^2 + C^2}} FT=n14A2zi+4ABxi+4ACyi+B2+C2[Azi2+Bxi+Cyi+D]2
将上述公式,求最小值,等效为:
4 A 2 z ‾ + 4 A B x ‾ + 4 A C y ‾ + B 2 + C 2 = 1 4A^2 \overline{z} + 4AB \overline{x} + 4AC \overline{y} + B^2 + C^2 = 1 4A2z+4ABx+4ACy+B2+C2=1
其中, x ‾ = 1 n ∑ x i \overline{x} = \frac{1}{n}\sum{x_i} x=n1xi

迭代重加权最小二乘法(IRLS, iteratively reweighted least-squares)

加权最小二乘法是对原模型进行加权,使之成为一个新的不存在异方差性的模型,然后采用普通最小二乘法估计其参数的一种数学优化技术。加权迭代最小二乘 IRLS属于 稳健回归方法,常用于样本较少的回归,IRLS 属于 M-Estimators

迭代加权最小二乘法在图形拟合中的应用

最小二乘法拟合图形,对于离群值是不足够可靠的,由于采用的是平方距离,所以,与图形距离远的那些点,在最优化过程中会拥有非常大的权重值。为了减轻这些影响,我们可以为每个点引入权重 w i w_i wi。对于远离线的那些点,其权重应该 ≪ 1 \ll 1 1

权重值 w i w_i wi 该如何定义?因为我们想要给出距离远的那些点较小的权重,所以权重必须是基于点到图形的距离。不幸的是,在我们还没有拟合出图形的方程时,我们并不能得到这些距离,所以这看起来是个不可能的要求。解决的方法是用多次的迭代来拟合直线。在第一次迭代中使用 w i = 1 w_i = 1 wi=1,即执行一个标准的直线拟合计算出距离 δ i \delta_i δi。通过用一个权重函数 w ( δ ) w(\delta) w(δ) 可用已经计算出的距离来定义权重,这些权重用于后续的迭代处理中,这个方法称为迭代重加权最小二乘法(IRLS)

在实践中,可以使用以下两个权重函数中的任何一个,这两个权重函数的应用效果都很好。第一个权重函数是由 Huber 提出的,其定义为:
w ( δ ) = { 1 , ∣ δ ∣ ≤ τ τ ∣ δ ∣ ∣ δ ∣ > τ w(\delta) = \begin{cases} 1, \quad |\delta| \le \tau \\ \frac{\tau}{|\delta|} \quad |\delta| > \tau \end{cases} w(δ)={1,δτδτδ>τ

上式中,参数 τ \tau τ削波因数,它定义哪些点应该被视为离群值。请记住所有距离 ≤ τ \le \tau τ 的点对应的权重都是 1 1 1。这意味着,对于小的距离的点,在极小化处理中就直接使用平方距离。另一方面,对于距离 > τ > \tau >τ 的点,将获得一个更小些的权重。事实上,在最优化计算中,此权重函数为那些距离远的点选定了其距离值而不是平方距离值参加运算。有时,选定的权重值不足够的小,所以不能完抑制离群值。这种情况下,可以使用 Tukey 权重函数,其定义为:
w ( δ ) = { ( 1 − ( δ τ ) 2 ) 2 , ∣ δ ∣ ≤ τ 0 , ∣ δ ∣ > τ w(\delta) = \begin{cases} {(1 - (\frac{\delta}{\tau})^2)}^2, |\delta| \le \tau \\ 0, \qquad \qquad |\delta| > \tau \end{cases} w(δ)={(1(τδ)2)2,δτ0,δ>τ

上式中的 τ \tau τ 也是削波因数。注意此权重函数完全忽略那些距离 > τ > \tau >τ 的点。而对于 ≤ τ \le \tau τ 的点,其权重值在 1 1 1 0 0 0 之间平滑变化。

削波因数的计算

在上面的两个权重函数中,削波因数指明哪些点应该被视为离群值。因为削波因数代表的是一个距离,所以它可以被手动设置。但是,这将忽视噪声的分布和数据中的离群值,所以不得不针对每个 应用来进行调整。从数据自身来推出削波因数会更方便。这通常可以基于到图形的这些距离值的标准偏差来实现。因为我们想得到的是数据中离群值,所以我们不能使用正规的标准偏差,而n必须使用对于离群值是可靠的标准偏差。一般情况下,下式用来计算这个可靠的标准偏差:
σ δ = m e d i a n ∣ δ i ∣ 0.6745 \sigma_{\delta} = \frac{median|\delta_i|}{0.6745} σδ=0.6745medianδi

对于正态分布的距离值,分母上的常数量被选定为适用于基于正态分布计算的标准偏差。削波因子则被设置为 σ δ \sigma_{\delta} σδ 的一个小倍数,如 τ = 2 σ δ \tau = 2\sigma{\delta} τ=2σδ

Huber 函数

在统计学习角度,Huber损失函数是一种使用鲁棒性回归的损失函数,它相比均方误差来说,它对异常值不敏感。常常被用于分类问题上。

Huber 函数的定义:

只给出了定义,没有给出原因,且论文中的文献为相关理论的图书,若有需要,可详细阅读

ρ H = { 1 2 e 2 , ∣ e ∣ ≤ k , k ∣ e ∣ − 1 2 k 2 , ∣ k ∣ > e \rho_H = \begin{cases} \frac{1}{2} e^2, \quad \qquad |e| \le k, \\ k|e| - \frac{1}{2} k^2, |k| > e \end{cases} ρH={21e2,ek,ke21k2,k>e

Huber 损失函数常常用于鲁棒性系统分析,M元估计和适应性建模。

下面给出最小二乘法(LS)、Huber 和 Tukey Bisquare 的函数及其权重函数对应表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AMhJ2wbD-1584789138217)(图3.png)]

上图中,所示的函数图像、导函数图像及权重函数图像,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HYfMpaQY-1584789138218)(图4.png)]

如上图所示,从左到,分别为对应的函数图像、导函数图像及权重函数图像。

M 估计

M 估计是基于最小二乘估计发展起来的一种抗差估计(Robust Estimation)方法。

M 估计的发展

理论研究和实践经验表明高斯一马尔可夫模型的最小二乘估计,存在不足不稳健,也就是粗差发生时,参数的最小二乘估计不可靠,与其真值偏离太远。误差分布不是正态分布时,最小二乘估计不是最优估计。针对问题,最小二乘法的创立者之一,法国科学家勒让得指出,在使用最小二乘法时,要注意那些大的偏离值粗差可见,粗差问题不是现代才注意到,但其系统研究却是始于世纪年代,并被定义为估计,年发表的论文“位置参数的稳健估计”是其标志。在年,他将此方法用于一般的多元线性模型,自那以后,这个领域不仅受到统计学家的重视,更受到应用工作者的重视和欢迎,在测绘科学也不例外,几十年来,理论和应用上产生了一批重要成果并且对问题当误差不是正态分布时,在估计中可以找到优于最小二乘法的估计。

尽管估计的初衷是为了解决最小二乘法的不稳健问题,但从它的发展来看永远超越了它最初的目的,实际上它是包括了稳健估计、最小二乘估计在内的一个广义的估计类。

M 估计的极值法定义

对独立同分布等精度模型:
L = A X − Δ L = AX - {\Delta} L=AXΔ
D ( Δ ) = δ 2 I D({\Delta}) = \delta^2I D(Δ)=δ2I

选定一个定义于一维欧氏空间 R R R 的实函数 ρ \rho ρ,令
∑ i = 1 n ρ ( a i T X − L ) \sum_{i=1}^n \rho(a_i^TX -L) i=1nρ(aiTXL)

式中 a i T a_i^T aiT 是设计矩阵的行向量: X X X 又是极值解这种估计就称为M估计,是 Huber 于1964年在发表的论文“位置参数的稳健估计”中引进的位置参数模型就是上式中只有一个未知参数、设计矩阵,A=(1,1…1)的情况。1973年,Huber 进一步将这种估计拓展到独立同分布等精度的线性函数模型。应用中,我们常常面临独立同分布不等精度模型,由此拓展上式为:
∑ i = 1 n ρ ( P i 1 2 ( a i T X − L ) ) = m i n ∑ i = 1 n ρ ( P i 1 2 ( a i T X − L ) ) \sum_{i=1}^n\rho(P_i^{\frac{1}{2}} (a_i^TX - L)) = min\sum_{i=1}^n\rho(P_i^{\frac{1}{2}}(a_i^TX - L)) i=1nρ(Pi21(aiTXL))=mini=1nρ(Pi21(aiTXL))

式中 P P P 是相应观测量或观测误差的权。

Huber引入估计的动机是追求参数估计的稳健性,这是最小二乘估计所缺乏的。但要注意到,稳健性只是参数估计的一个性质,这个性质与最优性不同,我们不能说愈稳健就愈好。对基于正态分布的参数估计,过于强调稳健性会导致效率损失

几何拟合(geometric fitting)

几何拟合(也称为最佳拟合),其误差距离定义为从给定点到要拟合的几何特征的正交距离或最短距离。几何拟合可能是上述所有代数拟合问题的唯一解决方案。各种误差量度的拟合优度测试已将几何误差量度用作基准。

圆的几何拟合是一个非线性问题,必须用迭代法来进行求解。

雅克比矩阵

在向量微积分中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近。因此,雅可比矩阵类似于多元函数的导数。

雅克比矩阵的定义

假设 F : R n → R m F: \mathbb{R_n}\rightarrow \mathbb{R_m} F:RnRm ,是一个从 n n n 维欧氏空间映射到到 m m m 维欧氏空间的函数。这个函数由 m m m 个实数组成:
{ y 1 = f ( x 1 , x 2 , ⋯   , x n ) , y 2 = f ( x 1 , x 2 , ⋯   , x n ) , ⋯ y m = f ( x 1 , x 2 , ⋯   , x n ) \begin{cases} y_1 = f(x_1, x_2, \cdots, x_n), \\ y_2 = f(x_1, x_2, \cdots, x_n), \\ \cdots \\ y_m = f(x_1, x_2, \cdots, x_n) \end{cases} y1=f(x1,x2,,xn),y2=f(x1,x2,,xn),ym=f(x1,x2,,xn)
这些函数的偏导数(如果存在)可以组成一个 m m m n n n 列的矩阵,这个矩阵就是所谓的雅可比矩阵:

J = [ ∂ f ∂ x 1 ∂ f ∂ x 2 ⋯ ∂ f ∂ x n ] = [ ∂ y 1 ∂ x 1 ⋯ ∂ y 1 ∂ x n ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ⋯ ∂ y m ∂ x n ] J = \left [ \begin{matrix} \frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} & \cdots & \frac{\partial f}{\partial x_n} \end{matrix} \right] = \left[ \begin{matrix} \frac{\partial y_1}{\partial x_1} & \cdots & \frac{\partial y_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial y_m}{\partial x_1} & \cdots & \frac{\partial y_m}{\partial x_n} \end{matrix} \right] J=[x1fx2fxnf]=x1y1x1ymxny1xnym

向量微积分

把向量中的对应位置的元素进行求导,但是,这些元素的组织方式有两种,分别是分子布局和分母布局,二者并无本质上的差别,只是结果相差个转置。

例如求 ∂ y ∂ x \frac{\partial y}{\partial x} xy,其中 y y y n n n 维列向量, x x x 是标量。这个求导就是把 y y y里每个元素分别对 y y y 求导,但求导后是得到列向量还是行向量呢?

对于分子布局:

∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y n ∂ x ] \frac{\partial y}{\partial x} = \left[ \begin{matrix} \frac{\partial y_1}{\partial x} \\ \\ \frac{\partial y_2}{\partial x} \\ \vdots \\ \frac{\partial y_n}{\partial x} \end{matrix} \right] xy=xy1xy2xyn

对于分子布局:

∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y n ∂ x ] \frac{\partial y}{\partial x} = \left[ \begin{matrix} \frac{\partial y_1}{\partial x} & \frac{\partial y_2}{\partial x} & \cdots & \frac{\partial y_n}{\partial x} \end{matrix} \right] xy=[xy1xy2xyn]

其中输入向量 x ⃗ = ( x 1 , ⋯   , x n ) \vec{x} = (x_1, \cdots , x_n) x =(x1,,xn),输出向量 y ⃗ = ( y 1 , ⋯   , y m ) \vec{y} = (y_1, \cdots, y_m) y =(y1,,ym),$x \in \mathbb{R_n} , , y = f(x) \in \mathbb{R_m}$。

如果 p p p 是中的一个点, F F F p p p 点可微分,根据数学分析,雅可比矩阵是在这点的导数。在此情况下,这个线性映射,即 F F F 在点 p p p 附近的最优线性逼近,也就是说当 x x x 足够靠近点 p p p 时,我们有:
F ( x ) ≈ F ( p ) + J F ( p ) ⋅ ( x − p ) F(x) \approx F(p) + J_F(p) \cdot (x - p) F(x)F(p)+JF(p)(xp)

高斯 - 牛顿迭代法
高斯- 牛顿迭代法的定义

高斯一牛顿迭代法(Gauss-Newton iteration method)是非线性回归模型中求回归参数进行最小二乘的一种迭代方法,该法使用泰勒级数展开式去近似地代替非线性回归模型,然后通过多次迭代,多次修正回归系数,使回归系数不断逼近非线性回归模型的最佳回归系数,最后使原模型的残差平方和达到最小。其直观思想是先选取一个参数向量的参数值 β \beta β,若函数 f t ( X t , β ) f_t(X_t,\beta) ft(Xt,β) β 0 \beta_0 β0 附近有连续二阶偏导数,则在 β 0 \beta_0 β0 的邻域内可近似地将 f t ( X t , β ) f_t(X_t, \beta) ft(Xt,β)看作是线性,因而可近似地用线性最小二乘法求解。

高斯-牛顿迭代的求解步骤

高斯-牛顿法的一般步骤,如下所示:

  1. 初始值的选择

    初始值的选择有三种方法:

    • 根据以往的经验选定初始值;
    • 用分段法求出初始值;
    • 对于可线性化的非线性回归模型,通过线性变换,然后实行最小平方法求出初始值。
  2. 泰勒级数展开式

    设非线性回归模型为
    y ^ = f ( x i , r ) + ε i , ( i = 1 , 2 , ⋯ n ) (1) \hat y = f(x_i, r) + \varepsilon_i,\quad (i = 1, 2, \cdots n) \tag{1} y^=f(xi,r)+εi,(i=1,2,n)(1)
    其中, r r r 为待估计回归系数,误差项 ε i ∼ N ( 0 , σ 2 ) \varepsilon_i \thicksim N(0, \sigma^2) εiN(0,σ2)

    g 0 ( g 0 ( 0 ) , g 1 ( 0 ) , g 2 ( 0 ) , ⋯   , g p − 1 ( 0 ) ) T g^0(g_0^{(0)}, g_1^{(0)}, g_2^{(0)}, \cdots, g_{p-1}^{(0)})^T g0(g0(0),g1(0),g2(0),,gp1(0))T 为待估回归系数 r = ( r 0 , r 1 , r 2 , ⋯   , r p − 1 ) T r = (r_0, r_1, r_2, \cdots, r_{p-1})^T r=(r0,r1,r2,,rp1)T 的初始值,将式 ( 1 ) f ( x i , r ) (1) f(x_i,r) (1)f(xi,r) g g g 点附近的泰勒展开,并略去非线性回归模型的二阶及二阶以上的偏导数项,得:
    f ( x i , r ) = f ( x i , g ( 0 ) ) + ∑ k = 0 ( p − 1 ) [ ∂ f ( x i , r ) ∂ r k ] r = g ( 0 ) ( r k − g k ( 0 ) ) (2) f(x_i, r) = f(x_i, g^{(0)}) + \sum_{k=0}^{(p-1)}[\frac{\partial f(x_i, r)}{\partial r_k}]_{r=g^{(0)}}(r_k - g_k^{(0)}) \tag{2} f(xi,r)=f(xi,g(0))+k=0(p1)[rkf(xi,r)]r=g(0)(rkgk(0))(2)
    将式 ( 2 ) (2) (2) 代人式 ( 1 ) (1) (1),则
    y i ≈ f ( x i , g ( 0 ) ) + ∑ k = 0 ( p − 1 ) [ ∂ f ( x i , r ) ∂ r k ] r = g ( 0 ) ( r k − g k ( 0 ) ) + ε i y_i \thickapprox f(x_i, g^{(0)}) + \sum_{k=0}^{(p-1)}[\frac{\partial f(x_i, r)}{\partial r_k}]_{r=g^{(0)}}(r_k - g_k^{(0)}) + \varepsilon_i yif(xi,g(0))+k=0(p1)[rkf(xi,r)]r=g(0)(rkgk(0))+εi

    移项,有
    y i − f ( x i , g ( 0 ) ) ≈ ∑ k = 0 ( p − 1 ) [ ∂ f ( x i , r ) ∂ r k ] r = g ( 0 ) ( r k − g k ( 0 ) ) + ε i y_i - f(x_i, g^{(0)}) \thickapprox \sum_{k=0}^{(p-1)}[\frac{\partial f(x_i, r)}{\partial r_k}]_{r=g^{(0)}}(r_k - g_k^{(0)}) + \varepsilon_i yif(xi,g(0))k=0(p1)[rkf(xi,r)]r=g(0)(rkgk(0))+εi
    令, y i 0 = y i − f ( x i , g ( 0 ) ) , D i k ( 0 ) = [ ∂ f ( x i , r ) ∂ r k ] r = g ( 0 ) , b k ( 0 ) = r k − g k ( 0 ) y_i^0 = y_i - f(x_i, g^{(0)}), D_{ik}^{(0)} = [\frac{\partial f(x_i, r)}{\partial r_k}]_{r=g^{(0)}},b_k^{(0)} = r_k - g_k^{(0)} yi0=yif(xi,g(0)),Dik(0)=[rkf(xi,r)]r=g(0)bk(0)=rkgk(0) 则,
    y i 0 ≈ ∑ k = 0 ( p − 1 ) D ( i k ) ( 0 ) b k ( 0 ) + ε i ( i = 1 , 2 , ⋯   , n ) y_i^0 \thickapprox \sum_{k = 0}^{(p-1)} D_{(ik)}^{(0)}b_k^{(0)} + \varepsilon_i \quad (i = 1, 2, \cdots, n) yi0k=0(p1)D(ik)(0)bk(0)+εi(i=1,2,,n)

    用矩阵形式表示,则上式为:
    Y ( 0 ) ≈ D ( 0 ) b ( 0 ) + ε , (3) Y^{(0)} \thickapprox D^{(0)}b^{(0)} + \varepsilon, \tag{3} Y(0)D(0)b(0)+ε,(3)
    其中,
    Y n × p ( 0 ) = [ y 1 − f ( x 1 , g ( 0 ) ) ⋯ y n − f ( x n , g ( 0 ) ) ] , D n × p 0 = [ D 10 ( 0 ) ⋯ D 1 ( p − 1 ) ( 0 ) ⋮ ⋮ D ( n 0 ) ( 0 ) ⋯ D n ( p − 1 ) ( 0 ) ] , D p × 1 0 = [ b 0 ( 0 ) ⋮ b p − 1 ( 0 ) ] Y_{n \times p}^{(0)} = \left[ \begin{matrix} y_1 - f(x_1, g^{(0)}) \\ \cdots \\ y_n - f(x_n, g^{(0)}) \end{matrix} \right], D_{n \times p}^0 = \left[ \begin{matrix} D_{10}^{(0)} & \cdots & D_{1(p-1)}^{(0)} \\ \vdots & & \vdots \\ D_{(n0)}^{(0)} & \cdots & D_{n(p-1)}^{(0)} \end{matrix} \right], D_{p \times 1}^0 = \left[ \begin{matrix} b_0^{(0)} \\ \vdots \\ b_{p-1}^{(0)} \end{matrix} \right] Yn×p(0)=y1f(x1,g(0))ynf(xn,g(0)),Dn×p0=D10(0)D(n0)(0)D1(p1)(0)Dn(p1)(0),Dp×10=b0(0)bp1(0)

  3. 估计修正因子

    用最小二乘法对式 ( 3 ) (3) (3) 估计修正则
    b ( 0 ) = ( D ( 0 ) T D ( 0 ) ) − 1 D ( 0 ) T Y ( 0 ) , (4) b^{(0)} = (D^{(0)T}D^{(0)})^{-1}D^{(0)T}Y^{(0)}, \tag{4} b(0)=(D(0)TD(0))1D(0)TY(0),(4)
    g ( 0 ) g^{(0)} g(0)为第一个迭代值,则 g ( 1 ) = g ( 0 ) + b ( 0 ) g^{(1)} = g^{(0)} + b^{(0)} g(1)=g(0)+b(0)

  4. 精度的检验
    设残差平方和为:
    S S R ( s ) = ∑ i = 0 n [ y i − f ( x i , g ( s ) ) ] 2 SSR^{(s)} = \sum_{i=0}^n[y_i - f(x_i, g^{(s)})]^2 SSR(s)=i=0n[yif(xi,g(s))]2
    其中, s s s 内重夏迭代次数。对于给定的允许误差率 K K K,当 ∣ S S R ( s ) − S S R ( s − 1 ) S S R ( s ) ∣ ≤ K |\frac{SSR^{(s)} - SSR^{(s-1)}}{SSR^{(s)}}| \le K SSR(s)SSR(s)SSR(s1)K 时,终止迭代,否则,对式 ( 4 ) (4) (4)做下一次迭代。

  5. 重复迭代
    重复式 ( 4 ) (4) (4),当重复迭代 s s s 次时,则有修正因子 b ( s ) = ( D ( s ) T D ( s ) ) − 1 D ( s ) T Y ( s ) b^{(s)} = (D^{(s)T}D^{(s)})^{-1}D^{(s)T}Y^{(s)} b(s)=(D(s)TD(s))1D(s)TY(s),第 ( s + 1 ) (s + 1) (s+1) 次迭代值 g ( s + 1 ) = g ( s ) + b ( s ) g^{(s+1)} = g^{(s)} + b^{(s)} g(s+1)=g(s)+b(s)

泰勒公式

泰勒公式,应用于数学、物理领域,是一个用函数在某点的信息描述其附近取值的公式。如果函数足够平滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的邻域中的值。泰勒公式还给出了这个多项式和实际的函数值之间的偏差。

泰勒公式的定义

泰勒公式是将一个在 x = x 0 x=x_0 x=x0 处具有 n n n 阶导数的函数 f ( x ) f(x) f(x) 利用关于 ( x − x 0 ) (x-x_0) (xx0) n n n 次多项式来逼近函数的方法。

若函数 f ( x ) f(x) f(x) 在包含 x 0 x_0 x0 的某个闭区间 [ a , b ] [a,b] [a,b] 上具有 n n n 阶导数,且在开区间 ( a , b ) (a,b) (a,b) 上具有 ( n + 1 ) (n+1) (n+1) 阶导数,则对闭区间 [ a , b ] [a,b] [a,b] 上任意一点x,成立下式:
f ( x ) = x 0 0 ! + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) + ⋯ + f ( n ) ( x 0 ) n ! + R n ( x ) f(x) = \frac{x_0}{0!} + \frac{f'(x_0)}{1!} (x - x_0) + \frac{f''(x_0)}{2!} (x - x_0) + \cdots + \frac{f^{(n)}(x_0)}{n!} + R_n(x) f(x)=0!x0+1!f(x0)(xx0)+2!f(x0)(xx0)++n!f(n)(x0)+Rn(x)

其中, f ( n ) ( x ) f^{(n)}(x) f(n)(x) 表示 f ( x ) f(x) f(x) n n n 阶导数,等号后的多项式称为函数 f ( x ) f(x) f(x) x 0 x_0 x0 处的泰勒展开式,剩余的 R n ( x ) R_n(x) Rn(x) 是泰勒公式的余项,是 ( x − x 0 ) n (x-x_0)^n (xx0)n 的高阶无穷小。

泰勒公式的余项 $R_n(x) $,可以写成以下几种形式:

  1. 佩亚诺(Peano)余项:
    R n ( x ) = o [ ( x − x n ) n ] R_n(x) = o[(x - x_n)^n] Rn(x)=o[(xxn)n]

    这里只需要n阶导数存在。

  2. 施勒米尔希-罗什(Schlomilch-Roche)余项:
    R n ( x ) = f ( n + 1 ) [ x 0 + θ ( x − x 0 ) ] ( 1 − θ ) n + 1 − p ( x − x 0 ) n + 1 n ! p R_n(x) = f^{(n+1)} [x_0 + \theta(x - x_0)] \frac{(1 - \theta)^{n + 1 - p} (x - x_0)^{n+1}}{n!p} Rn(x)=f(n+1)[x0+θ(xx0)]n!p(1θ)n+1p(xx0)n+1

    其中, θ ∈ ( 0 , 1 ) \theta \in (0,1) θ(0,1) p p p 为任意正实数。(注意到 p = n + 1 p=n+1 p=n+1 p

你可能感兴趣的:(参考文档,图像处理)