#expression #sympy
Вопрос:
Я совершенно новичок в симпатии и системах компьютерной алгебры. Я хотел бы создать функцию, которая может принимать расширенное выражение и возвращать выражение, в котором полномочия заменяются на 1. Например, если функция имеет имя unpower
:
>>> unpower(x*y**3 x**2)
x*y x
Возможно ли это сделать? Если да, то с чего я мог бы начать в документации, чтобы узнать, как это сделать? Советы/рекомендации приветствуются!
Ответ №1:
Это более продвинутое упражнение по замене, так как вы хотите сопоставить показатели любой мощности. Все объекты SymPy имеют свойства; самое основное свойство args
-это то, которое сообщает вам, каковы аргументы объекта.
>>> (x**y).args
(x, y)
Иногда разные аргументы имеют имена, такие как base
и exp
для аргументов Pow
, и вы можете запросить объект, чтобы узнать, что это такое:
>>> (x**y).exp
y
>>> (1/x).is_Pow
True
Этот replace
метод-видите help(Basic.replace)
ли-хорош для ваших нужд, потому что он может быть нацелен только на силы
>>> (x*y**3 x**2).replace(lambda _: _.is_Pow, lambda _: _.base)
x*y x
Но вы, возможно, захотите сохранить знак показателя, иначе
>>> (x/y).replace(lambda _: _.is_Pow, lambda _: _.base)
x*y
Так что, может быть
>>> from sympy import sign
>>> unpow = lambda e: e.replace(lambda _: _.is_Pow, lambda _: _.base**sign(_.exp))
>>> unpow(x**3/y**2)
x/y
Комментарии:
1. Спасибо за этот ясный и поучительный ответ, @smichr!