Comportement incohérent de la fonction Limit lors de l'évaluation d'une limite dirigée à une discontinuité
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
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.