我目前正在尝试创建一个 lambda 函数,它将一个变量传递给作为lambdified 函数的输入的函数和lambdified 函数本身。我的 Python 版本是 2.7,我的 sympy 版本是 1.3。
当传递正确的参数 (Y) 时,我能够让lambdify 函数 (f) 正常工作。然后我尝试创建一个 lambda 函数,它将一个变量 (z) 传递给一个函数 (controlFunc),然后这两个函数都将被输入到我的lambdify 函数 (f) 中。
问题似乎是 lambda 函数每次迭代都将使用最新的 lambdify 函数(它应该)并更新所有 PREVIOUS lambda 函数以使用最新的 lambdify 函数。我相信这不是我的代码中的错误,但我很容易出错。
我尝试将lambdify 函数设置为一个可变变量,然后从中创建一个lambda 函数。我尝试在 lambda 函数中使用整个 lambdify 函数。我什至尝试使用列表理解(我相信这是正确的术语)来评估列表中的每个 lambda。
import sympy as sy
import numpy as np
r,s,t,v,w,x,y = sy.symbols('r,s,t,v,w,x,y')
variables = [[t,v,w,x,y]]
inputs = [[r,s]]
L = [[]]
controlledSim = True
ctrl_input = [[10., 10.]]
def controlFunc(x,controlDict):
return ctrl_input[0]
control = [controlFunc for i in range(10)]
controlDict = []
func = [sy.Matrix([[1.*r*s*t*v*w*x*y],
[2.*r*s*t*v*w*x*y],
[3.*r*s*t*v*w*x*y],
[4.*r*s*t*v*w*x*y],
[5.*r*s*t*v*w*x*y]])]
X = [1.,1.,1.,1.,1.]
Y = [1.,1.,1.,1.,1.,10.,10.]
for j in range(len(L)):
if controlledSim == True:
func[j] = list(func[j])
temp = [[] for i in range(len(func[j]))]
f = [[] for i in range(len(func[j]))]
for i in range(len(func[j])):
f[i] = sy.lambdify([np.append(variables[j],inputs[j])], func[j][i])
temp[i] = lambda z: f[i](np.append(z,control[i](z,controlDict)))
func_lambda = lambda z: np.array([lamb(z) for lamb in temp]).T
我知道 func_lambda(X) 的输出应该是 [100.,200.,300.,400.,500.] 的数组。
我当前的结果是 [500.,500.,500.,500.,500.] 的数组。