- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对为什么以下代码的答案是 10 而不是 1 感到困惑。有人可以帮助我了解 lambdify
发生了什么或者是什么导致了错误答案吗?
import sympy
from sympy.utilities.lambdify import lambdify
from sympy import Function
from sympy.abc import x, y
def kFct(xIndex,loc,k1,k2):
... if xIndex <= loc:
... return k1
... else:
... return k2
...
loc = 0.5
k1 = 1
k2 = 10
kfun = lambdify( (x,y), kFct(x,loc,k1,k2) )
print kfun(0,0)
>>> 10
为什么答案不是 k1
或 1,因为 x = 0
小于 loc = 0.5
?
但是,如果我这样做,它会返回正确的答案
print kfct(0,loc,k1,k2)
>>> 1
我需要将 kfun
作为 x 和 y 的函数,因为稍后,我将它用作积分参数的一部分。它最终也将取决于 y。
我在 Mac 10.6.x 上使用 python 2.6.8。
最佳答案
lambdify
的参数在传递之前进行评估,因此您实际上并没有将函数传递给 lambdify
,您传递的是数字 10:
>>> kFct(x, loc, k1, k2)
10
你在这里得到 10,因为
>>> x <= loc
x <= 0.5
>>> bool(x <= loc)
False
因此采用第二个分支。由于 Python 的工作方式,我不认为你能够让它工作——你不能只抑制一个分支被采用。 (原则上,一个程序可以做一些疯狂的字节码内省(introspection),但我很确定 sympy
不会。)
不过,您可以使用 implemented_function
:
>>> f = implemented_function(Function('kFct'), lambda x,y: kFct(x, loc, k1, k2))
>>> kfun = lambdify((x,y), f(x,y))
>>> kfun(0,0)
1
>>> kfun(0.5,0)
1
>>> kfun(0.51,0)
10
>>> kfun(1, 0.0)
10
不过,考虑到额外的间接性,我不确定这对您有多大好处:我可能只使用函数本身(假设您最终要寻找积分的数值计算。)
关于 python 同情 : lambdify returns the wrong answer when function defined piecewise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14186145/
下面的 python 脚本计算表达式中的第一项, 4.939e-3xAxB+8.7989 在 (A,B) = (1.0,1.0): import sympy from sympy import *
使用 Java 和 Apache Spark(已在 Scala 中重写),面对旧的 API 方法(org.apache.spark.rdd.JdbcRDD 构造函数),其参数为 AbstractFun
假设我有一个符号变量(来自sympy)定义为 z = r/p * (p-c)/(r-c) 更正式地说,将其表示为 z=z(p; c, r):c 和 r 是我想要的参数保持不变,并且 z 实际上是 p
假设我想用单个符号创建一个表达式,用 Latex 编写(因为在 Jupyter Notebook 中可视化它真的很有帮助)。然后我使用 lambdify 获得一个函数,我可以计算多个值。问题是此函数将
假设您已经计算了 fu 作为 sympy 计算的结果: fu= sy.cos(x)+sy.sin(y)+1 在哪里 x,y = sy.symbols("x y") 是符号。现在您想将 fu 转换为(显
我有一个包含多个变量的表达式,假设如下所示: import numpy as np import sympy as sym from sympy import Symbol, Add, re, lam
我有两个用 sympy 的 lamdify 创建的函数 a = sympy.lambdify((x, y), K / (2 * math.pi) * sympy.cos(theta) / r) b =
如何计算 Sympy CoordSys3D 表达式上的点? 使用 Sympy 物理模块,这个过程按预期工作: from sympy import * from sympy.physics.vector
我有这个代码: var = ['a','b','c'] arr = np.array([ [1,2,3,4,5,6,7,8,9], [0.1,0.2,0.3,0.4,0.5,0.6,0
我想在 sympy 中创建一个符号矩阵的函数,然后对其进行 lambdify 以在 numpy 中进行评估。让我们试试这个简单的函数,它返回我输入的值 f(x) = x,但最终我想做一些事情,比如获取
我正在尝试提供一个数组作为输入,并期望一个数组作为以下代码的输出。 from sympy import symbols from sympy.utilities.lambdify import lam
我用 python 编写了一个脚本,它使用 sympy 来计算几个向量/矩阵公式。但是,当我尝试将它们转换为可以使用 sympy.lambdify 评估的函数时,我得到了一个 SyntaxError
我知道 sympy 的 lambdify函数可以创建一个带有参数 variables 和 body expression 的 lambda,如下所示: lambdify(variables, expr
我有以下问题:我想lambdify 一个包含参数积分的sympy 表达式,例如Integral(tanh(a*x),(x,0 ,1))。我尝试手动实现 like here. 本质上,我们想要的是将积分
我无法对包含导数的表达式进行 lambdify。这是解释问题的最少代码: import sympy x = sympy.symbols('x', real=True) a = sympy.Functi
我无法理解以下数值评估。我有一个包含两个变量的函数,r 和 gamma。我现在希望将该函数的根绘制为从 0 到 500 的 gamma 函数。我知道如何使用 lambdify 来评估一维变量数组上的函
获取一个恰好名为dot的未定义函数,并将其作为lambdify的一部分: import numpy import sympy class dot(sympy.Function): pass x
我正在使用 SymPy 1.0 和 Python 2.7。我想计算前 100 个整数的总和: 这段代码运行成功 import sympy as sy from sympy.tensor import
我正在尝试使用 modules 关键字参数让 lambdify 理解期望不止一种类型的输入。根据 lambdify ( http://docs.sympy.org/dev/_modules/sympy
标题说明了一切。有什么方法可以序列化由 sympy.lambdify 生成的函数吗?: import sympy as sym import pickle import dill a, b = sym
我是一名优秀的程序员,十分优秀!