Der*_*Weh 4 python mathematical-optimization scipy
scipy.optimize 中有两种方法,分别是root和fixed_point。
我很惊讶地发现它root提供了很多方法,而fixed_point只有一种。在数学上,两者是相同的。它们将 的以下不动点g(x)与 的根相关联f(x):
[ g(x) = f(x) - x ]
如何确定使用哪个函数?
此外,这两种方法都不允许我指定定义函数的区域。有没有办法限制范围x?
小智 7
总结:如果您不知道该使用什么,请使用root. fixed_point如果您的问题自然是一个定点问题g(x) = x,在这种情况下可以合理地预期迭代g 将有助于解决问题(即g具有一些非扩展行为),则该方法值得考虑。否则,使用root或其他东西。
尽管每个求根问题在数学上都等同于不动点问题,但从数值方法的角度重新表述它并不总是有益的。有时是这样,就像在牛顿方法中一样。但是琐碎的重述,替换f(x) = 0as g(x) = xwithg(x) = f(x) + x不太可能有帮助。
该方法fixed_point 迭代提供的函数,可选地进行调整,使收敛更快/更有可能。如果迭代值远离固定点(排斥固定点),这将是有问题的,尽管进行了调整,这可能会发生。一个例子:exp(x) = 1直接求解并作为 的不动点问题exp(x) - 1 + x,具有相同的起点:
import numpy as np
from scipy.optimize import fixed_point, root
root(lambda x: np.exp(x) - 1, 3) # converges to 0 in 14 steps
fixed_point(lambda x: np.exp(x) - 1 + x, 3) # RuntimeError: Failed to converge after 500 iterations, value is 2.9999533400931266
Run Code Online (Sandbox Code Playgroud)
直接回答这个问题:不同之处在于所使用的方法。定点求解器非常简单,它是给定函数的迭代,由某种收敛加速推动。当这不起作用(并且通常不起作用)时,太糟糕了。寻根方法更复杂、更健壮,应该是首选。
| 归档时间: |
|
| 查看次数: |
833 次 |
| 最近记录: |