Lambdify / Evaluate для заданных значений параметров - PullRequest
1 голос
/ 18 марта 2019

Допустим, у меня есть символическая переменная (как sympy), определенная как

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

Более формально, обозначьте это как z=z(p; c, r): c и r - это параметры, которые я хочу сохранить постоянными, а z - это действительно функция в p. Теперь я хочу оценить z=z(p) для выбранных значений c, r - но я не хочу определять их в моей среде 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)

Как я мог выполнить такие численные оценки?

1 Ответ

1 голос
/ 20 марта 2019

Это может делать то, что вы хотите:

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...