如果我们想要求解一系列对应点的对应关系,但此关系并不是一个简单的线性关系而是一个复杂的非线性关系。那么为了判断求解出的非线性关系的拟合效果,就要引入非线性优化目标函数。而我们想要求解的图像坐标(UiVi)与像素坐标(uivi的对应关系就是一个复杂的非线性关系。

 取函数:

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数

;其中

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_02

=

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_03

。非线性优化的过程即使F(x)极小化的过程,即寻取

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_04

,此即最小二乘法的思想的核心。这里要注意的是:

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_05

的函数关系是我们已知的(因为这个目标函数是人为设定的,目的是为了衡量最终非线性函数的拟合效果)也就是说最小二乘法思想就是借助

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_06

,求解出最优x,求出的x即为我们想要的最佳关系,或者在求解过程中我们可以获得这个关系。

然后就是如何令F(x)最小,这里可以借助矩阵去计算(这样做能很好分析,并运用到算法里)。

假设

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_07

=python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_08-python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_09 ,这里的python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_10是n维的列向量,python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_11是实数,则有

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_12


python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_13

;这里的A是m行n列的矩阵,b是m维列矩阵。则有

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_14


python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_15

为x的线性函数,则

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_16

称为线性最小二乘问题。(因为非线性最小二乘的计算会用到线性的结论,所以先介绍线性)求F(x)的平稳点,由于F(x)是凸函数,所以令

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_17

得:

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_18

(式①)所以:

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_19

(式②)这样就可求出极小点x。(注:此处要求矩阵A列满秩,则

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_20

为n阶正定矩阵,这样

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_21

才存在)

 对于非线性最小二乘法问题,不可以直接使用式②,解这类问题的思想是通过解一系列线性最小二乘问题来求非线性最小二乘问题的解。

我们设

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_22

是解的第k次近似,利用

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_23

将函数

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_24

线性化,此时就可以把非线性问题转化成线性问题。然后可以利用公式②,求出这个问题的极小点

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_25

,然后再从

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_26

出发重复以上过程。下面我们来推导迭代公式,即通过公式去不断求解x。这里我们需要再设一个目标函数,此目标函数与

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_27

相关,是

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_28

在点

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_29

的一阶泰勒展开后得。设

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_30

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_31

 所以

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_32

,利用

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_33

的极小值点作为目标函数

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_34

的极小点估计。 现在求解线性最小二乘问题

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_35

记:

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_36

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_37

其中:

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_38

所以:

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_39

,可得:

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_40

(用式①)变换后:

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_41

(式③)③是一个线性方程组,常数包含在

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_42

处的函数值

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_43

及一阶偏导数。若python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_44满秩,则可以通过③得到

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_45

的极小点。令

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_46

,把

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_47

作为

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_48

的极小点的k+1次近似。

利用③两边×2,可得:

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_49

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_50

所以

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_51

是目标函数

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_52


python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_53

的梯度。设

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_54

,则③式两端×2后可转化为:

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_55

                       即:

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_56

。式③为高斯-牛顿公式,向量

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_57

称为在点

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_58

处的高斯牛顿方向。为了保证每次迭代都能使得目标函数值下降,在求出方向

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_59

后,不直接用

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_60

作为第k+1次近似,而是从

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_61

出发,沿这个方向进行一维搜索得出

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_62

),求出步长

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_63

。再令

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_64

 ,把

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_65

作为第k+1次近似。以此类推,直到求出满意的解为止。 可以看出,这个过程大体上是通过

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_66


python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_67

,求得python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_68

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_69

,进而求出向量

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_70

,然后再通过

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_71

求出步长

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_72

,最终求得第k+1次近似

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_73


归纳上述过程,非线性最小二乘法的计算步骤为:

1、给定初点

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_74

,允许误差0

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_75

,置k=1。2、计算函数值

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_76

,(i=1、2、…、m),得到向量

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_77

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_78

。3、再求一阶偏导数

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_79

 (i=1、2、…、m;j=1、2、…、n),从而得到m×n矩阵;

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_80

 。4、求解方程组 

python 非线性最小二乘多项式拟合 非线性最小二乘法_线性代数_81

,求出高斯-牛顿向量(方向)

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_82

。5、从

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_83

出发,沿dk

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_84

方向做一维搜索,求出步长

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_85

,使得:

python 非线性最小二乘多项式拟合 非线性最小二乘法_算法_86

,令

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘法_87

。6、最后当

python 非线性最小二乘多项式拟合 非线性最小二乘法_python 非线性最小二乘多项式拟合_88

时,停止计算,解得:

python 非线性最小二乘多项式拟合 非线性最小二乘法_最小二乘_89

;否则置k=k+1,返回第2步。