讨论求知 发表于 2009-2-27 21:05

解非线性方程组

编程序解非线性方程组,用的是牛顿迭代法
需要给出初值,请问初值一般怎么选取
请大家指教啊

咕噜噜 发表于 2009-2-28 10:34

初始值不是根据自己的条件确定的么?不是随便给的吧

logxing 发表于 2009-2-28 12:29

楼主说的是迭代开始时的初值,而不是初始条件吧。
牛顿迭代法对初值要求严格,不如用LM法,收敛范围大些,而且可以控制保证收敛。
迭代处置的话如果能和物理量联系起来就好了。比如去上个时刻点的物理量作为计算现在这个时刻的迭代初值。一般都比较接近。一般性的话,没有直接估算的方法吧。不过可以在开始采用梯度法等收敛范围大但速度不理想的算法,后面再使用牛顿迭代等收敛范围小而速度快的算法。

讨论求知 发表于 2009-3-4 19:32

LM方法是什么方法啊?我不太了解啊,能解多维大型非线性方组吗?
我参考的资料是用牛顿迭代法的啊

无水1324 发表于 2009-3-4 20:16

L-M 方法解非线性不等式组
L-M method for solving simultaneous nonlinear inequalities   
<<合肥工业大学学报(自然科学版)>>2007年 第30卷 第07期
作者: 蒋利华, 马昌凤,

刚搜索到有这个方法,楼主可以下载上面的论文看看

logxing 发表于 2009-3-4 20:18

LM法就是Levenberg-Marquardt法,是高斯牛顿法的变种。和高斯牛顿法都是用来解决非线性最小二乘法问题的。非线性方程组可以化为非线性最小二乘法的一个特例。使用非线性最小二乘法更容易扩展,比如方程数比未知量多,可以求得最优解。

logxing 发表于 2009-3-4 20:27

原帖由 讨论求知 于 2009-3-4 19:32 发表 http://www.chinavib.com/forum/images/common/back.gif
LM方法是什么方法啊?我不太了解啊,能解多维大型非线性方组吗?
我参考的资料是用牛顿迭代法的啊
不知道你要解的是多少维的。
LM法的两个核心,1是计算中要求一次偏导,2是要解一个线性方程组AX=b。这两个地方最费时间。

无水1324 发表于 2009-3-4 22:29

回复 7楼 logxing 的帖子

那么对于一个高维的系统来说这可能不怎么好了。我得方程维数比较低,不知道哪里有这类方法的详细说明,我拿来试试!谢谢!

logxing 发表于 2009-3-4 23:51

原帖由 无水1324 于 2009-3-4 22:29 发表 http://www.chinavib.com/forum/images/common/back.gif
那么对于一个高维的系统来说这可能不怎么好了。我得方程维数比较低,不知道哪里有这类方法的详细说明,我拿来试试!谢谢!
http://exp.math.tsinghua.edu.cn:9100/slides/Exp07.pdf
这是一个,其实维普上也有不少LM法应用的实例。
那个偏导可以用数值微分,AX=b的话我是直接求A的逆,因为我的阶数不大,而且我之前已经建立了矩阵运算类了,所以直接调用类方法求逆了。
如果阶数大的话,解AX=b我只做过对称正定的情况下的共轭梯度法,实际是ICCG,前面加个IC预处理。非对称正定的不能做IC预处理,单纯的共轭梯度法会很慢,我就没做过了。
在matlab下算应该很方便。IC分解,CG法都有现成的函数。

无水1324 发表于 2009-3-5 10:33

回复 9楼 logxing 的帖子

好的 ,感谢你的帮助 !
页: [1]
查看完整版本: 解非线性方程组