当前位置:  开发笔记 > 编程语言 > 正文

Python中的迭代函数生成

如何解决《Python中的迭代函数生成》经验,为你挑选了0个好方法。

考虑以下想法:我想生成一系列函数f_k,k = 1,...,50并将它们存储在Python字典中.举一个具体的例子,让我们说

f_k(x)  = f_{k-1}(x) * sqrt(x)

这只是一个例子,我遇到的问题更复杂,但这对我的问题无关紧要.因为在我的实际问题f_{k-1}是非常嘈杂并且包含舍入误差,我不想f_k直接构建f_{k-1},而是我首先f_{k-1}通过样条近似近似,然后f_k从该样条逼近来确定.奇怪的是,这会导致错误消息表明超出了最大递归深度.以下是代码示例:

import numpy as np
from scipy.interpolate import interp1d
n = 50 # number of functions I want to create
args = np.linspace(1,4,20) # where to evaluate for spline approximation
fdict = dict() # dictionary that stores all the functions
fdict[0] = lambda x: x**2 # the first function

# generate function f_k as follows: First, take function f_{k-1} and 
# approximate it through a spline. Multiply that spline approximation 
# by sqrt(x) and store this as function f_k. 
for k in range(1,n+1):

    spline_approx = lambda x: interp1d( args,fdict[k-1](args) )(x)
    fdict[k] = lambda x: spline_approx(x) * np.sqrt(x)

 print('test evalutation: ', fdict[n](3))

这导致错误

RecursionError: maximum recursion depth exceeded

我的问题必须是非常具体的Python.它必须与interp1d的插值有关.例如.如果我更换线

spline_approx = lambda x: interp1d( args,fdict[k-1](args) )(x)

通过polyfit

coefs = np.polyfit(args,fdict[k-1](args),10) # polyfit coefficients
spline_approx = lambda x: np.polyval(coefs,x) # approximation of f_{k-1} 

代码运行正常.我怀疑问题出现是因为fdict[k-1]没有直接评估,只是作为参考传递.但是我该如何解决这个问题呢?

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有