2017-01-27 7 views
4

Я пытаюсь сделать относительно простой предел использования SymPy:Limit не оценивает степенной функции

from sympy import * 
f,k,b = symbols('f k b') 
test = f**b - k**b 
limit(test,k,f) 

Я ожидающей 0, но я получаю:

>>> limit(test,k,f) 
f**b - exp(b*log(f)) 

Математически это правильно (и ноль), но почему он не оценивает ноль?

Примечание, если я определяю:

from sympy import * 
f,k,b = symbols('f k b') 
test = exp(b*log(f)) - exp(b*log(k)) 
limit(test,k,f) 

тогда я получить ноль.

ответ

2

Было бы неверно утверждать, что предел равен нулю в целом. Рассмотрим следующие вычисления в консоли Python:

>>> (-1)**(1/2) 
(6.123233995736766e-17+1j) 
>>> (-1 - 1e-15j)**(1/2) 
(5.053215498074303e-16-1j) 

Из разреза комплексного квадратного корня вдоль отрицательной вещественной оси, две очень близкие значения базы производят совершенно разные результаты (разница составляет около 2к).

Предел действительно равна нулю, если мы будем придерживаться положительной базы и реальных показателей

from sympy import * 
k = symbols('k') 
f = symbols('f', positive=True) 
b = symbols('b', real=True) 
test = f**b - k**b 
limit(test,k,f) # returns 0 
+0

Счастлив принять ответ, как он решает мою проблему. Спасибо, что нашли время ответить. Хотя я немного не уверен в объяснении. В моем втором примере, когда я пишу test = exp (blog (f)) - exp (blog (k)), sympy оценивает предел до нуля. Но вопрос об отключении ветвей, похоже, применим и здесь. Например. b = 1/2, f = -1 и k = -1-I * eps, где eps вещественно положительно и стремится к нулю. Тогда, из-за ветвления разреза логарифма, терм1 = + I и терм2 -> - I? Таким образом, предел не всегда равен нулю (в зависимости от направления в комплексной плоскости k подходов f), но sympy дает нуль. – pyguy

+0

Да, возврат 0 для предела exp (b * log (f)) является неверным результатом вообще, так как точка, в которой выполняется предел, может быть точкой разреза ветви. По-видимому, алгоритм SymPy, используемый для оценки пределов, не полностью осознает разветвление ветвей. – FTP

+1

Обратите внимание, что 'limit' вычисляет реальный предел (приближающийся справа по умолчанию). Сложные лимиты не реализованы. – asmeurer