ฟังค์ชันกำหนดเอง (User-defined Functions)

ถ้าฟังค์ชันพร้อมใช้ไม่เหมาะกับปัญหาของเรา เราก็สามารถกำหนดฟังค์ชันเพื่อใช้เอง
เช่น

In[77]:=

f[x_] := x^2

ตอนนี้ f คือฟังค์ชันที่หากำลังสองของ argument  
สิ่งที่สำคัญคือเครื่องหมาย _ และ :=

เครื่องหมาย  _ อ่านว่า blank
ตอนนี้ขอให้จำไว้ว่า argument ทางด้านซ้ายของฟังค์ชันต้องมีเครื่องหมาย _ ต่อท้ายเสมอ  เหตุผลจะมาบอกในตอนต่อๆไป (แต่ถ้าคุณอยากรู้จริงๆลองหาดูใน Help ก็ได้ เกี่ยวกับ pattern matching)

เครื่องหมาย := อ่านว่า delayed-assign หรือ SetDelayed
หมายความว่าการแทนค่า f[x] จะเกิดขึ้นเมื่อ f[x] ถูกใช้ มิใช่ตอนกำหนด f[x] ตอนนี้ให้จำไปก่อนว่าถ้าจะกำหนดฟังค์ชันเองให้ใช้ :=

ชื่อของฟังค์ชันจะขึ้นต้นด้วยตัวเลขไม่ได้ และมี _ ในชื่อไม่ได้

ปกติเราจะตั้งชื่อฟังค์ชันที่เรากำหนดด้วยอักษรตัวเล็กจะได้ไม่สับสนกับฟังค์ชันของ Mathematica เอง

หลังจากที่เรากำหนดฟังค์ชัน f เราก็สามารถใช้มันในการคำนวนต่างๆได้

In[78]:=

f[a]

Out[78]=

a^2

In[79]:=

f[2]

Out[79]=

4

In[80]:=

Sum[f[k], {k, 1, N}]

Out[80]=

1/6 N (1 + N) (1 + 2 N)

In[81]:=

Integrate[f[x], x]

Out[81]=

x^3/3

In[82]:=

Integrate[f[x], {x, α, β}]

Out[82]=

1/3 (-α^3 + β^3)

In[83]:=

Plot[f[x], {x, -2, 2}]

[Graphics:../HTMLFiles/chapter2_164.gif]

Out[83]=

⁃Graphics⁃

In[84]:=

Plot[{f[x], Exp[-f[x]]}, {x, -2, 2}]

[Graphics:../HTMLFiles/chapter2_167.gif]

Out[84]=

⁃Graphics⁃

ฟังค์ชันอาจมี argument มากกว่า หนึ่งตัวเช่น

In[85]:=

f2[x_, y_, d_] := (x^2 + y^2)/(2d^2)

In[86]:=

f2[x, y, d]

Out[86]=

(x^2 + y^2)/(2 d^2)

In[87]:=

f2[0, 0, 1]

Out[87]=

0

In[88]:=

Plot3D[Exp[-f2[x, y, 1]], {x, -2, 2}, {y, -2, 2}]

[Graphics:../HTMLFiles/chapter2_175.gif]

Out[88]=

⁃SurfaceGraphics⁃

อีกตัวอย่างที่ใช้คำนวณ integral ของ ฟังค์ชันจาก xmin ถึง xmax

In[89]:=

myInt[f_, xmin_, xmax_] := Integrate[f[x], {x, xmin, xmax}]

In[90]:=

myInt[Sin, 0, L]

Out[90]=

1 - Cos[L]

In[91]:=

myInt[f, 0, a]

Out[91]=

a^3/3

In[92]:=

myInt[g, a, b]

Out[92]=

∫_a^bg[x] x

In[93]:=

Function[x, x^3][2]

Out[93]=

8

เราสามารถใช้ ? ดูข้อมูลเกี่ยวกับฟังค์ชันที่เรากำหนดเอง

In[94]:=

? f

Global`f

f[x_] := x^2

In[95]:=

? f2

Global`f2

f2[x_, y_, d_] := (x^2 + y^2)/(2 d^2)

In[96]:=

? myInt

Global`myInt

myInt[f_, xmin_, xmax_] := ∫_xmin^xmaxf[x] x

Created by Mathematica  (July 26, 2005)