Comportamento incoerente della funzione limite durante la valutazione di un limite diretto in corrispondenza di una discontinuità
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 Limit
funzione in qualche modo "dimentichi" del caso speciale possibile per il y == 0
quale 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
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 True
tutta la linea, ma l'impostazione predefinita attuale è Automatic
, che fa cose diverse con funzioni diverse.