Perilaku fungsi Limit yang tidak konsisten saat mengevaluasi batas yang diarahkan pada suatu diskontinuitas

Aug 19 2020

Perhatikan ungkapan berikut:

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

Sekarang mari kita gantikan nilai tertentu ke y:

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

Jika sekarang saya mengevaluasinya, saya mendapatkan hasil yang tidak konsisten:

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

Menurut saya, expr1dinilai salah. Saya kira bahwa Limitfungsinya entah bagaimana "melupakan" tentang kasus khusus yang mungkin y == 0yang mengarah ke masalah ini. Bagaimana saya bisa menghindari ini? Saya berharap mendapatkan sesuatu seperti berikut Limit[Sign[x], x -> y, Direction -> "FromAbove"]sebagai hasil yang benar:

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

Jawaban

2 Pillsy Aug 19 2020 at 21:25

Anda ingin menggunakan GenerateConditionsopsi untuk Limit, seperti:

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

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

Ini bekerja dengan banyak fungsi simbolik. Menurut pendapat saya, seharusnya default ke Trueseluruh papan, tetapi default saat ini adalah Automatic, yang melakukan hal berbeda dengan fungsi berbeda.