Comportement incohérent de la fonction Limit lors de l'évaluation d'une limite dirigée à une discontinuité

Aug 19 2020

Considérez l'expression suivante :

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

Remplaçons maintenant une valeur spécifique pary :

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

Si je l'évalue maintenant, j'obtiens des résultats incohérents :

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

À mon avis, expr1est mal évalué. Je suppose que la Limitfonction "oublie" d'une manière ou d'une autre le cas particulier possible y == 0qui conduit à ce problème. Comment pourrais-je éviter cela ? Je m'attendrais à obtenir quelque chose comme ce qui suit pour Limit[Sign[x], x -> y, Direction -> "FromAbove"]un résultat correct:

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

Réponses

2 Pillsy Aug 19 2020 at 21:25

Vous voulez utiliser l' GenerateConditionsoption pour Limit, comme ceci :

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

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

Cela fonctionne avec de nombreuses fonctions symboliques. À mon avis, il devrait être appliqué par défaut à Truetous les niveaux, mais la valeur par défaut actuelle est Automatic, qui fait des choses différentes avec des fonctions différentes.