1

我编写了一个代码,它通过牛顿法 (Jacobian N+1 * N+1) 求解高维非线性方程组的二阶系统 (i=0,N),具有 2 个边界条件。

我想问你,我是否可以在这个 N 维问题中实现二分法。不幸的是,牛顿收敛不适用于我的问题的某些区域。

根据此来源:http ://ursa.as.arizona.edu/~rad/phys305/root_finding/node4.html

" 一种改进的求根方案是将二分法和牛顿-拉夫森方法结合起来。二分法保证了一个根(或奇异性),用于在线性假设较差时限制牛顿-拉夫森法估计的位置变化。然而,Newton-Raphson 步骤是在接近线性的状态下采取的,以加速收敛。

换句话说,如果我们知道在两个边界点之间有一个根,我们首先考虑 Newton-Raphson 步骤。如果这会预测出我们括号范围之外的下一个点,那么我们通过选择范围的中点作为下一个点来执行二等分步骤。然后,我们在下一个点评估该函数,并根据该评估的符号,用新点替换其中一个边界点。这使根保持在括号内,同时让我们受益于 Newton-Raphson 的速度。"

...可以在 Python 中的 N 维问题中做到这一点吗?

n维中FORTRAN的Rtsafe模块可能会这样做,并且Matlab可能有类似的模块......

4

1 回答 1

0

除非这是一种家庭作业,否则最好使用scipy. 对于多维问题,请查看fsolve(使用修改后的 Newton-Raphson 方法)。

于 2013-05-12T16:01:24.463 回答