scipy.optimize.fsolve
似乎不适用于调用自身的函数。这是一个中景
from scipy.optimize import fsolve
def f(x):
if f.n==0:
return x
f.n -= 1
return 1+f(x)
# Consider n=2 i.e. f(x) = 1 + 1 + x = 2 + x
f.n=2
soln = fsolve(f, -1.5) # Expect [-2]
print(soln) # [0.]
比较
def g(x):
return 1 + 1 + x
soln = fsolve(g, -1.5)
print(soln) # [-2.]
使用fsolve和这样的函数有解决方法吗?我的用例是,我有一个由递归公式定义的函数,对于大的n
,手工键入这个函数需要很长时间。你知道吗
问题不是fsolve不能处理递归函数,而是递归函数污染了递归的全局命名空间。添加一个简单的打印语句有助于更清楚地了解正在发生的事情。你知道吗
输出:
解算器基本上必须使用不同的输入运行函数,并猜测下一个“最佳”值以迭代方式运行。对于依赖于全局变量的函数,函数“状态”本身是不稳定的,并且函数第一次运行时,全局变量会受到影响,并且函数不再具有正确的全局变量来为解算器的下一次迭代正确运行。你知道吗
您需要修改递归函数,并使其具有显式参数传递的自包含性。你知道吗
输出:
相关问题 更多 >
编程相关推荐