在 sympy 中我写了一个这样的函数:
from sympy import *
x, y = symbols('x y')
def Func(x,y):
return sin(x) + cos(y)
一切正常,但我找不到办法对此进行羔羊化,例如
Func_lam = lambdify(x, y, Func)
z = Func_lam(1,2)
给出一个错误,它说这已被弃用。 我将非常感谢您的帮助!
lambdaify 的第一个参数应该是一个可迭代对象,第二个参数应该是一个表达式。您传递了 3 个参数,第三个参数不是表达式,它是一个函数,当您告诉它参数是什么时,它将返回一个表达式。将您拥有的与此进行比较:
>>> from sympy import *
>>> def Func(x,y): return sin(x) + cos(y)
>>> x, y = symbols('x y')
>>> f = lambdify((x,y), Func(x,y))
>>> f(1,2)
0.4253241482607541
如何做到这一点
import numpy as np
import sympy as sp
def Func(x,xp,fp):
return np.interp(x,xp,fp)
x, xp, fp = sp.symbols('x xp fp')
f = sp.lambdify((x,xp,fp), Func(x,xp,fp))
xpv = np.array([1.0, 2.0, 3.0])
fpv = np.array([4.0, 5.0, 6.0])
f(1.5,xpv,fpv)
# or, taking it a bit further:
expr = sp.sin(x) + Func(x,xp,fp)
f = sp.lambdify((x,xp,fp), Func(x,xp,fp))
xpv = np.array([1.0, 2.0, 3.0])
fpv = np.array([4.0, 5.0, 6.0])
f(1.5,xpv,fpv)
我尝试过 Sympy 自定义函数,但相对于 sp.sin 等基本函数,它们在表达式和 lamdify 中的行为似乎有所不同