พฤติกรรมที่ไม่สอดคล้องกันของฟังก์ชัน Limit เมื่อประเมินขีด จำกัด ที่กำหนดไว้ที่ความไม่ต่อเนื่อง

Aug 19 2020

พิจารณานิพจน์ต่อไปนี้:

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

ตอนนี้เรามาแทนค่าเฉพาะเป็นy:

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

หากตอนนี้ฉันประเมินแล้วฉันได้ผลลัพธ์ที่ไม่สอดคล้องกัน:

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

ในความคิดของฉันexpr1มีการประเมินผิด ฉันคิดว่าLimitฟังก์ชัน "ลืม" อย่างใดเกี่ยวกับกรณีพิเศษที่เป็นไปได้y == 0ซึ่งนำไปสู่ปัญหานี้ ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร ฉันคาดหวังว่าจะได้รับสิ่งต่อไปนี้สำหรับLimit[Sign[x], x -> y, Direction -> "FromAbove"]ผลลัพธ์ที่ถูกต้อง:

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

คำตอบ

2 Pillsy Aug 19 2020 at 21:25

คุณต้องการใช้GenerateConditionsตัวเลือกสำหรับLimitดังนี้:

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

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

สิ่งนี้ใช้ได้กับฟังก์ชันสัญลักษณ์หลายอย่าง ในความคิดของฉันควรเป็นค่าเริ่มต้นTrueทั่วทั้งกระดาน แต่ค่าเริ่มต้นปัจจุบันคือAutomaticซึ่งทำสิ่งต่าง ๆ ด้วยฟังก์ชันที่แตกต่างกัน