littlebird2009 发表于 2009-3-25 10:37

最小二乘非线性多元拟合问题--法矩阵病态如何处理

最小二乘非线性多元拟合问题--法矩阵病态如何处理最近要把一个非线性的模型进行线性化处理。
函数形式:
V=x*(0.5+(100 000*x/(100 000+x)*f)*2f*ln ( 0.5* ( 1+exp ((-1/(100000*x/(100 000+x)*f)*2f) ) ) ) / (100 000+x)
其中x范围10 000~20 000;
       y范围100*1e-12~500*1e-12
       f范围100~500
(x,y,f)均匀取了100个离散的点。
拟合形式如下:
V’=a0 + a1*x+a2*x^2+a3*y+a4*x*y+a5*x^2*y+a6*f+a7*xf+a8*x^2*f+a9*y*f

由于在此方面也就是刚刚学习,因此仅限于最基本的最小二乘法的拟合,求出法矩阵A,然后再用A\b获得a0~a9,但是用matlab计算A\b时,出现了waring,也就是说法矩阵A近似病态的问题,因此虽然有解,但是感觉好像不能用。
看到数值计算教材上有讲基于正交函数拟合的方法,但是考虑到这时多元拟合,因此无从下手。

关于对法矩阵A病态的问题有什么好的解决方法,或者能否基于正交函数对该非线性模型进行拟合,还请高手们指导下,同时如果有关于多元拟合这方面的参考书的话,希望高手们给介绍下,不胜感激。      

cleverblue 发表于 2009-3-26 17:29

解线性病态方程组最好用PCG,gmres,svd等算法

littlebird2009 发表于 2009-3-26 21:51

回复 沙发 cleverblue 的帖子

谢谢回复,我试下这几个方法。

logxing 发表于 2009-3-27 10:38

法矩阵+mu*I即可。
mu是一个很小的数,I是单位阵。
这也是LM法对高斯牛顿法的改进所在。

littlebird2009 发表于 2009-3-27 16:35

回复 地板 logxing 的帖子

谢谢您的回复
法矩阵+mu*I    这样处理以后在用matlab进行求逆计算的时候确实再没有出现waring了。

不过我是学自动化的,对“数值计算”这方面学习不是太深入,对于为何要进行这样处理以及“LM法”不是很明白,因此特别想了解(法矩阵+mu*I)的实质含义。因此希望您能够推荐一些关于 这个方法(LM法)的一些详细资料,不胜感谢。

cuierpeng168@163.com

[ 本帖最后由 littlebird2009 于 2009-3-27 17:47 编辑 ]

logxing 发表于 2009-3-28 14:34

原帖由 littlebird2009 于 2009-3-27 16:35 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢您的回复
法矩阵+mu*I    这样处理以后在用matlab进行求逆计算的时候确实再没有出现waring了。

不过我是学自动化的,对“数值计算”这方面学习不是太深入,对于为何要进行这样处理以及“LM法”不是很明白,因 ...
这个叫做正则化,mu叫正则化因子。LM本来是用于解决非线性最小二乘法问题的,mu用于控制搜索方向在牛顿方向和负梯度方向的比重。正则化会降低收敛速度但是可以避免矩阵病态而且不会影响最终收敛结果。

不过你这个其实是线性最小二乘法,此时muI的意义我没想过。我想是微扰的含义,不然只要两组数据相同就无法求逆了。看下面这个21页,可能是处理线性最小二乘法更为标准的方法。
http://shlx.cup.edu.cn/mathweb/Nanalysis/teach_plan/24.ppt
页: [1]
查看完整版本: 最小二乘非线性多元拟合问题--法矩阵病态如何处理