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