โมดูล (Module)
บางครั้งเวลาเรากำหนดฟังค์ชันเราต้องใช้ตัวแปรชั่วคราวในระหว่างการคำนวณ และมีขั้นตอนในการคำนวณหลายขั้นตอน วิธีที่เราควรใช้คือ Module[ ]
Module เหมือนกับการ scope ตัวแปร ที่ถูกกำหนด (defined) ให้เห็นเฉพาะใน Module เท่านั้น เนื่องจาก Mathematica จะให้ ตัวแปรเป็น global และเห็นได้ทุกแห่งถ้าเราไม่บอกให้ Mathematica รู้ว่าตัวแปรควรจะเป็น local variables ด้วยคำสั่ง Module[{localvar1, localvar2, ...}, expression1; expression2; expression3;...;expressionN]
localvar1, localvar2, ... คือตัวแปรชั่วคราว
expression1; expression2;...;expressionN คือชุดคำสั่งที่มาทำงานต่อๆกัน เครื่องหมาย ";" จำเป็นจะต้องมีหลังทุกคำสั่งภายใน Module ยกเว้นคำสั่งสุดท้าย ซึ่งจะมีหรือไม่ก็ได้ โดยปกติคำสั่งสุดท้ายจะไม่มี ";" ต่อท้าย ซึ่งแปลว่าผลลัพท์ของคำสั่งสุดท้ายคือค่าที่ฟังค์ชันจะส่งกลับไปให้ผู้เรียกใช้ฟังค์ชันนั้นๆ ถ้าคำสั่งสุดท้ายมี ";" ต่อท้าย ฟังค์ชันก็จะไม่ส่งค่าใดๆกลับ
คัวอย่างแรก เราจะสร้าง ฟังค์ชัน myCircleArea[ ] ที่จะรับค่า diameter (เส้นผ่าศูนย์กลาง) แล้วคำนวณ พื้นที่ออกมา
ระหว่างการคำนวณ myCircleArea จะใช้ตัวแปรชั่วคราวชื่อ radius (รัศมี) และ area (พื้นที่)
In[97]:=
ส่วน {radius, area} ใน myCircleArea[diameter_]:=Module[{radius,area},... คือการประกาศว่าฟังค์ชัน myCircleArea จะใช้ตัวแปรชั่วคราว สองตัวคือ radius และ area
ส่วน radius = diameter/2; คือการกำหนดค่าของ radius เครื่องหมาย ";" จำเป็นจะต้องมีหลังทุกคำสั่งภายใน Module ยกเว้นคำสั่งสุดท้าย ซึ่งจะมีหรือไม่ก็ได้ โดยปกติคำสั่งสุดท้ายจะไม่มี ";" ต่อท้าย ซึ่งแปลว่าผลลัพท์ของคำสั่งสุดท้ายคือค่าที่ฟังค์ชันจะส่งกลับไปให้ผู้เรียกใช้ฟังค์ชันนั้นๆ
ถ้าคำสั่งสุดท้ายมี ";" ต่อท้าย ฟังค์ชันก็จะไม่ส่งค่าใดๆกลับ
ส่วน area = Pi radius^2; คือการกำหนดค่าของพื้นที่ของวงกลม A = π เนื่องจากคำสั่งนี้ไม่ใช่คำสั่งสุดท้าย จึงต้องมี ";"
area ในบรรทัดสุดท้ายเป็นคำสั่งให้ Mathematica คำนวณค่าของตัวแปร area ซึ่งคือค่าที่ฟังค์ชันจะส่งกลับไปให้ผู้เรียกใช้ฟังค์ชัน myCircleArea
ต่อไปเราทดลองใช้ myCircleArea กับวงกลมที่มีเส้นผ่าศูนย์กลาง เท่ากับ 2 และ 20 หน่วย
In[98]:=
Out[98]=
In[99]:=
Out[99]=
ตัวอย่างที่ซับซ้อนขึ้น: ฟังค์ชันที่หาค่าคลาดเคลื่อนจากการทดลอง comError[ ]
ถ้า f = f(x, y, z, ...) และ x, y, z, ... เป็นอิสระต่อกัน (covariance(,) = 0 ถ้า i ≠ j )
+++...
เราจะคำนวณ Δf ด้วย comError[ ]
comError[f,vars,dvars] ใช้ arguments เหล่านี้คือ
f คือฟังค์ชันที่เราสนใจ
vars คือลิสต์ของตัวแปรที่ f ต้องการ
dvars คือลิสต์ของ standard deviations ของตัวแปรที่ f ต้องการ
ในการคำนวณี่หาค่าคลาดเคลื่อนจากการทดลอง เราจะใช้ตัวแปรชั่วคราวที่จะเป็นจำนวนตัวแปรใน vars (เรียกว่า numvars) และ ลิสต์ของ partial derivatives ของ f เทียบกับ vars (เรียกว่า df)
เราจะเขียนคำอธิบายไว้ใน (* ..... *)
จะมีคำสั่ง Length, Print, Apply, Table, D ซึ่งคุณอาจจะไม่เห็นมาก่อน ขอให้ข้ามไป (หรือ กด Help/Master Index หรือ ? ดูเพิ่มเติมเอง) ผมจะมาอธิบายคำสั่งเหล่านี้ในครั้งต่อๆไป
In[100]:=
ทดลองกับฟังค์ชัน f3(x,y,z) = x+y+z
In[101]:=
Out[102]=
In[103]:=
Out[103]=
In[104]:=
Out[104]=
แทนค่า x = 1, y = 0, d= 0.1, Δx=0.01,Δy=0.01,Δd=0.01
In[105]:=
Out[105]=
ถ้าเราไม่ใช้ Module[ ] ตัวแปรอะไรก็ตามที่เรากำหนดระหว่างการคำนวณของเรา ก็จะคงอยู่ให้เห็นหลังจากการคำนวณเสร็จสิ้นไปแล้ว และมักจะไปทับซ้อนตัวแปรที่มีชื่อเหมีอนกัน ทำให้เรามีโอกาสทำผิดพลาดมากขึ้น ถ้ามีเหตุการณ์อย่างนั้นเกิดขึ้น เราจะต้องใช้ Clear[ ] หรือ Remove[ ] ตัวแปรเหล่านั้น
ในตัวอย่างนี้ตัวแปรชั่วคราวมีเพียงสองตัวจึงไม่เห็นผลเสียนัก ผลเสียจะเห็นชัดในการเขียนโปรแกรมที่ซับซ้อนยิ่งขึ้น เวลาที่มีตัวแปรชั่วคราวหลายตัว
วันนี้ขอจบแค่นี้ก่อน หวังว่าคุณจะพบว่า Mathematica นั้นมีประโยชน์ในการศึกษาทางด้านวิทยาศาสตร์นะครับ ตอนผมเป็นนักเรียนอยู่ Mathematica 1.0 พึ่งออกมา และผมก็ใช้ช่วยในการเรียนและทำความเข้าใจในเรื่องต่างๆได้เป็นอย่างดี
ในตอนด่อๆไป ผมจะเน้นรายละเอียดในเรื่องต่างๆมากขึ้น ถ้าใครมีอะไรสนใจเป็นพิเศษ ก็ช่วยบอกไว้ใน http://mpec.sc.mahidol.ac.th/ หรือเมล์ผม ที่ [email protected] นะครับ
Created by Mathematica (July 26, 2005)