python mathplotlib

การใช้ Python ในการเรียน Math/Physics – Matplotlib

บทความนี้จะเป็นการเรียนเขียนโปรแกรมด้วยภาษา Python ไปพร้อมๆกับการใช้งานจริง กลุ่มเป้าหมายคือนักเรียนมัธยมที่เรียนคณิตศาสตร์พื้นฐานมาแล้ว เช่นการแก้สมการ ฟังก์ชั่นและกราฟ หากพอคุ้นเคยกับการเขียนโปรแกรมมานิดหน่อยก็จะเข้าใจได้ไม่ยากแต่ไม่จำเป็นต้องเก่งแค่พอเข้าใจรูปแบบของคำสั่งมานิดๆหน่อยๆมาพอ

เนื้อหาจะเป็น series ต่อเนื่องไปเรื่อยๆ สอนการเขียนไพตอนไปพร้อมๆกับคณิตศาสตร์และฟิสิกส์ที่จะเอามาผสมผสาน ผู้ที่รู้ Math/Physics ในเรื่องเหล่านั้นอยู่แล้วอาจรู้สึกเยิ่นเย้อก็ขอให้ข้ามในส่วนที่รู้แล้วไป ที่ต้องอธิบายก็เพราะไม่ต้องการให้คนที่ยังไม่แน่นในบางเรื่องตามไม่ทัน

ไพตอนเป็นภาษาที่มี package สนับสนุนมากมายทำให้ได้รับความนิยมเอาไปใช้ในการวิเคราะห์ข้อมูลในหลายๆฟิลด์ การเรียนไพตอนแบ่งเป็นสองส่วน หนึ่งเรียนรูปแบบของภาษาหรือที่เรียกว่า syntax ซึ่งสำหรับผู้ที่รู้ภาษาอื่นมาแล้วก็สามารถเรียนรู้เพิ่มเติมได้โดยง่ายดาย สองเรียนการใช้งาน package เพิ่มเติมต่างๆซึ่งขึ้นอยู่กับวัตถุประสงค์ของใช้งาน ในบทความนี้จะสมมติว่าผู้เรียนไม่มีความรู้ภาษาใดมาก่อนและเรากำลังจะเขียนโปรแกรมเพื่อประกอบการเรียนวิชาคณิตศาสตร์และฟิสิกส์ในระดับชั้นมัธยมต้นและปลาย ดังนั้นบทความนี้จึงเหมาะสำหรับนักเรียนโดยเฉพาะแต่ไม่จำกัดว่าจะต้องเป็นนักเรียนในสายวิทยาศาสตร์

เครื่องมือใช้

1. Spyder

เครื่องมือที่ใช้ในการเขียนโปรแกรมด้วย python มีหลายตัว ในที่นี้แนะนำให้ใช้ Spyder ซึ่งผนวกอยู่ในแบรนด์ที่ชื่อว่า anaconda ซึ่งสามารถดาวน์โหลดได้จาก https://www.anaconda.com/products/individual

โดยจะติดตั้งโปรแกรม anaconda ซึ่งทำหน้าที่เป็นระบบแม่เพื่อติดตั้งโปรแกรมอื่นๆต่อไป ที่เราต้องการก็คือ Spyder ที่เป็นเครื่องมือสำหรับสร้างโปรแกรมด้วย python ซึ่งจะมีการติดตั้งโปรแกรมที่จำเป็นต่างๆเพิ่มเติมให้อัตโนมัติ

ช่องซ้ายเป็น Editor สำหรับเขียนโปรแกรม ช่องขวาล่างเป็น console สำหรับแสดงผลและใช้เขียนโปรแกรมสั้นๆได้ด้วย

Panel ทางด้านซ้ายสำหรับเขียนโปรแกรม ทางด้านขวาล่างสำหรับดูผล เมื่อต้องการรันโปรแกรมกดปุ่ม F5

กดเมนู File -> New file เพื่อสร้างพื้นที่เขียนโปรแกรมใหม่ spyder จะสร้าง template แบบนี้ให้

!/usr/bin/env python3
-- coding: utf-8 --
"""
Created on Wed Sep 23 08:29:46 2020
@author: jaraspan
"""

เราเพียงแต่เขียนโปรแกรมต่อท้ายเข้าไป การเขียนโปรแกรมทำได้สองทาง หนึ่งเขียนใน Editor ทางซ้ายแล้วกดปุ่ม F5 เพื่อเป็นการรันโปรแกรม สองเขียนโปรแกรมทีละคำสั่งในช่อง console แล้วกด enter ซึ่งจะแสดงผลในช่องเดียวกันมักใช้สำหรับการ test คำสั่งสั้นๆ

หากคุณมีปัญหาในการติดตั้งและการรันโปรแกรม อ่านบทความนี้

2. Python online

นอกจากการติดตั้งโปรแกรมบนเครื่องและเขียนโปรแกรมผ่าน spyder แล้ว หากเราต้องการเพียงแค่ทดลองคำสั่งสั้นๆหรือใช้เครื่องนอกสถานที่ที่ไม่สามารถติดตั้งโปรแกรมได้ สามารถใช้บริการ python online ซึ่งมีอยู่หลายเว็บ เช่น

https://www.python.org/shell/
https://repl.it/languages/python3

หรือค้นจากคำว่า python online

Python กับ Math/Physics

โดยพื้นฐานไพตอนเป็นเพียงภาษาคอมพิวเตอร์ภาษาหนึ่ง การนำไพตอนมาใช้งานด้านใดด้านหนึ่งจะต้องมี code เฉพาะงานนั้นซึ่งเรียกว่า package เช่นถ้าเราจะเอาไพตอนมาใช้งานด้าน AI ก็จะต้องมีแพคเกจสำหรับ AI, ถ้าจะเขียนไพตอนสำหรับการวิเคราะห์ข้อมูลก็จะต้องมีแพคเกจด้าน Data Analysis เป็นต้น

ตามปกติแพกเกจที่เป็นมาตรฐานจะผนวกอยู่ใน python อยู่แล้วไม่จำเป็นต้องติดตั้งเพิ่มเติม หากเราใช้ไพตอนด้วย spyder จะมีแพคเกจที่นอกเหนือจากมาตรฐานหลายตัวผนวกมาให้แต่ไม่มีแพคเกจเกี่ยวกับ Math ซึ่งเราจะต้องติดตั้งเพิ่มเติมเข้าไป

ตัวอย่างเช่น หากเราต้องการแก้สมการด้วยไพตอนจะต้องใช้แพคเกจ sympy ซึ่งจะต้องติดตั้งเพิ่มเติม ให้เปิด command prompt แล้วพิมพ์

conda install -c anaconda sympy

จากนั้นในโปรแกรมเราก็เรียกใช้แพคเกจ sympy ผ่านคำสั่ง

import sympy

เริ่มใช้ไพตอนแก้สมการง่ายๆ

เราจะเริ่มจากการแก้สมการมัธยมต้นแบบง่ายๆเช่น

x2 + 6x + 8 = 0

ซึ่งคำตอบคือ (x+2)(x+4) = 0 หรือ x = -2, -4

ให้เขียนโปรแกรมตามนี้

from sympy import symbols, Eq, solve
x = symbols('x')
eq = Eq(x**2+6*x+8, 0)
print(solve(eq))
  1. เราต้องการใช้คำสั่ง symbols, Eq, solve จากแพคเกจ sympy
  2. ใช้คำสั่ง symbols สร้าง x ให้มีฐานะเป็นสัญลักษณ์ที่เราจะเอาไปใช้ในสมการ
  3. Eq เป็นคำสั่งในการนิยามสมการ คำสั่งนี้หมายความว่าเรานิยามสมการ x2 + 6x + 8 = 0
  4. solve คือสั่งให้แก้สมการ แล้วใช้คำสั่ง print แสดงผลออกมา

กด F5 เพื่อ run โปรแกรม คำตอบจะเป็นตัวแปรแบบ list ในที่นี้คือ [-4, -2]

ใช้ไพตอน plot กราฟ

ในวิชาคณิตศาสตร์เราจะถูกสอนให้ plot กราฟของสมการต่างๆ ซึ่งส่วนใหญ่จะนำไปใช้ในการวิเคราะห์ปัญหาทางด้านฟิสิกส์ หากเป็นสมการง่ายๆก็พอจะ sketch ด้วยมือได้ แต่หากสมการซับซ้อนก็จะใช้การเขียนโปรแกรมเข้าช่วย

การ plot กราฟโดยใช้ไพตอนทำได้ง่ายมาก สมมติว่าเราต้องการพลอตกราฟโดยใช้ข้อมูลต่อไปนี้

(x, y) -> (1, 2) (2, 4) (3, 6) (4, 8) (5, 10)

from matplotlib import pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)

กด F5 รันจะได้กราฟ

  1. การพลอตกราฟต้องใช้แพคเกจ matplotlib ซึ่งใน spyder ติดตั้งไว้แล้ว เราเพียงแต่เรียกใช้งาน คำสั่งที่เราต้องการก็คือ pyplot ซึ่งจะย่อสั้นๆว่า plt
  2. นำเอาจุดที่ต้องการพลอตมาเขียนในรูป list หรือข้อมูลที่อยู่ภายใน [ , , ] เซตตัวแปร x
  3. เซตตัวแปร y
  4. สั่งให้เอาจุด x, y ซึ่งอยุ่ในรูป list มาพลอตเป็นกราฟเก็บเอาไว้ในหน่วยความจำ แต่ยังไม่แสดง

ใช้ไพตอน plot กราฟจากสมการ

สมมติว่าเราต้องการ plot กราฟตามสมการ y = x2 เขียนโปรแกรมตามนี้

from matplotlib import pyplot as plt
import numpy as np
x = np.arange(-10, 10, 0.1)
y = x**2
plt.plot(x, y)

เมื่อรันก็จะได้กราฟตามรูป

  1. import คำสั่งที่เกี่ยวกับการพลอตกราฟ
  2. import คำสั่งที่เกี่ยวกับตัวเลขในที่นี้คือ numpy
  3. เราต้องการโดเมน x ให้มีค่าตั้งแต่ -10 ถึง 10 ห่างกัน 0.1 ซึ่งก็หมายความว่าเราต้องการพิมพ์คำสั่ง
    x = [ -10, -9.9, -9.8, …, 0, 0.1, 0.2, …, 10 ]
    ซึ่งในความเป็นจริงจะเสียเวลาและยุ่งยากมากหากเราพิมพ์ทั้งหมด จึงใช้คำสั่ง arange ซึ่งอยู่ในแพคเกจ numpy มาช่วย
    x = np.arange(-10, 10, 0.1)
    หมายความว่าให้สร้างตัวแปร x แบบ list ให้มีค่าเริ่มจาก -10 เพิ่มขึ้นทีละ 0.1 จนถึง 10 โดยที่เราไม่จำเป็นต้องพิมพ์เอง
  4. เราต้องการเอาทุก x มายกกำลังสองเป็น
    y = [ -10*-10, -9.9*-9.9, -9.8*-9.8, …, 0, 0.1*0.1, 0.2*0.2, …, 10*10 ]
    ซึ่งเราไม่จำเป็นต้องเขียนเช่นนี้ เราเขียนเป็น
    y = x**2
    แทน ซึ่งไพตอนจะมองว่า x ทางขวาเป็น list ซึ่งมีค่าตามที่กำหนดมาแล้ว ดังนั้นคำสั่งนี้จึงถูกตีความว่าทุกๆค่าของ x ใน list ให้ยกกำลังสองแล้วใส่เข้าไปใน list ที่ชื่อ y
  5. สั่งพลอตกราฟ

แต่หากเราต้องการพลอตกราฟกลับกันเช่น x = y2 หรือเป็นกราฟแบบรูปก่อนหน้าแต่หมุนมาทางขวา 90 องศา

from matplotlib import pyplot as plt
import numpy as np
y = np.arange(-10, 10, 0.01)
x = y**2
plt.plot(x, y)

ซึ่งจะได้กราฟ

Trick ก็คือสลับการเซตค่าตัวแปร x และ y ในบรรทัดที่ 3 และ 4

สรุปในเบื้องต้น

ตอนนี้เป็นการแนะนำคร่าวๆให้เห็นภาพรวมของการใช้ไพตอนกับงานทาง Math และต่อไปจะค่อยๆแนะนำการนำไพตอนมาใช้กับการเรียนฟิสิกส์ในหลายๆแง่มุม หวังว่าผู้อ่านที่เป็นนักเรียนจะสนุกกับการเรียนเขียนโปรแกรมกับเรียน Math/Physics ไปพร้อมกัน พบกันใหม่ตอนถัดไป