Вычислить символьный предел в сообщении об ошибке Sympy

Я пытался вычислить символический предел в Sympy, но получил сообщение об ошибке.

import sympy as smp
from sympy import *
n,x=smp.symbols('n x')
limit(simplify(integrate(exp(-x)*exp(-smp.I*n*x),x).args[0][0]),x,smp.oo)

У меня появилось следующее сообщение об ошибке:

---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
Cell In[26], line 1
----> 1 limit(exp(-n*x),x,smp.oo)

File ~\anaconda3\Lib\site-packages\sympy\series\limits.py:64, in limit(e, z, z0, dir)
     13 def limit(e, z, z0, dir = "+"):
     14     """Computes the limit of ``e(z)`` at the point ``z0``.
     15 
     16     Parameters
   (...)
     61      limit_seq : returns the limit of a sequence.
     62     """
---> 64     return Limit(e, z, z0, dir).doit(deep=False)

File ~\anaconda3\Lib\site-packages\sympy\series\limits.py:375, in Limit.doit(self, **hints)
    372 l = None
    374 try:
--> 375     r = gruntz(e, z, z0, dir)
    376     if r is S.NaN or l is S.NaN:
    377         raise PoleError()

File ~\anaconda3\Lib\site-packages\sympy\series\gruntz.py:732, in gruntz(e, z, z0, dir)
    729     else:
    730         raise NotImplementedError("dir must be '+' or '-'")
--> 732 r = limitinf(e0, z)
    734 # This is a bit of a heuristic for nice results... we always rewrite
    735 # tractable functions in terms of familiar intractable ones.
    736 # It might be nicer to rewrite the exactly to what they were initially,
    737 # but that would take some work to implement.
    738 return r.rewrite('intractable', deep=True)

File ~\anaconda3\Lib\site-packages\sympy\core\cache.py:72, in __cacheit.<locals>.func_wrapper.<locals>.wrapper(*args, **kwargs)
     69 @wraps(func)
     70 def wrapper(*args, **kwargs):
     71     try:
---> 72         retval = cfunc(*args, **kwargs)
     73     except TypeError as e:
     74         if not e.args or not e.args[0].startswith('unhashable type:'):

File ~\anaconda3\Lib\site-packages\sympy\series\gruntz.py:452, in limitinf(e, x)
    450     c0, e0 = mrv_leadterm(e.min, x)
    451 else:
--> 452     c0, e0 = mrv_leadterm(e, x)
    453 sig = sign(e0, x)
    454 if sig == 1:

File ~\anaconda3\Lib\site-packages\sympy\core\cache.py:72, in __cacheit.<locals>.func_wrapper.<locals>.wrapper(*args, **kwargs)
     69 @wraps(func)
     70 def wrapper(*args, **kwargs):
     71     try:
---> 72         retval = cfunc(*args, **kwargs)
     73     except TypeError as e:
     74         if not e.args or not e.args[0].startswith('unhashable type:'):

File ~\anaconda3\Lib\site-packages\sympy\series\gruntz.py:554, in mrv_leadterm(e, x)
    546 #
    547 # The positive dummy, w, is used here so log(w*2) etc. will expand;
    548 # a unique dummy is needed in this algorithm
   (...)
    551 # improved, or just find limits of Re and Im components separately.
    552 #
    553 w = Dummy("w", positive=True)
--> 554 f, logw = rewrite(exps, Omega, x, w)
    555 try:
    556     lt = f.leadterm(w, logx=logw)

File ~\anaconda3\Lib\site-packages\sympy\series\gruntz.py:647, in rewrite(e, Omega, x, wsym)
    645     sig = sign(g.exp, x)
    646     if sig != 1 and sig != -1 and not sig.has(AccumBounds):
--> 647         raise NotImplementedError('Result depends on the sign of %s' % sig)
    648 if sig == 1:
    649     wsym = 1/wsym  # if g goes to oo, substitute 1/w

NotImplementedError: Result depends on the sign of -sign(n)

.................................................. .................................................. ........................

По математике результат должен быть 0

Может ли кто-нибудь объяснить мне вывод и исправить это?

Является ли n положительным? Целое число?

jared 28.05.2024 22:34

Полное сообщение об ошибке, пожалуйста!. Это может помочь оценить выражение по частям. Другими словами, все стандартные шаги отладки.

hpaulj 29.05.2024 00:11

Пробовали n=symbols('n', positive=True)? (Или negative=True?)

hpaulj 29.05.2024 08:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Установка n и Im как положительное число при создании символа решит эту проблему.

import sympy as smp
from sympy import *
x=symbols('x')
#Im is symbol for imaginary unit to avoid overwriting smp.I
n,Im=symbols('n Im',positive=True)
limit(simplify(integrate(exp(-x)*exp(-Im*n*x),x)),x,smp.oo) # 0

Обратите внимание, что вы перезаписываете мнимое число простого символа.

jared 29.05.2024 18:15

Да, я знаю, что ты имеешь в виду. Для меня это фатальная ошибка. Я отредактировал свой ответ. Вы тоже отредактировали мой ответ. Но следует также упомянуть знак мнимой единицы Im, а не просто n. Я запускаю этот код, не устанавливая символ Im как положительный, и он не работает.

hello447 29.05.2024 19:29

Что означает, что мнимое число i может быть положительным или отрицательным?

jared 29.05.2024 19:51

В Sympy каждая переменная является символом. В этом коде вам необходимо установить Im как положительное значение, иначе это не сработает. Попробуй это. Удалите создание символа Im как положительного, и появится сообщение об ошибке. Вы можете создавать символы отдельно. n=symbols('n',positive=True) и Im=symbol('Im') Это не работает без установки знака для символа Im

hello447 29.05.2024 20:39

Другие вопросы по теме