scipy.optimize --- การหาค่ารากและค่าต่ำสุด

โมดูลย่อย scipy.optimize จัดเตรียมรูทีนง่ายๆ สำหรับการหาค่ารากและค่าต่ำสุดของฟังก์ชันสเกลาร์ที่ผู้ใช้กำหนด เนื่องจากแต่ละ iteration ต้องเรียก Python callable ที่ผู้ใช้ระบุ ความเร็วที่เพิ่มขึ้นเมื่อเทียบกับการใช้งาน Python ล้วนจึงไม่มากนัก (โดยทั่วไปประมาณ 2 เท่า)

ฟังก์ชัน

scipy.optimize.bisect(f: Callable[[float], float], a: float, b: float, *, xtol: float = xtolerance, maxiter: int = 100) float

หาค่าราก f ในช่วง [a, b] โดยใช้วิธีการแบ่งครึ่ง f ต้องเปลี่ยนเครื่องหมายในช่วงดังกล่าว

พารามิเตอร์:
  • f -- callable ที่รับ float หนึ่งตัวและคืน float

  • a -- จุดปลายซ้ายของช่วง

  • b -- จุดปลายขวาของช่วง

  • xtol -- ค่าความคลาดเคลื่อนสัมบูรณ์ที่ตำแหน่งของราก (ค่าเริ่มต้น xtolerance)

  • maxiter -- จำนวนสูงสุดของการแบ่งครึ่ง (ค่าเริ่มต้น 100)

ค่าที่คืน:

ตำแหน่งของรากเป็น float

ข้อยกเว้น:

ValueError -- หาก f(a) * f(b) > 0

scipy.optimize.curve_fit(f: Callable[..., float], xdata: ndarray | list | tuple, ydata: ndarray | list | tuple, p0: ndarray | list | tuple, *, xatol: float = xtolerance, fatol: float = xtolerance, maxiter: int | None = None) None

ฟังก์ชันต้นแบบสำหรับการปรับเส้นโค้งแบบ nonlinear least-squares (Levenberg-Marquardt) มีอยู่ในตาราง module เพื่อความเข้ากันได้ของ API แต่ปัจจุบันเป็นเพียง placeholder: รับและตรวจสอบอาร์กิวเมนต์แต่คืนค่า None เสมอ แนะนำให้ใช้ fmin() หรือไลบรารีภายนอกจนกว่ารูทีนนี้จะถูกใช้งานจริง

พารามิเตอร์:
  • f -- model callable f(x, *params) -> float

  • xdata -- array-like 1-D ของค่าอิสระ

  • ydata -- array-like 1-D ของค่าตาม มีความยาวเท่ากับ xdata

  • p0 -- array-like 1-D ของค่าประมาณพารามิเตอร์เริ่มต้น

scipy.optimize.fmin(f: Callable[[float], float], x0: float, *, xatol: float = xtolerance, fatol: float = xtolerance, maxiter: int = 200) float

หาตำแหน่งค่าต่ำสุดเฉพาะที่ของฟังก์ชันสเกลาร์ f โดยใช้วิธี downhill simplex (Nelder-Mead)

พารามิเตอร์:
  • f -- callable ที่รับ float หนึ่งตัวและคืน float

  • x0 -- การประมาณค่าเริ่มต้น

  • xatol -- ค่าความคลาดเคลื่อนสัมบูรณ์ที่ตำแหน่ง (ค่าเริ่มต้น xtolerance)

  • fatol -- ค่าความคลาดเคลื่อนสัมบูรณ์ที่ค่าของฟังก์ชัน (ค่าเริ่มต้น xtolerance)

  • maxiter -- จำนวน iteration สูงสุด (ค่าเริ่มต้น 200)

ค่าที่คืน:

ตำแหน่งของค่าต่ำสุดเป็น float

scipy.optimize.newton(f: Callable[[float], float], x0: float, *, tol: float = xtolerance, rtol: float = rtolerance, maxiter: int = 50) float

หาค่าศูนย์ของฟังก์ชัน f ที่มีค่าจริงและเป็นสเกลาร์โดยใช้วิธี Newton-Raphson (secant)

พารามิเตอร์:
  • f -- callable ที่รับ float หนึ่งตัวและคืน float

  • x0 -- การประมาณค่าเริ่มต้น

  • tol -- ค่าความคลาดเคลื่อนสัมบูรณ์ที่ค่าราก (ค่าเริ่มต้น xtolerance)

  • rtol -- ค่าความคลาดเคลื่อนสัมพัทธ์ที่ค่าราก (ค่าเริ่มต้น rtolerance)

  • maxiter -- จำนวน iteration สูงสุด (ค่าเริ่มต้น 50)

ค่าที่คืน:

ตำแหน่งของรากเป็น float