Calculus not that hard if we use Sympy
ดิฟ อินทริเกรต ช่วยด้วยไพทอน
ถ้าจะพูดถึง Calculus ก็ต้องตามมาด้วย ดิฟ และอินทิเกรต ทั้งสองแนวคิดที่กำเนิดจากปัญหาที่ต่างกันแต่กลับมีความสัมพันธ์กันลึกซึ้ง โดยคร่าว ๆ เรากล่าวได้ว่าอนุพันธ์และปริพันธ์เป็นฟังก์ชันผกผันของกันและกัน (ปรียบเสมือนเป็นด้านทั้งสองของเหรียญอันเดียวกัน)
นี่คือ สูตรของอนุพันธ์ และปริพันธ์ แต่สูตรนั้นมันมีมากเหลือเกินไม่ได้ใช้บ่อยก็จำไม่ได้หรอก ดังนั้นแล้วถ้าเรามีตัวช่วยอย่าง Sympy ก็จะไม่ยากอีกต่อไป~
Sympy เป็นไลบารี่ของ python ใช้สำหรับคำนวณคณิตศาสตร์เชิงสัญลักษณ์ (symbolic mathematics) ซึ่งเราจะใช้มันคำนวณ ดิฟ อินทิเกรตให้เรากัน~
ใน blog นี้ผมจะใช้ Google Colab เขียนนะครับ
มันเหมือน pythonIDLE แต่เขียนได้บนเว็บพร้อมไลบารี่บางส่วนไว้แล้วรวมถึง sympy ด้วย แต่ถ้าเล่นเองให้ลง pip install sympy
ถ้าเปรียบเทียบง่ายๆมันก็คือ jupyter notebook ที่เก็บอยู่บน Google drive นั้นเอง
ใส่โค้ดตัวนี้ลงไปเพื่อให้การแสดงผลนั้นออกมาเป็นสัญลักษณ์ทางคณิตศาสตร์ที่เข้าใจได้ และตั้งให้ x, y, zเป็นตัวสัญลักษณ์ชนิดหนึ่ง
from sympy import *
init_printing(use_latex='mathplotlib')
x, y, z= symbols('x y z')
ในที่นี้จะใช้ mathplotlib เพราะใช้ใน colab จะได้แสดงผลได้ทันทีแบบ IDLE
แต่จะใช้ init_printing(use_unicode=True)
ก็ได้แต่ต้องใช้ pprint()
มาช่วยแสดงผล (ใน colab )
กด + code ซ้ายบนเพิ่ม cell แยกwith hollywood package
มาเริ่มกันเลย
ดิฟ
ด้วยการใช้ diff()
/ diff(สมการ, **ตัวแปรที่จะดิฟ)
เช่น
f = cos(x)
diff(f, x) # ดิฟฟังก์ชั่น f หนึ่งครั้ง
แล้วถ้าทำการดิฟหลายๆครั้งละ ก็
diff(cos(x), x, x, x) # ทำการดิฟ cos(x) 3 ครั้ง
งั้นถ้าดิฟ 10 ครั้งต้อง diff(f, x, x, x, x, x, x, x ,x ,x ,x)
งั้นสินะ(ครบมั้ง)
ไม่ ๆ มันมีอีกวิธี
diff(cos(x), x, 3) # ได้เหมือนกับข้างบน
เห็นได้ว่าแบบ 2 เข้าใจง่ายกว่า~
มาลองดูอะไร ที่ชวนปวดหัวดีกว่า exp(x*y*z)
คือ e กำลัง x*y*z
expr = exp(x*y*z)# diff(expr, x, y, y, z, z, z, z) จะเขียนแบบนี้ก็ได้นะ :)
diff(expr, x, y, 2, z, 4)
ดิฟ x หนึ่งครั้ง y สองครั้ง z สี่ครั้ง
แล้วถ้าอยากดูโจทย์สัญลักษณ์ก่อนคำนวณละได้ไหม
คำตอบคือได้โดยใช้Derivative()
เขียนเหมือน diff เลยแต่จะไม่คำนวณออกมา
สามารถเติม .doit()
ต่อท้ายเพื่อสั่งคำนวณได้
อินทิเกรต
ด้วยการใช้ integrate()
/ integrate(สมการ, **ตัวแปรที่จะอินทิเกรต)
เช่น
integrate(cos(x), x) # ได้ sin(x)
และใช้ Integral()
เพื่อแสดงค่าก่อนคำนวณ
ดู ๆ แล้วก็คล้ายกับ diff()
ก็ใช่อยู่ แต่ว่าอินทิเกรตก็มีแบบจำกัดเขตนะ
ดังนั้นถ้าจะคำนวณแบบจำกัดเขตก็เพิ่มตัวแปรเข้าไป 3 ตัว คือ
(ตัวแปรอินทิเกรต, ขอบเขตล่าง, ขอบเขตบน)
** oo คือ ค่าอนันต์ (infinity)
Integral(exp(-x), (x, 0, oo))
# ยังไม่คำนวณ กับ คำนวณแล้ว
Integral(exp(-x), (x, 0, oo)).doit()
ส่วนนี่คือ อินทิเกรต แบบหลายชั้น
Integral(exp(-x**2 - y**2), (x, -oo, oo), (y, -oo, oo))
# ยังไม่คำนวณ กับ คำนวณแล้ว
Integral(exp(-x**2 - y**2), (x, -oo, oo), (y, -oo, oo)).doit()
ลิมิต
มีอินทริเกรตก็ต้องตามมาด้วย limit
คำนวณโดยใช้ limit()
/ limit(สมการ , ตัวเข้าใกล้, เข้าใกล้, เป็น '+' หรือ '-')
และใช้ Limit()
เพื่อแสดงค่าก่อนคำนวณ (“L” ใหญ่)
x เข้าใกล้ (+)
Limit(1/x, x, 0, '+') # แสดงค่า
limit(1/x, x, 0, '+') # คำนวณ
x เข้าใกล้ (-)
Limit(1/x, x, 0, '-') # แสดงค่า
limit(1/x, x, 0, '-') # คำนวณ
อนึ่ง การศึกษาแคลคูลัสอย่างละเอียดในเวลาต่อมา ได้ทำให้เกิดศาสตร์ใหม่ ๆ ทางคณิตศาสตร์มากมาย เช่น คณิตวิเคราะห์ และ ทฤษฎีการวัด เป็นต้น
ดังนั้นอย่าเกลียดมันเลย หาตัวช่วยดีกว่า 5555
“ Fun Fact
ถ้าเปิด Corgi mode ในตั้งค่าจะมี
หมาคอร์กี้มาวิ่งเล่นข้างบน ”
น่ารักสุด ๆ ヽ(〃^▽^〃)ノ
โค้ดทั้งหมดของ blog นี้
Sympy ยังสามารถคำนวณสมการได้มากกว่านี้สามารถศึกษาเพิ่มเติมได้ที่