Comportamento incoerente della funzione limite durante la valutazione di un limite diretto in corrispondenza di una discontinuità

Aug 19 2020

Considera la seguente espressione:

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

Ora sostituiamo un valore specifico a y:

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

Se ora lo valuto ottengo risultati incoerenti:

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

A mio parere, expr1è erroneamente valutato. Suppongo che la Limitfunzione in qualche modo "dimentichi" del caso speciale possibile per il y == 0quale porta a questo problema. Come potrei evitare questo? Mi aspetterei di ottenere qualcosa di simile al seguente Limit[Sign[x], x -> y, Direction -> "FromAbove"]come risultato corretto:

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

Risposte

2 Pillsy Aug 19 2020 at 21:25

Vuoi usare l' GenerateConditionsopzione per Limit, in questo modo:

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

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

Funziona con molte funzioni simboliche. A mio parere, dovrebbe essere predefinito su Truetutta la linea, ma l'impostazione predefinita attuale è Automatic, che fa cose diverse con funzioni diverse.