MATLAB學習筆記—多型函式

weixin_34019929發表於2015-11-08

多型函式(Polymorphic functions)

什麼是多型?

是指函式可以根據輸入輸出的表示式個數型別作出不同的反應。

舉個例子:zeros(5,6)生成5×6矩陣,zeros(4)生成4×4的矩陣。

MATLAB中許多內建的函式是多型的(sqrt, max, size, plot, etc.)

如何使自己的函式具有多型性?

nargin: 返回實際的輸入引數的個數

nargout: 返回實際要求的輸出引數個數

下面這個函式multable(n,m)生成n×m的數陣,我們來使其具有多型性

function [table summa] = multable(n,m)
if nargin < 2
    m = n;
end
table = (1:n)' * (1:m);
if nargout == 2
    summa = sum(table(:));
end

[table s] = multable(3,4),會輸出3×4的數表和其所有元素和

table = multable(5),只會輸出5×5數表

健壯性(Robustness)

一個健壯的函式,會對各種可能出現錯誤的情況進行處理。上面的函式可以進行如下的優化:

function [table summa] = multable(n,m)

% MULTABLE muliplication table.
% T = MULTABLE(N) return an N-by-N matrix
% containing the multiplication table for
% the integers 1 through N.
% MULTABLE(N,M) returns an N-by-M matrix.
% Both input arguments must be positive integers.
% [T SM] = MULTABEL(...) returns the matrix
% containing the multiplication table in T
% and the sum of all its elements in SM

if nargin < 1    %沒有輸入
    error('must have at least one input argument');
end
if nargin < 2
    m = n;
elseif ~isscalar(m) || m < 1 || m ~= fix(m)  %引數不為正整數
    error('m needs to be a positive integer');
end
if ~isscalar(n) || n < 1 || n ~= fix(n)
    error('n needs to be a positive integer');
end

table = (1:n)' * (1:m);
if nargout == 2
    summa = sum(table(:));
end

%後為註釋,在命令列中輸入help multable,可以得到最上面一大段註釋作為help的內容

持續變數(Persistent variables)

和全域性變數類似,但又有所區別。

function total = accumulate(n)
persitent summa;
if isempty(summa)
    summa = n;
else
    summa = summa + n;
end
total = summa;

也就是說,再次呼叫這個函式的時候,summa的值是接著上次的值的。

重置:clear accumulate

©Fing

相關文章