Tag: Mathematica

ทดลองใช้ C# กับงานวิจัย

ปกติผมจะใช้ Mathematica เป็นหลักในการทำงานโดยมากจะเป็นพวกแบบจำลองคณิตศาสตร์ที่ตองการเห็นว่าผลลัพธ์จะเปลี่ยนแปลงไปอย่างไรถ้าตัวแปรที่สนใจบางตัวมีการเปลี่ยนแปลง เพิ่มขึ้นหรือลดลง ซึ่งแน่นอนผมใช้พวกคำสั่ง Manipulate หรือ Dynamic เป็นหลัก แต่มาระยะหลังนี้เริ่มมีการใช้ R ในที่ทำงานกันเยอะ ผมเลยเขียนโมเดลของงานที่ทำใน R ไปพอสมควร แต่มันก็ติดปัญหาว่ามันช้ามากกับหลายโมเดลที่ทำอยู่ถึงแม้จะหันไปใช้ Rcpp แต่ก็รู้สึกว่าเสียเวลาเขียน wrapper functions ห่อพวกมันอีกทีใน R แถมเวลาส่งงานให้ Prof ทั้งหลายก็ติดเรื่อง compiler อีก แถมต้องมาเขียน shiny อีกดูวุ่นวายไปหมด สุดท้ายกลับมาตายรังที่ Mathematica เหมือนเดิม เขียนโมเดลเสร็จ อยากจะส่งให้ชาวบ้านดูก็ใช้เพียงแค่คำสั่ง Deploy ไปบนcloud เท่านั้นจบเลย …แต่มันก็แลกมาด้วยค่าใช้จ่ายพอสมควร ผมเลยหาทางเลือกอื่นๆที่มันประหยัดกับบางงานกับโมเดลที่ไม่ดูซับซ้อนและใช้เวลาทำไม่นาน หันซ้ายหันขวาก็มาจบที่ C# หลังจากดูแล้วก็มี library ที่พอช่วยงานได้อย่าง math.net แถม UI ก็ทำง่ายเพียงลากแปะเท่านั้น เลยทดลองใช้ดู ผลปรากฏว่าเป็นที่น่าพอใจ  ถึงจะดูยุ่งยากในส่วน UI แต่ก็รู้สึกว่าไม่ได้เลวร้ายอะไร ส่งงานก็ง่ายแถมก็ไม่ต้องติดตั้งอะไรให้ดูวุ่นวาย

ปัญหา cuTexRefSetAddress2D_v3

พอดีว่าลงWindows 7 64bit กับ Mathematica 11.1.1 ใหม่ แล้วเจอปัญหา  ตามภาพด้านล่างตอนใช้ CUDALink พอเช็คดูเวอร์ชั่นของ nvidia driver ที่ใช้กับการ์ดจอ (Quadro 2000)ด้วยคำสั่ง CUDADriverVersion พบว่าเป็นรุ่นเก่ามากคือ27x.x  เลยทำการ update เป็นตัวใหม่กว่าคือ 377.55จากนั้นก็ลองใช้ QUDAQ ใหม่เช็คดูปรากฎว่าไม่มีปัญหาแล้วสามาถใช้งานได้ตามปกติ

ปัญหาเข็มของบึฟฟองBuffon’s Needle

เห็นมีคนพูดถึงปัญหานี้ในกลุ่มผู้ใช้ R ของไทยเราเลยอยากทำบ้างแต่ใช้ภาษา Wolfram แทน เพราะจะเขียนได้สั้นมาก โปรแกรมที่เขียนนี้จะวาดเส้นแนวนอนที่มีระยะห่างตามที่กำหนดและก็สุ่มวางเข็มตามขนาดและจำนวนที่ต้องการลงไปแล้วนับดูว่าที่กี่เล่มที่ทับเส้น สำหรับวาดเส้น สำหรับ simulation ทดลองเล่นดู  

ตัวอย่างการใช้ InputField ใน Manipulate

ตัวอย่างการใช้ InputField ใน Manipulate ของ Mathematica ครับ ใน Manipulate นอกเหนือจาก พวก Slider และ Menu ต่าง ๆแล้ว เราสามารถที่จะใช้ InputField เพื่อรับค่าจาก users ได้โดยตรงครับ รายละเอียดการใช้งานต่างๆ สามารถดูเพิ่มเติมได้ที่ http://reference.wolfram.com/language/ref/InputField.html ครับ    

โปรแกรม Draw เขียนด้วยภาษา Wolfram

เจ๋งมาก Wolfram Research ปล่อย source code บางโปรแกรมที่ใช้กันภายในบริษัท https://github.com/WolframResearch/ ที่ผมสนใจเป็นพิเศษคือ Draw ครับ เป็นโปรแกรมที่ถูกเขียนขึ้นสำหรับวาดไดอะแกรมหรือกราฟต่างๆใน Mathematica โดย Tim Shedelbower ลองเล่นดูครับ โหลดไฟล์ draw.nb จาก github ได้เลย แล้วก็เปิดจาก Mathematica จากนั้นก็เริ่มโปรแกรมได้โดย ไปที่ Evaluation->Evaluate Notebook ไม่น่าเชื่อว่าทั้งหมดนี้เขียนจากภาษา Wolfram

โมเดลหมอกควัน

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

beeswarm plot ใน Mathematica/R

ผมถูกถามว่า strain ขอเชื้อมาลาเรียจากข้อมูลที่ใช้ในโมเดลที่ทำอยู่มีอิทธิพลอย่างไรกับการเพิ่มขึ้นหรือลดลงของเชื้อที่นับได้ในคนไข้  คำถามนี้ทำให้คิดอยู่นานทีเดียวว่าจะตอบหรือแสดงกราฟอย่างไรดี เนื่องจากว่ากราฟของพารามิเตอร์ตัวหนึ่งในโมเดลแสดงการกระจายตัวเป็นแบบ bimodal ซึ่งมันอาจเกี่ยวข้องกับ strain ของเชื้อหรือเปล่าที่ทำให้มีการกระจายอย่างนั้น เพื่อที่จะตอบคำถามนี้ผมได้plot กราฟที่เรียกว่า bee swarm ครับ มันเป็นกราฟที่คล้ายๆ กับ scatter plot กับ density plot รวมกัน โดยที่เราสามารถเห็นได้ว่าจุดข้อมูลของเรานั้นมีส่วนช่วยในการสร้างกราฟอย่างไร มีการกระจายตัวอย่างไร ตามนี้ครับ ซึ่งจากกราฟผมสามารถเห็นได้ว่าข้อมูล strain จากเชื้อมาลาเรียชนิดต่างๆไม่ได้กระจุกตัวอยู่ที่ได้ที่หนึ่งนั่นก็หมายความว่าโมเดลทำนายว่า strain ไม่ได้มีอิทธิพลเกี่ยวข้องกับการการเพิ่มขึ้นหรือลดลงของเชื้อที่นับได้ในคนไข้กลุ่มนี้ กราฟลักษณะนี้สามารถ plot ได้ในโปรแกรม R โดยอาศัย library ที่ชื่อ beeswarm ครับ หรือถ้าอยากจะทำใน Mathematica สามารถดูได้ที่นี่ครับ http://mathematica.stackexchange.com/questions/42585/implementing-a-beeswarm-plot-in-mathematica    

Mathematica : equivalent point

มีคนโพสท์ถามที่พันทิป http://pantip.com/topic/34236148 ผมได้ลองใช้ Mathematica เขียนแบบง่ายๆได้ตามนี้ครับ โดย code ที่เขียนก็ประมาณนี้ครับ