scipy.optimize中有两种方法root
和fixed_point
。
我很惊讶地发现root
提供了许多方法,而fixed_point
只有一种方法。从数学上讲,两者是相同的。它们将g(x)
的以下固定点与f(x)
的根相关联:
[g(x)= f(x)-x]
如何确定要使用哪个功能?
此外,这两种方法都不允许我指定定义函数的区域。有没有办法限制x
的范围?
答案 0 :(得分:3)
摘要:如果您不知道使用什么,请使用root
。如果您的问题是自然定点问题fixed_point
,那么可以合理地考虑迭代g(x) = x
将有助于解决问题(即g
具有某些非扩展行为)。否则,请使用g
或其他方式。
尽管每个寻根问题在数学上都等同于定点问题,但从数值方法的角度重述它并不总是有益的。有时就像牛顿的方法一样。但是,用root
将f(x) = 0
替换为g(x) = x
的琐碎重述可能无济于事。
方法g(x) = f(x) + x
迭代所提供的功能,并可选进行调整,以使收敛更快/更可能。如果迭代值从固定点(排斥固定点)移出 ,这将是有问题的,尽管进行了调整。一个示例:以相同的起点直接将fixed_point
作为exp(x) = 1
的一个定点问题来解决:
exp(x) - 1 + x
要直接回答这个问题:区别在于所使用的方法。定点解算器非常简单,它是给定函数的迭代,它通过收敛的加速而得到增强。如果那行不通(通常行不通),那就太糟糕了。寻根方法更复杂,更健壮,应首选。