Tag: คณิตศาสตร์

แบบจำลองการแพร่กระจายเชื้อมาลาเรียในร่างกายผู้ป่วย

แบบจำลองคณิตศาสตร์สำหรับการแพร่กระจายเชื้อมาลาเรียในร่างกายผู้ป่วยนั้นมีผู้เสนออยู่หลายแบบครับแต่แบบที่ผมคิดว่ามันเจ๋งที่สุดก็คือแบบจำลองที่คิดโดย White NJ, Chapman D, Watt G. The effects of multiplication and synchronicity on the vascular distribution of parasites in falciparum malaria. Trans R Soc Trop Med Hyg. 1992;86(6):590-7. PubMed PMID: 1287908. ครับ ตัวอย่างข้างล่างนี้ผมลองเอาแบบจำลองมาเปรียบเทียบกับข้อมูลจริงที่ได้จากผู้ป่วยครับ ข้อมูลจากผู้ป่วยนี้ก็เป็นอะไรที่น่าสนใจครับ เพราะได้มาจากการเฝ้านับเชื้อมาลาเรียจากผู้ป่วยที่เป็นซิฟิลิสครับ ในสมัยก่อนผู้ป่วยที่เป็นซิฟิลิสจะถูกรักษาด้วยการทำให้ติดเชื้อมาลาเรียครับ คนที่คิดวิธีนี้ก็ได้รางวัลโนเบลด้วยนะครับ (https://en.wikipedia.org/wiki/Julius_Wagner-Jauregg) สมัยนี้คงทำไม่ได้แล้ว เสี่ยงตายมากๆ

มาใช้ Mathematica ในการเรียนการสอนกัน ด้วยคำสั่ง Manipulate 3

จากตอนที่แล้ว เดี๋ยวผมจะพูดถึงการใช้งาน slider กับตัวควบคุมอื่นๆ ของ Manipulate ครับ ดูตัวอย่างไปก่อนนะครับ Manipulate[ Module[{anglegraph, maingraph}, anglegraph[th_, showtext_] := Show[ Graphics[{ {Lighter[Gray, 0.5], Circle[{0, 0}, 1]}, {Darker[Green, 0.2], Thick, Circle[{0, 0}, 1, {0, th}]}, {Lighter[Gray, 0.5], Line[{{0, 0}, {Cos[th], Sin[th]}}]}, {Red, Thick, Line[{{Cos[th], 0}, {Cos[th], Sin[th]}}]}, If[showtext, Rotate[Text[ Style[N[Sin[th]], 11], {Cos[th] – 0.15, Sin[th]/2}], 3 Pi/2, {Cos[th] – 0.15, Sin[th]/2}],

ตัวอย่างการใช้ Mathematica แก้ปัญหาแบบง่ายๆ

พอดีมีคนถามว่า จะหาจำนวนนับที่เล็กที่สุด ที่มีคุณสมบัติครบทั้ง 2 ข้อต่อไปนี้ได้ยังไงครับ??? I (1) ขึ้นต้นด้วยเลข 1 (2) เมื่อสลับตัวเลขหลักแรก (ซึ่งก็คือ 1) กับตัวเลขหลักสุดท้าย แล้วจำนวนใหม่มีค่าเป็น 3 เท่าของจำนวนเดิม II (1) ขึ้นต้นด้วยเลข 1 (2) เมื่อย้ายตัวเลขหลักแรก (ซึ่งก็คือ 1) ไปต่อหลังตัวเลขหลักสุดท้าย แล้วจำนวนใหม่มีค่าเป็น 3 เท่าของจำนวนเดิม (http://www.pantip.com/cafe/wahkor/topic/X11362457/X11362457.html) อันนี้เป็นคำสั่ง Mathematica แบบง่ายๆ ที่ลองเขียนเพื่อแก้ปัญหานี้ I swapInt1[tmp_Integer] := FromDigits@ ReplacePart[IntegerDigits[tmp], {1 -> Last@IntegerDigits[tmp], Length@IntegerDigits[tmp] -> First@IntegerDigits[tmp]}] Catch[If[swapInt1@# == 3*#, Throw[#]] & /@ Range[1, 1000000, 1]] คำตอบที่ได้จะเป็น

P. falciparum in a patient during treatment with artesunate

หลังจากที่ดูของคนอื่นมานาน ก็เลยลองทำส่งบ้าง 🙂 มันเป็นโมเดลที่จำลองว่าปริมาณของเชื้อมาลาเรียในร่างกายของคนไข้จะเปลี่ยนไปอย่างไรระหว่างการรักษาด้วยยาอาทีซูเนท http://demonstrations.wolfram.com/AModelOfPlasmodiumFalciparumPopulationDynamicsInAPatientDuri/

มาใช้ Mathematica ในการเรียนการสอนกัน ด้วยคำสั่ง Manipulate 2

ต่อจากครั้งที่แล้วครับ(http://www.sakngoi.com/?p=143) คำสั่ง Manipulate นี้ Mathematica เพิ่มเข้ามาตั้งแต่ version 6 เป็นคำสั่งที่สามารถทำให้เราสามารถดูได้ครับว่ารูปแบบของกราฟหรือค่าจากการคำนวณอะไรบางอย่างที่เราสนใจจะเปลี่ยนไปอย่างไรถ้าหากเราเพิ่มหรือลดค่าที่เราสนใจที่เป็นส่วนหนึ่งในการคำนวณนั้น เช่น อยากรู้ว่ากราฟของ ที่plot ตั้งแต่ เท่ากับ จะเปลี่ยนไปอย่างไรถ้าค่า  ค่อยเพิ่มขึ้นจาก หรือ อย่างปัญหาในฟิสิกส์อยากรู้ว่าจะต้องยิงวัตถุจากจุดยอดของทรงกลมรัศมีขนาดหนึ่งด้วยมุมและอัตราเร็วเท่าใดวัตถุนั้นจึงจะเฉียดผิวของทรงกลมนี้พอดี และปัญหาอื่นๆอีกมากมาย สามารถดูตัวอย่างได้ที่ http://demonstrations.wolfram.com/ รูปแบบของคำสั่ง Manipulate ก็ตามที่แสดงด้านล่างนี้ครับ รูปแบบคำสั่งนี้เป็นแบบ “จัดเต็ม”ครับ 🙂  แต่เราก็สามารถใส่แบบสั้นๆได้ครับ เช่นในการกำหนดตัวแปร อยากจะใส่เพียง {ตัวแปร,ค่าน้อยสุด,ค่ามากสุด} ก็ได้ครับ step ก็เป็นค่าอย่างเช่นจาก 1 ถึง 10 เราจะให้ค่าค่อยเพิ่มขึ้นครั้งล่ะเท่าไหร่จาก 1 ไปจนถึง 10  ส่วน options ก็จะเกี่ยวข้องกับการแสดงผลที่เกี่ยวข้องกับ slider หรือตัวควบคุมอื่นๆ เช่น Animator, Checkbox, ColorSetter, ColorSlider, InputField, Manipulator, PopupMenu, RadioButton หรือ RadioButtonBar,