1

我一直在尝试转换我的 sympy 函数变量,它看起来像这样:-

(atan(−3/)+2.66602685430536⋅10−6)^2+(atan(−2/)−0.0896686524911619)^2+(atan(−1/)−0.16739555984988)^2

函数表达式

为此,我一直在尝试使用 lambdastr 和 lambdify。通过以下方式:-

s = lambdastr((x,z),function)
lam_func = lambdify([x,z],s,myfuncs)

但不断收到此错误:-

AttributeError:“符号”对象没有属性“atan”

我发现这是因为 lambdastr 通过以下方式为 atan 函数添加了数学模块:-

s = lambdastr((x,z),function)
print(s)

λ x,z: (( math.atan ((z - 3)/x) + 2.66602685430536e-6) 2 + (**math.atan ((z - 2)/x) - 0.0896686524911619) 2 + (** math.atan ((z - 1)/x) - 0.16739555984988)**2)

所以,我像这样单独实现了 atan:-

s = lambdastr((x,z),function)
s = s.replace("math.atan","tan_inv")
def tan_inv_impl(x):
    return math.atan(x)
myfuncs = {"tan_inv":tan_inv_impl}
lam_func = lambdify([x,z],s,myfuncs)

这确实给了我一个 lambda 函数,但它似乎不起作用

lam_func(1,1)

给出一个错误:

在 _lambdifygenerated(x, z)

1 def _lambdifygenerated(x, z):
----> 2 return (Lambda((x, z), (tan_inv((z - 3)/x) + 2.66602685430536e-6)**2 + (tan_inv(( z - 2)/x) - 0.0896686524911619)**2 + (tan_inv((z - 1)/x) - 0.16739555984988)**2))

NameError:名称“Lambda”未定义

有人可以帮我解决这个问题吗?

谢谢

4

1 回答 1

0

怎么用Lambda

>>> from sympy import Lambda
>>> function  # defined as you described
(atan(z - 3/x) + 2.66602685430536e-6)**2 + (atan(z - 2/x) -           
0.0896686524911619)**2 + (atan(z - 1/x) - 0.16739555984988)**2
>>> f = Lambda((x,z), function)
>>> f(1,1).n()
2.01953558567067
于 2020-05-12T02:44:02.910 回答