Fortran Coder

查看: 5091|回复: 7
打印 上一主题 下一主题

[非线性] 拟牛顿BFS方法求解复杂四元非线性超函数方程组问题

[复制链接]

59

帖子

2

主题

0

精华

大师

F 币
810 元
贡献
476 点
楼主
发表于 2016-8-30 14:29:57 | 显示全部楼层
本帖最后由 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)非常小了,也就是满足你的精度要求了,就可以终止跌代

评分

参与人数 1F 币 +9 贡献 +9 收起 理由
fcode + 9 + 9 很给力!

查看全部评分

59

帖子

2

主题

0

精华

大师

F 币
810 元
贡献
476 点
沙发
发表于 2016-8-30 14:37:32 | 显示全部楼层
拟牛顿BFS方法是另一种防止跌代过程中海赛矩阵奇异或者条件数很大的办法,里面有很多矩阵或者矢量相乘的运算,需要细心,搞不好就出错
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-8 06:49

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表