Несогласованное поведение функции предела при оценке направленного предела на разрыве
Рассмотрим следующее выражение:
(* 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}}]
Ответы
Вы хотите использовать эту GenerateConditionsопцию Limit
, например:
limit = Limit[Sign[x], x -> y, GenerateConditions -> True]
(* ConditionalExpression[Sign[y], y != 0] *)
limit /. y -> 0
(* Undefined *)
Это работает со многими символическими функциями. На мой взгляд, он должен использоваться по умолчанию для True
всех, но текущее значение по умолчанию - Automatic
это разные вещи с разными функциями.