เริ่มใช้ Wolfram Language and Mathematica บน Raspberry Pi



By Wolfram Research - https://www.wolframalpha.com/media/, Public Domain, https://commons.wikimedia.org/w/index.php?curid=54057238

Wolfram Mathematica เป็นซอฟต์แวร์ทางการคำนวณได้รับการติดตั้งมาพร้อมกับ Raspbian มาระยะหนึ่งแล้ว ถ้าจำไม่ผิดน่าจะเริ่มกันมาตั้งแต่ปี ค.ศ 2014 (http://www.wolfram.com/raspberry-pi/) อาจด้วยที่ Wolfram Mathematica เป็นซอฟต์แวร์ทางคณิตศาสตร์ ก็เลยมีการกล่าวถึงกันค่อนข้างน้อย แต่หากพิจารณาถึงคุณสมบัติของซอฟต์แวร์ (https://en.wikipedia.org/wiki/Wolfram_Mathematica#Features) แล้ว นับว่าคุ้มค่าที่จะศึกษาทีเดียว  วัตถุประสงค์ของบทความนี้ไม่ใช่เพื่อเป็นคู่มือการใช้งาน (ซึ่งไม่สามารถทำได้แน่นอน) แต่เป็นการหยิบเอาคุณสมบัติบางอย่างที่น่าสนใจของ Wolfram Mathematica ชุดที่ติดตั้งบน Raspbian มาให้ได้รับทราบกัน อาจจะเป็นตัวจุดประกายในการใช้ประโยชน์อื่นต่อไป

การติดตั้ง 

ไม่ต้องทำการติดตั้งเพราะได้รับรวมอยู่ใน Raspbain เรียบร้อยแล้ว หลังการ Boot จะเห็น icon ของ Wolfram และ Mathematica ดังรูปที่ 2  ซึ่งมีสองส่วนคือ ส่วนที่เป็นเป็นตัวภาษาคือ WolFram  (https://en.wikipedia.org/wiki/Wolfram_Language) และ Mathematica คือส่วนที่เป็น Notebook Interface (https://en.wikipedia.org/wiki/Wolfram_Mathematica#The_Notebook_interface)


รูปที่ 2 



ตัวภาษา Wolfram เป็น High Level Programming Language ที่รองรับการทำงานแบบ Symbolic Computation ทำให้ผู้ทำงานสามารถใช้การเขียนสมการติดตัวแปร (Algebraic Expression) ได้ ต่างจาก Programming Language ที่เราคุ้นเคย เช่น C++, Python  ฯล เพื่อให้เห็นภาพชัดเจน ลองพิจารณาขั้นตอนการทำงานเพื่อหาคำตอบของ

cos x + x d x

ซึ่งอาศัยกฏของการบวก รวมกับเรื่องของตรีโกรณมิติ
cos x + x d x = cos x d x + x d x

จะได้คำตอบคือ
sin x + x 2 2 + C


ที่นี้ลองคิดว่าหากใช้ภาษาอย่าง Python หรือ C++ จะทำอย่างไร แต่ด้วยภาษา Wolfram เราสามารถเขียนชุดคำสั่งได้ในบรรทัดเดียวดังนี้




คงจะพอเห็นภาพละนะครับ ต่อไปก็จะเป็นหยิบเอาตัวอย่างการทำงานบางอย่างมาให้ดูกัน

Hello World !

การเรียกใชังานครั้งแรกให้เรียกไปที่ Icon ของ Mathematica มาใช้ หากเลือก Wolfram ก็จะได้แต่ทำงานกับตัวภาษาใน command mode  ในการใช้งานควรให้ Raspberry Pi เชื่อมต่อกับ Internet ไว้ด้วย เพื่อจะได้ทำการ activate ซอฟต์แวร์ ในบางครั้งซอฟต์แวร์จะต้อง download บางอย่างเพิ่มเติมจาก Server ของ Wolfram   รูปที่ 3 แสดง Window ซ้ายมือคือ Notebook Interface ใช้สำหรับพิมพ์คำสั่งและดูผลลัพธ์ สำหรับ Window ขวามือเป็น Link ไปสู่เว็บไซต์เอกสาร และ ชุมชนของ Mathametica


รูปที่ 3 Notebook Interface ของ Mathematica


พิมพ์คำสั่งแรก (กด Enter เมื่อจบคำสั่งในแต่ละบรรทัด)






แล้วกด Shift-Enter พร้อมกัน เพื่อให้คำสั่งทำงาน










Arithmetic Operations


ทดลองพิมพ์ชุดคำสั่ง









แล้วกด Shift - Enter พร้อมกัน จะเห็น output แสดงที่ด้านล่างของ Notebook


Conditional Statement


1. IF















2. Switch
















User Function

ผู้ใช้สามารถสร้าง User Function ขึ้นมาใช้เองได้ ในตัวอย่างคือการสร้าง User Function ชื่อ Sig ขึ้นมา รับพารามิเตอร์ X แล้วคืนค่าด้วยสมการ 1 1 + e x
















Graphic และ Plots


1 . การใช้ Plot ร่วมกับ Range of value



















2 การใช้ ListPlot



3. Plot3D

Do Math

1. แก้สมการ ด้วยคำสั่ง Solve[]

x 2 2 x 3 = 0




1.2  Linear Equations

สมมุติว่าต้องการแก้สมการ Linear Equation ตามนี้

x + y + z = 0
x + 2y + 3z = 1
x - y + z  = 2



2. Calculus

 2.1 Limit  หาค่าของ
lim x 6 x + 1 2 x + 5

2.2 Differentiation  จงหาสมการอนุพันธ์ุของ
x 3 4 + 1 x 2
x 2 e x cos 2 x
log 10 x e x

2.3 Integration 
1 4 + 3 x d x
( sin 3 x ) 2 + ( cos 3 x ) 2 d x


Audio

Wolfram Mathematica ในชุดบน Raspbian มีชุดคำสั่งที่ใช้จัดการด้าน Audio ติดมาด้วย ในตัวอย่างใช้สองคำสั่งคือ Sound[] และ SoundNote[]  ให้เล่นเพลงที่มีโน๊ตดังนี้ โด โด ซอล ซอล ลา ลา ซอล





การใช้งานร่วมกับ GPIO

ส่วนนี้น่าจะเป็นส่วนที่ WolFram Mathematica ได้พยายามโยงเข้าหากลุ่มงานด้าน IoT  ไม่เฉพาะแต่กับ Raspberry Pi เท่านั้น ยังมี Arduino อีกด้วย ชุดคำสั่งหลักที่ใช้งานกับ GPIO คือ FindDevices[], DeviceConfigur[], DeviceOpen[], DeviceRead[] และ DeviceWrite[] (ระหว่างที่เขียนเรื่องนี้อยู่ ผมพบว่าการใช้งาน Raspbian Stretch จะไม่สามารถเรียกใช้  GPIO ได้ )

ทำไฟกระพริบ

1. กำหนด Pin สำหรับ LED สอง Pin คือ GPIO 17 และ GPIO 14 ให้มีสถานะเป็น "Output"
2. ทำให้ LED สว่างและดับสลับกันไปมา ด้วยคำสั่ง DeviceWrite[]








รับข้อมูลจาก Arduino ผ่าน Serial Port


1. เขียน Arduino Sketch เพื่อส่งข้อมูลแบบสุ่ม


void setup() {
  Serial.begin(9600);
}
void loop() {
 Serial.print(randomDigit());
 delay(1000);
}

/* from http://forum.arduino.cc/index.php?topic=197633.0 */
byte randomDigit() {
  unsigned long t = micros();
  byte r = (t % 10) + 1;
  for (byte i = 1; i <= 4; i++) {
    t /= 10;
    r *= ((t % 10) + 1);
    r %= 11;
  }
  return (r - 1);
}


ทำการ compile และ upload sketch

2. นำ Arduino เชื่อมต่อกับ Raspberry Pi ด้วย USB Port แล้วเปิดการสื่อสารระหว่าง Wolfram กับ Arduino  ผ่าน Serial Port ด้วยคำสั่ง DeviceOpen[]


ในกรณีที่ไม่การเชื่อมต่อไม่สำเร็จ ให้ปิดโปรแกรม Mathematica แล้วมาเรียกผ่าน command line ด้วยคำสั่ง


$ sudo mathematica




3. กำหนดตัวแปรเพื่อรับค่าจาก Device


4. รับค่าจาก Serial Port



การทำ Snap Shot ด้วย RaspiCamera

ทำได้สองกรณีคือ
1. ใช้คำสั่ง Run[] เพื่อเรียกใช้คำสั่ง raspistill  แล้วทำการ Import[] เข้ามาที่ Notebook


2.  ใช้ DeviceOpen["RaspiCam"] และ DeviceRead["RaspiCam"]





ทั้งหมดที่เขียนมานี้เป็นการหยิบเอาเพียงส่วนเล็ก ๆ ปลีกย่อยให้ดูคร่าว ๆ พอเป็นตัวอย่างเท่านั้นเอง โดยตัวอย่างทั้งหมดก็เพียงแต่ดัดแปลง ตกแต่ง จากข้อมูลที่มีอยู่แล้วบนเว็บไซต์ของ Wolfram Mathematica  ก็หวังว่าน่าจะเพียงพอที่จะได้เห็นความสามารถในภาพรวมของซอฟต์นี้ นะ ครับ


ปล. เว็บไซต์ที่เกี่ยวข้อง
http://www.atriumtech.com/ko/mathematica/



















Previous
Next Post »