MATLAB - Chức năng

Hàm là một nhóm các câu lệnh cùng thực hiện một tác vụ. Trong MATLAB, các hàm được định nghĩa trong các tệp riêng biệt. Tên của tệp và của hàm phải giống nhau.

Các hàm hoạt động trên các biến trong không gian làm việc của riêng chúng, còn được gọi là local workspace, tách biệt với không gian làm việc bạn truy cập tại dấu nhắc lệnh MATLAB được gọi là base workspace.

Các hàm có thể chấp nhận nhiều hơn một đối số đầu vào và có thể trả về nhiều hơn một đối số đầu ra.

Cú pháp của một câu lệnh hàm là:

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

Thí dụ

Hàm sau có tên mymax sẽ được viết trong một tệp có tên mymax.m . Nó nhận năm số làm đối số và trả về tối đa các số.

Tạo một tệp chức năng, có tên là mymax.m và nhập mã sau vào đó:

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

Dòng đầu tiên của một hàm bắt đầu bằng từ khóa function. Nó cung cấp tên của hàm và thứ tự của các đối số. Trong ví dụ của chúng tôi, hàm mymax có năm đối số đầu vào và một đối số đầu ra.

Các dòng chú thích xuất hiện ngay sau câu lệnh hàm cung cấp văn bản trợ giúp. Những dòng này được in khi bạn nhập -

help mymax

MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:

This function calculates the maximum of the
   five numbers given as input

Bạn có thể gọi hàm là -

mymax(34, 78, 89, 23, 11)

MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:

ans = 89

Chức năng ẩn danh

Một hàm ẩn danh giống như một hàm nội tuyến trong các ngôn ngữ lập trình truyền thống, được định nghĩa trong một câu lệnh MATLAB. Nó bao gồm một biểu thức MATLAB duy nhất và bất kỳ số lượng đối số đầu vào và đầu ra nào.

Bạn có thể xác định một hàm ẩn danh ngay tại dòng lệnh MATLAB hoặc trong một hàm hoặc tập lệnh.

Bằng cách này, bạn có thể tạo các hàm đơn giản mà không cần phải tạo tệp cho chúng.

Cú pháp để tạo một hàm ẩn danh từ một biểu thức là

f = @(arglist)expression

Thí dụ

Trong ví dụ này, chúng ta sẽ viết một hàm ẩn danh có tên là power, hàm này sẽ lấy hai số làm đầu vào và trả về số đầu tiên được nâng lên thành lũy thừa của số thứ hai.

Tạo một tệp script và nhập mã sau vào đó:

power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)

Khi bạn chạy tệp, nó sẽ hiển thị -

result1 =  343
result2 =  7
result3 =  1.0000e-10
result4 =  9.5459

Chức năng chính và chức năng phụ

Bất kỳ chức năng nào khác với chức năng ẩn danh phải được xác định trong một tệp. Mỗi tệp chức năng chứa một chức năng chính bắt buộc xuất hiện đầu tiên và bất kỳ số lượng chức năng con tùy chọn nào xuất hiện sau chức năng chính và được nó sử dụng.

Các hàm chính có thể được gọi từ bên ngoài tệp định nghĩa chúng, từ dòng lệnh hoặc từ các hàm khác, nhưng các hàm con không thể được gọi từ dòng lệnh hoặc các hàm khác, bên ngoài tệp hàm.

Các chức năng con chỉ hiển thị đối với chức năng chính và các chức năng con khác trong tệp chức năng định nghĩa chúng.

Thí dụ

Hãy để chúng tôi viết một hàm có tên là bậc hai sẽ tính nghiệm nguyên của một phương trình bậc hai. Hàm sẽ nhận ba đầu vào, đồng hiệu quả bậc hai, đồng hiệu quả tuyến tính và số hạng không đổi. Nó sẽ trả lại gốc rễ.

Tệp hàm quadratic.m sẽ chứa hàm chính bậc haiđĩa hàm phụ , tính toán phân biệt.

Tạo tệp hàm quadratic.m và nhập mã sau vào đó:

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

Bạn có thể gọi hàm trên từ dấu nhắc lệnh dưới dạng:

quadratic(2,4,-4)

MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:

ans = 0.7321

Các hàm lồng nhau

Bạn có thể xác định các hàm trong phần thân của một hàm khác. Chúng được gọi là các hàm lồng nhau. Một hàm lồng nhau chứa bất kỳ hoặc tất cả các thành phần của bất kỳ hàm nào khác.

Các hàm lồng nhau được định nghĩa trong phạm vi của một hàm khác và chúng chia sẻ quyền truy cập vào vùng làm việc của hàm chứa.

Một hàm lồng nhau tuân theo cú pháp sau:

function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end

Thí dụ

Tuy nhiên, chúng ta hãy viết lại hàm bậc hai , từ ví dụ trước, lần này hàm đĩa sẽ là một hàm lồng nhau.

Tạo tệp hàm quadratic2.m và nhập mã sau vào đó:

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

Bạn có thể gọi hàm trên từ dấu nhắc lệnh dưới dạng:

quadratic2(2,4,-4)

MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:

ans =  0.73205

Chức năng riêng tư

Một chức năng riêng tư là một chức năng chính chỉ hiển thị cho một nhóm giới hạn các chức năng khác. Nếu bạn không muốn tiết lộ việc triển khai (các) hàm, bạn có thể tạo chúng dưới dạng các hàm riêng tư.

Các chức năng riêng tư nằm trong subfolders với cái tên đặc biệt private.

Chúng chỉ hiển thị với các chức năng trong thư mục mẹ.

Thí dụ

Chúng ta hãy viết lại hàm số bậc hai . Tuy nhiên, lần này, hàm đĩa tính toán số phân biệt, sẽ là một hàm riêng.

Tạo một thư mục con có tên private trong thư mục làm việc. Lưu trữ tệp chức năng sau disk.m trong đó -

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end      % end of sub-function

Tạo một hàm quadratic3.m trong thư mục làm việc của bạn và nhập mã sau vào đó:

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

Bạn có thể gọi hàm trên từ dấu nhắc lệnh dưới dạng:

quadratic3(2,4,-4)

MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:

ans =  0.73205

Biến toàn cục

Các biến toàn cục có thể được chia sẻ bởi nhiều hơn một hàm. Đối với điều này, bạn cần phải khai báo biến là toàn cục trong tất cả các hàm.

Nếu bạn muốn truy cập biến đó từ không gian làm việc cơ sở, thì hãy khai báo biến đó tại dòng lệnh.

Khai báo toàn cục phải xảy ra trước khi biến thực sự được sử dụng trong một hàm. Một phương pháp hay là sử dụng các chữ cái viết hoa cho tên của các biến toàn cục để phân biệt chúng với các biến khác.

Thí dụ

Hãy để chúng tôi tạo một tệp chức năng có tên là average.m và nhập mã sau vào đó:

function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end

Tạo một tệp script và nhập mã sau vào đó:

global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

av =  35.500