#python #sympy
#python #sympy
Вопрос:
Например, у меня есть это выражение:
x = Symbol('x')
f = sin(x) * x
Я хочу, чтобы работал следующий код:
>>> a = Symbol('a')
>>> f(a)
TypeError: 'Mul' object is not callable
Я могу превратить это выражение в лямбда-функцию, которая будет работать с числами:
>>> f = lambdify(x, f)
>>> f(10)
-5.440211108893697
Но это не работает для символов:
>>> f = lambdify(x, f)
>>> f(a)
TypeError: loop of ufunc does not support argument 0 of type Symbol which has no callable sin method
Я знаю о методе * .subs, но меня интересует эта нотация:
>>> a = Symbol('a')
>>> f(a)
Как это сделать?
Комментарии:
1.
f = lambda x:sin(x)*x
2. это действительно так просто?
3. Да, возможно, это слишком просто … Сравните
type(sin(x)*x)
сtype(lambda x:sin(x)*x)
4. В вашем случае, похоже, вам просто нужна простая лямбда-функция Python, как сказано выше. В других контекстах также может быть полезно использовать
Lambda
функцию sympy, которая предоставляет «символическую» функцию. Это используется, напримерImageSet
.5. Согласно
lambdify
документам, он преобразует вашsin(x)
вnp.sin(x)
. Это тоnp.sin
, что не может справиться сsymbol
. Он отлично работает с числами и числовыми массивами. Как указано в ошибке, для нечислового объектаnumpy
код пытается выполнитьx.sin()
.