MATLAB - ฟังก์ชั่น
ฟังก์ชันคือกลุ่มของคำสั่งที่ทำงานร่วมกัน ใน MATLAB ฟังก์ชันจะถูกกำหนดไว้ในไฟล์แยกกัน ชื่อของไฟล์และฟังก์ชันควรเหมือนกัน
ฟังก์ชันทำงานกับตัวแปรภายในพื้นที่ทำงานของตนเองซึ่งเรียกอีกอย่างว่า local workspaceแยกจากพื้นที่ทำงานที่คุณเข้าถึงที่พรอมต์คำสั่ง MATLAB ซึ่งเรียกว่าไฟล์ base workspace.
ฟังก์ชันสามารถรับอาร์กิวเมนต์อินพุตได้มากกว่าหนึ่งอาร์กิวเมนต์และอาจส่งคืนอาร์กิวเมนต์เอาต์พุตมากกว่าหนึ่ง
ไวยากรณ์ของคำสั่งฟังก์ชันคือ -
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
ตัวอย่าง
ฟังก์ชั่นชื่อดังต่อไปนี้mymaxควรจะเขียนในไฟล์ชื่อmymax.m ใช้ตัวเลขห้าตัวเป็นอาร์กิวเมนต์และส่งกลับค่าสูงสุดของตัวเลข
สร้างไฟล์ฟังก์ชันชื่อ mymax.m แล้วพิมพ์รหัสต่อไปนี้ -
function max = mymax(n1, n2, n3, n4, n5)
%This function calculates the maximum of the
% five numbers given as input
max = n1;
if(n2 > max)
max = n2;
end
if(n3 > max)
max = n3;
end
if(n4 > max)
max = n4;
end
if(n5 > max)
max = n5;
end
บรรทัดแรกของฟังก์ชันเริ่มต้นด้วยคำสำคัญ function. มันให้ชื่อของฟังก์ชันและลำดับของอาร์กิวเมนต์ ในตัวอย่างของเราฟังก์ชันmymaxมีอาร์กิวเมนต์อินพุตห้าอาร์กิวเมนต์และอาร์กิวเมนต์เอาต์พุตหนึ่งรายการ
บรรทัดข้อคิดเห็นที่อยู่หลังคำสั่งฟังก์ชันจะให้ข้อความช่วยเหลือ บรรทัดเหล่านี้จะพิมพ์ออกมาเมื่อคุณพิมพ์ -
help mymax
MATLAB จะดำเนินการตามคำสั่งข้างต้นและส่งกลับผลลัพธ์ต่อไปนี้ -
This function calculates the maximum of the
five numbers given as input
คุณสามารถเรียกใช้ฟังก์ชันเป็น -
mymax(34, 78, 89, 23, 11)
MATLAB จะดำเนินการตามคำสั่งข้างต้นและส่งกลับผลลัพธ์ต่อไปนี้ -
ans = 89
ฟังก์ชันที่ไม่ระบุตัวตน
ฟังก์ชันที่ไม่ระบุชื่อก็เหมือนกับฟังก์ชันอินไลน์ในภาษาโปรแกรมแบบดั้งเดิมซึ่งกำหนดไว้ในคำสั่ง MATLAB เดียว ประกอบด้วยนิพจน์ MATLAB เดียวและอาร์กิวเมนต์อินพุตและเอาต์พุตจำนวนเท่าใดก็ได้
คุณสามารถกำหนดฟังก์ชันแบบไม่ระบุตัวตนได้ที่บรรทัดคำสั่ง MATLAB หรือภายในฟังก์ชันหรือสคริปต์
ด้วยวิธีนี้คุณสามารถสร้างฟังก์ชันง่ายๆโดยไม่ต้องสร้างไฟล์ให้
ไวยากรณ์สำหรับการสร้างฟังก์ชันที่ไม่ระบุชื่อจากนิพจน์คือ
f = @(arglist)expression
ตัวอย่าง
ในตัวอย่างนี้เราจะเขียนฟังก์ชันที่ไม่ระบุตัวตนชื่อ power ซึ่งจะใช้ตัวเลขสองตัวเป็นอินพุตและส่งกลับตัวเลขแรกที่ยกกำลังขึ้นเป็นเลขที่สอง
สร้างไฟล์สคริปต์และพิมพ์รหัสต่อไปนี้ -
power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)
เมื่อคุณเรียกใช้ไฟล์จะแสดง -
result1 = 343
result2 = 7
result3 = 1.0000e-10
result4 = 9.5459
ฟังก์ชันหลักและฟังก์ชันย่อย
ต้องกำหนดฟังก์ชันอื่นที่ไม่ใช่ฟังก์ชันที่ไม่ระบุตัวตนภายในไฟล์ ไฟล์ฟังก์ชันแต่ละไฟล์ประกอบด้วยฟังก์ชันหลักที่จำเป็นซึ่งปรากฏก่อนและฟังก์ชันย่อยที่เป็นทางเลือกจำนวนเท่าใดก็ได้ที่มาหลังจากฟังก์ชันหลักและถูกใช้โดยฟังก์ชันนี้
ฟังก์ชันหลักสามารถเรียกได้จากภายนอกไฟล์ที่กำหนดไม่ว่าจะจากบรรทัดคำสั่งหรือจากฟังก์ชันอื่น ๆ แต่ไม่สามารถเรียกใช้ฟังก์ชันย่อยจากบรรทัดคำสั่งหรือฟังก์ชันอื่นนอกไฟล์ฟังก์ชันได้
ฟังก์ชันย่อยจะมองเห็นได้เฉพาะฟังก์ชันหลักและฟังก์ชันย่อยอื่น ๆ ภายในไฟล์ฟังก์ชันที่กำหนดฟังก์ชันเหล่านั้น
ตัวอย่าง
ให้เราเขียนฟังก์ชันชื่อกำลังสองที่จะคำนวณรากของสมการกำลังสอง ฟังก์ชันจะใช้อินพุตสามตัวคือสัมประสิทธิ์กำลังสอง, สัมประสิทธิ์เชิงเส้นและระยะคงที่ มันจะคืนราก
ไฟล์ฟังก์ชันกำลังสองจะมีฟังก์ชันกำลังสองของฟังก์ชันหลักและดิสก์ฟังก์ชันย่อยซึ่งจะคำนวณการแยกแยะ
สร้างไฟล์ฟังก์ชันกำลังสองและพิมพ์รหัสต่อไปนี้ -
function [x1,x2] = quadratic(a,b,c)
%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic
function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function
คุณสามารถเรียกใช้ฟังก์ชันข้างต้นจากพรอมต์คำสั่งเป็น -
quadratic(2,4,-4)
MATLAB จะดำเนินการตามคำสั่งข้างต้นและส่งกลับผลลัพธ์ต่อไปนี้ -
ans = 0.7321
ฟังก์ชันที่ซ้อนกัน
คุณสามารถกำหนดฟังก์ชันภายในเนื้อหาของฟังก์ชันอื่นได้ สิ่งเหล่านี้เรียกว่าฟังก์ชันซ้อนกัน ฟังก์ชันที่ซ้อนกันประกอบด้วยส่วนประกอบใด ๆ หรือทั้งหมดของฟังก์ชันอื่นใด
ฟังก์ชันที่ซ้อนกันถูกกำหนดไว้ภายในขอบเขตของฟังก์ชันอื่นและจะแชร์การเข้าถึงไปยังพื้นที่ทำงานของฟังก์ชันที่มี
ฟังก์ชันที่ซ้อนกันเป็นไปตามไวยากรณ์ต่อไปนี้ -
function x = A(p1, p2)
...
B(p2)
function y = B(p3)
...
end
...
end
ตัวอย่าง
ให้เราเขียนฟังก์ชันกำลังสองใหม่จากตัวอย่างก่อนหน้าอย่างไรก็ตามคราวนี้ฟังก์ชันดิสก์จะเป็นฟังก์ชันซ้อนกัน
สร้างไฟล์ฟังก์ชันquadratic2.mและพิมพ์รหัสต่อไปนี้ -
function [x1,x2] = quadratic2(a,b,c)
function disc % nested function
d = sqrt(b^2 - 4*a*c);
end % end of function disc
disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of function quadratic2
คุณสามารถเรียกใช้ฟังก์ชันข้างต้นจากพรอมต์คำสั่งเป็น -
quadratic2(2,4,-4)
MATLAB จะดำเนินการตามคำสั่งข้างต้นและส่งกลับผลลัพธ์ต่อไปนี้ -
ans = 0.73205
ฟังก์ชั่นส่วนตัว
ฟังก์ชันส่วนตัวเป็นฟังก์ชันหลักที่มองเห็นได้เฉพาะในกลุ่มฟังก์ชันอื่น ๆ ที่ จำกัด หากคุณไม่ต้องการเปิดเผยการใช้งานฟังก์ชันคุณสามารถสร้างเป็นฟังก์ชันส่วนตัวได้
ฟังก์ชั่นส่วนตัวอยู่ใน subfolders ด้วยชื่อพิเศษ private.
สามารถมองเห็นได้เฉพาะกับฟังก์ชันในโฟลเดอร์หลัก
ตัวอย่าง
ให้เราเขียนฟังก์ชันกำลังสองใหม่ อย่างไรก็ตามคราวนี้ฟังก์ชันของดิสก์ที่คำนวณการแยกแยะจะเป็นฟังก์ชันส่วนตัว
สร้างโฟลเดอร์ย่อยชื่อ private ใน working directory จัดเก็บดิสก์ไฟล์ฟังก์ชันต่อไปนี้ไว้ในนั้น -
function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function
สร้างฟังก์ชัน quadratic3.m ในไดเร็กทอรีการทำงานของคุณและพิมพ์รหัสต่อไปนี้ -
function [x1,x2] = quadratic3(a,b,c)
%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficient of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic3
คุณสามารถเรียกใช้ฟังก์ชันข้างต้นจากพรอมต์คำสั่งเป็น -
quadratic3(2,4,-4)
MATLAB จะดำเนินการตามคำสั่งข้างต้นและส่งกลับผลลัพธ์ต่อไปนี้ -
ans = 0.73205
ตัวแปรส่วนกลาง
ตัวแปรส่วนกลางสามารถใช้ร่วมกันได้มากกว่าหนึ่งฟังก์ชัน สำหรับสิ่งนี้คุณต้องประกาศตัวแปรเป็น global ในทุกฟังก์ชัน
หากคุณต้องการเข้าถึงตัวแปรนั้นจากพื้นที่ทำงานพื้นฐานให้ประกาศตัวแปรที่บรรทัดคำสั่ง
การประกาศโกลบอลจะต้องเกิดขึ้นก่อนที่ตัวแปรจะถูกใช้จริงในฟังก์ชัน เป็นแนวทางปฏิบัติที่ดีในการใช้ตัวพิมพ์ใหญ่สำหรับชื่อของตัวแปรส่วนกลางเพื่อแยกความแตกต่างจากตัวแปรอื่น ๆ
ตัวอย่าง
ให้เราสร้างไฟล์ฟังก์ชันชื่อ average.m และพิมพ์รหัสต่อไปนี้ -
function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end
สร้างไฟล์สคริปต์และพิมพ์รหัสต่อไปนี้ -
global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)
เมื่อคุณเรียกใช้ไฟล์ไฟล์จะแสดงผลลัพธ์ต่อไปนี้ -
av = 35.500