|
本帖最后由 kerb 于 2016-8-30 14:33 编辑
其实这个问题不难,只是你加了一个限制条件,“拟牛顿BFS方法”,不知道你对这个方法是否熟悉,如果不熟悉,你很难找到哪里出错
你的问题实际上是求解一个非线性方程组:有4个未知数,4个非线性方程组成方程组,首先你最好在纸上手工写写画画,搞明白再动手写代码F(X)=(f_1(X),f_2(X),f_3(X),f_4(x))^T;
其中X=(x_1,x_2,x_3,x_4)
第一步你要构造一个目标函数:OBJFUNC(X)=\frac{1}{2}\sum_{i=1}^4 f_i^2(X),如果方程组F(X)=0有解,对应OBJFUNC(X)的最小值
第二步你要把F(X)taylor展开:F(X_0+\Delta X)=F(X_0)+\nabla F \Delta X + \cdots,其中\nabla F叫雅克比矩阵,一般用J表示,对你的这个问题是一个4X4的矩阵
第三步,求解OBJFUNC(X)的最小值,这个时候,其实4个方程4个变量,你应该可以解析计算出HESSIAN矩阵的,考虑到现在的孩子们大部分时间用来看手机,脑筋不太够用,不会算也是很有可能的,那么一个讨巧的办法是可以用的,就是利用第二步的那个泰勒展开:同时假设F(X_0+\Delta X),这样就有F(X_0)+\nabla F \Delta X=0或者F+J \Delta X=0,如果\Delta X不大,可以证明海赛矩阵与J^TJ几本差不多,这样问题就可以转化为求解:J^TJ \Delta X\approx-J^T F
第四步你就可以跌代求解了:需要明确的是这里的若干符号的具体含义,实际上J\rightarrow J(X_n),F\rightarrow F(x_n), \Delta X=X_{n+1}-X_n
J^TJ是对称的,但不一定是正定的,很多时候是奇异或接近奇异,跌代过程往往没法进行下去,Marquardt-Levenber搞了一个权宜之计,就是每轮跌代过程中,给J^TJ的对角元素加上一个很小的正数\mu,防止J^TJ奇异或者条件数很大,每轮跌代过程中都需要修改\mu,以防止\mu的阻碍作用(这种方法实际上还有一个名字:阻尼牛顿法或阻尼最小二乘法),如何修改\mu也很有学问,一个简单偷懒的办法可以这样:根据每轮OBJFUNC(X)的大小来调整\mu,具体就是本轮迭代中如果OBJFUNC(X)比上一轮的大,\mu=\mu*4.0,反之\mu=\mu/2.0跌代最初的时候令\mu=1.E-3。
如果OBJFUNC(X)非常小了,也就是满足你的精度要求了,就可以终止跌代
|
评分
-
查看全部评分
|