以下示例仅用于精确定义查询。考虑递归方程x [k + 1] = a * x [k]其中a是一些常数。现在,在sympy / numpy中是否有一种更简单的方法或现有方法可以执行以下操作(即,在给定递归方程的范围内给出表达式):
def get_expr(init, num):
a = Symbol('a')
expr = init
for i in range(num):
expr = a*expr
return expr
x0 = Symbol('x0')
get_expr(x0,3)
上面的地平线是3.
答案 0 :(得分:1)
我打算建议使用SymPy的rsolve
来尝试找到一个封闭的形式解决方案,但似乎至少对于这个特定的解决方案,有一个错误阻止它工作。见http://code.google.com/p/sympy/issues/detail?id=2943。也许如果你真的想知道一个更复杂的表达,你可以试试。对于这个,封闭形式的解决方案只是a**n*x0
。
除此之外,SymPy没有任何直接进行此评估的功能,但确实有一些可以提供帮助的功能。 sympy.utilities.memoization
中有一些memoization装饰器供内部使用,但应该适合外部使用。它们可以通过缓存先前评估的结果来帮助提高评估效率。你需要递归地编写get_expr
才能有效地工作。或者你可以写自己的cacher。这并不复杂。