Несогласованное поведение функции предела при оценке направленного предела на разрыве

Aug 19 2020

Рассмотрим следующее выражение:

(* In *) expr1 = Hold[Limit[Sign[x], x -> y, Direction -> "FromAbove"] == Sign[y]]

Теперь давайте заменим конкретное значение на y:

(* In *) expr2 = expr1 /. y -> 0

Если я сейчас оцениваю это, я получаю противоречивые результаты:

(* In *) ReleaseHold[expr1]
(* Out *) True
(* In *) ReleaseHold[expr2]
(* Out *) False

На мой взгляд, expr1оценивается неправильно. Я предполагаю, что Limitфункция как-то «забывает» о возможности особого случая, y == 0который приводит к этой проблеме. Как я мог этого избежать? В Limit[Sign[x], x -> y, Direction -> "FromAbove"]качестве правильного результата я ожидал бы получить что-то вроде следующего :

(* Out *) Piecewise[{{Sign[y], y != 0}, {1, y == 0}}]

Ответы

2 Pillsy Aug 19 2020 at 21:25

Вы хотите использовать эту GenerateConditionsопцию Limit, например:

limit = Limit[Sign[x], x -> y, GenerateConditions -> True]
(* ConditionalExpression[Sign[y], y != 0] *)

limit /. y -> 0
(* Undefined *)

Это работает со многими символическими функциями. На мой взгляд, он должен использоваться по умолчанию для Trueвсех, но текущее значение по умолчанию - Automaticэто разные вещи с разными функциями.