首页 > 解决方案 > 给定参数值的 Lambdify/Evaluate

问题描述

假设我有一个符号变量(来自sympy)定义为

z = r/p * (p-c)/(r-c)

更正式地,将其表示为z=z(p; c, r):cr是我想要保持不变的参数,并且z实际上是p. 现在,我想对z=z(p), 的选定值求值cr但我不想在我的sympy环境中定义它们,因为我希望其他表达式仍然将它们视为一般和未知参数。

本质上,我正在寻找类似的东西

my_func = lambdify(p, z(p), parameters={'r': 2, 'c': 1})
my_func(2)
Out: 1
z
Out: r/p * (p-c)/(r-c)

我怎么能进行这样的数值评估?

标签: pythonsympy

解决方案


这可能会做你想要的:

def my_lambdify(x, y, parameters=None):
    if parameters is not None:
        try:
            ys = y.subs(parameters)
        except ValueError:
            ys = y
    else:
        ys = y
    return lambdify(x, ys)

my_func = my_lambdify(p , z, parameters={'r': 2, 'c': 3})

输出:

my_func(2)

1.0

z

r*(-c + p)/(p*(-c + r))

my_func = my_lambdify(p , z, parameters={'r': 'r0', 'c': 'c0'})
my_func(2)

r0*(-c0 + 2)/(-2*c0 + 2*r0)


推荐阅读