Calculus not that hard if we use Sympy

ดิฟ อินทริเกรต ช่วยด้วยไพทอน

Piravit Chenpittaya
4 min readNov 19, 2019
Run away, but we’re running in circles

ถ้าจะพูดถึง Calculus ก็ต้องตามมาด้วย ดิฟ และอินทิเกรต ทั้งสองแนวคิดที่กำเนิดจากปัญหาที่ต่างกันแต่กลับมีความสัมพันธ์กันลึกซึ้ง โดยคร่าว ๆ เรากล่าวได้ว่าอนุพันธ์และปริพันธ์เป็นฟังก์ชันผกผันของกันและกัน (ปรียบเสมือนเป็นด้านทั้งสองของเหรียญอันเดียวกัน)

ง(._.)ง

นี่คือ สูตรของอนุพันธ์ และปริพันธ์ แต่สูตรนั้นมันมีมากเหลือเกินไม่ได้ใช้บ่อยก็จำไม่ได้หรอก ดังนั้นแล้วถ้าเรามีตัวช่วยอย่าง Sympy ก็จะไม่ยากอีกต่อไป~

wiki/SymPy

Sympy เป็นไลบารี่ของ python ใช้สำหรับคำนวณคณิตศาสตร์เชิงสัญลักษณ์ (symbolic mathematics) ซึ่งเราจะใช้มันคำนวณ ดิฟ อินทิเกรตให้เรากัน~

ใน blog นี้ผมจะใช้ Google Colab เขียนนะครับ
มันเหมือน pythonIDLE แต่เขียนได้บนเว็บพร้อมไลบารี่บางส่วนไว้แล้วรวมถึง sympy ด้วย แต่ถ้าเล่นเองให้ลง pip install sympy
ถ้าเปรียบเทียบง่ายๆมันก็คือ jupyter notebook ที่เก็บอยู่บน Google drive นั้นเอง

สร้าง python3 notebook ขึ้นมา

ใส่โค้ดตัวนี้ลงไปเพื่อให้การแสดงผลนั้นออกมาเป็นสัญลักษณ์ทางคณิตศาสตร์ที่เข้าใจได้ และตั้งให้ 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) งั้นสินะ(ครบมั้ง)

small paper meme

ไม่ ๆ มันมีอีกวิธี

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 ในตั้งค่าจะมี

หมาคอร์กี้มาวิ่งเล่นข้างบน ”

น่ารักสุด ๆ ヽ(〃^▽^〃)ノ

“im Top dog”

โค้ดทั้งหมดของ blog นี้

Sympy ยังสามารถคำนวณสมการได้มากกว่านี้สามารถศึกษาเพิ่มเติมได้ที่

--

--

Piravit Chenpittaya
Piravit Chenpittaya

Written by Piravit Chenpittaya

call me karn | Computer of Engineering : PSU | IG: karn.svg | git: https://github.com/karnzx /

No responses yet