如何使用sympy定义条件函数?

2024-04-20 16:22:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够定义一个表达式,它接受定义变量的所有值,并在未定义时将表达式求值为0。 与此类似:

    import numpy as np
    import sympy as sp

    def expr(k1, k2):
        x, y =sp.symbols('x y')
        if x == k1 :
            fn = 0
        else:
            fn = np.divide(1,(x-k1)*(y-k2))
        return fn, x, y

    f,x, y = expr(1,2)
    print(f)
    fx = f.subs({x:1,y:4})
    print(fx)

那么,一旦函数被定义了,如何检查等式或条件呢?在

fn=1/(x-1)(y-2);x=1或y=2如何设置为0?在


Tags: importnumpy定义表达式asnpk2k1
2条回答

如果需要符号函数,请使用Piecewise

expr = Piecewise((0, Eq(x, k1)), (1/(x - k1)/(y - k2), True))

如果以后要对数值计算此表达式,则应使用lambdify将其转换为数值函数

^{pr2}$

我不建议尝试混合使用NumPy和SymPy函数,因为这通常行不通。NumPy函数不知道如何使用SymPy表达式,SymPy函数也不知道如何使用NumPy数组。更好的方法是用SymPy创建符号表达式,根据需要对其进行操作,然后使用lambdify将其转换为NumPy函数。在

您应该在函数内部定义一个函数,然后返回它。像这样:

import numpy as np
import sympy as sp

def expr(k1, k2):
    x, y =sp.symbols('x y')
    def fn(x, y):
        if x==k1:
            return 0
        else:
            return np.divide(1, (x-k1)*(y-k2))
    return fn, x, y


f, x, y = expr(1, 2)
print(f(x, y))
print(f(1, 4))

编辑:

下面是一种使用sp.lambdify的方法,如评论中所述:

^{pr2}$

另一个选择是使用sp.subs

f = lambda a, b: 0 if a==1 or b==2 else float(x_dot.subs({x:a, y:b}))

相关问题 更多 >