文档介绍:用matlab拟和模型参数和计算参数误差Matlab用以建立数学模型是一个很好的工具。对模型函数的评价,一个很重要的方法就是最小二乘(Leastsquares)由leastmeansquares这个方法得到。假如有点集P(X,Y),每一个点P(i)由X(i),Y(i),i=1~m组成;模型Y_fit=F(A,X),Y_fit(i)=F(A,X(i));其中A=A(1)A(2)…A(n)是模型的n个参数。leastmeansquares=(1/m)*sum((Y(i)-Y_fit(i)).^2)  (i=1~m)。一个好的模型,leastmeansquares就小;而另一方面,如何得到模型参数A,使得leastmeansquares有最小值,就是所谓的,最小二乘拟合(leastsquarescurvefitting)了。简介:模型有线性和非线性之分。对于线性模型,求参数,其实就是求一步矩阵的逆(稍候我们可以看到)。而非线性模型,往往不能一步就得到结果,所以就需要多步逼近。就这样,在众多的多步逼近的方法中,最快收敛于最佳参数值的方法就比较垂青。这中间,最强的当然就是Newton法:A:n+1=A:n+(Hessen(L))^-1  *  grad(L)这里Hessen(L)是被拟合的模型函数的leastmeansquares方法的Hessen矩阵。grad(L)是她的梯度矩阵。参数矩阵A的当前值是A:n和下一步值A:n+1。这个方法包含了一个求hessen矩阵的逆的运算。其实,这个方法难的不是这个逆,而是如何得到Hessen矩阵和梯度矩阵。梯度矩阵还好说,就是leastmeansquares方法的对各个参数的一介偏导数。而Hessen矩阵包含了一介偏导数的组合(主要是相乘),和二介偏导数。当然,许多模型的二介偏导数相对于一介偏导数的组合是一个比较小的量,特别是线性模型,就没有二介偏导(所以,线性模型可以直接求出参数)。于是,新的方法就利用这个特点,将逼近限制在一介偏导数构成的伪Hessen矩阵上。这就诞生了两个比较著名的方法Gauss-Newton法和Levenberg-Marquardt法。Gauss-Newton法直接用Jacobian行列式代替Hessen矩阵,用leastsquares值代替梯度(注意,不是leastmeansquares,因为当用Jacobian行列式代替Hessen矩阵时,中间有一个自由度的差别)这里的拟合就变成了A:n+1=A:n+(Jacobian(L))^-1  *  L      (对L的定义会在下文中给出)因为越是接近最佳值(或者临界值),Jacobian(L)就越是畸形,所以在实际的计算机运算中,求逆这一步都用所谓的帽子运算符(假如J=Jacobian(L));(Jacobian(L))^-1  --->  ((Trans(J)*J)^-1)*Trans(J)这里Trans()是转置运算。Levenberg-Marquardt法比Gauss-Newton好,可以说,在很多时候,和Newton法是一样的(当参数互相独立的时候,而这个条件是好的数学模型基本的条件,虽然有时候不能100%保证,但是,基本上参数互相之间相关性不大)。与Newton法相比,Levenberg-Marquardt法因为没有纯的二介偏导运算,速度