有什么区别scipy.optimize公司's'root'和'fixed'point'方法

2024-09-26 22:52:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在中有两种方法scipy.optimize公司它们是root和{}。在

我很惊讶地发现root提供了许多方法,而{}只有一种。从数学上讲,两者是相同的。它们将g(x)的以下不动点与f(x)的根联系起来:

[g(x)=f(x)-x]

如何确定要使用哪个函数?在

另外,这两种方法都不允许我指定定义函数的区域。有没有办法限制x的范围?在


Tags: 方法函数区域定义公司数学rootscipy
1条回答
网友
1楼 · 发布于 2024-09-26 22:52:34

摘要:如果您不知道要使用什么,请使用root。如果您的问题自然地是一个不动点问题g(x) = x,那么方法fixed_point值得考虑,在这里迭代{}将有助于解决问题(即,g具有一些非扩展行为)。否则,请使用root或其他方法。在

虽然每个寻根问题在数学上都等价于一个不动点问题,但从数值方法的角度来重述它并不总是有益的。有时是这样,比如牛顿法。但是,用g(x) = f(x) + x代替f(x) = 0作为g(x) = x的琐碎的重述并没有帮助。在

方法fixed_point迭代提供的函数,可以选择进行调整,使收敛更快/更可能。如果迭代值从固定点(a排斥不动点)移动则这将是一个问题,尽管进行了调整,这种情况仍可能发生。例如:直接求解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

直接回答这个问题:区别在于所使用的方法。不动点解算器非常简单,它是给定函数在某种加速收敛下的迭代。如果这不起作用(通常也不起作用),那就太糟糕了。找根方法更复杂、更健壮,应优先考虑。在

相关问题 更多 >

    热门问题