Matlab-functions

提供:Dev Guides
移動先:案内検索

MATLAB-関数

関数は、一緒にタスクを実行するステートメントのグループです。 MATLABでは、関数は個別のファイルで定義されます。 ファイルと関数の名前は同じでなければなりません。

関数は、*ベースワークスペース*と呼ばれるMATLABコマンドプロンプトでアクセスするワークスペースとは別に、*ローカルワークスペース*とも呼ばれる独自のワークスペース内の変数を操作します。

関数は複数の入力引数を受け入れることができ、複数の出力引数を返す場合があります。

関数ステートメントの構文は-

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

_mymax_という名前の次の関数は、_mymax.m_という名前のファイルに書き込む必要があります。 引数として5つの数値を取り、その数値の最大値を返します。

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_関数には5つの入力引数と1つの出力引数があります。

関数ステートメントの直後にあるコメント行は、ヘルプテキストを提供します。 あなたが入力すると、これらの行が印刷されます-

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という名前の匿名関数を作成します。これは、入力として2つの数値を取り、最初の数値を2番目の数値の累乗で返します。

スクリプトファイルを作成し、その中に次のコードを入力します-

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

プライマリおよびサブ機能

無名関数以外の関数は、ファイル内で定義する必要があります。 各関数ファイルには、最初に表示される必須のプライマリ関数と、プライマリ関数の後に続き使用される任意の数のオプションのサブ関数が含まれています。

プライマリ関数は、それらを定義するファイルの外部から、コマンドラインまたは他の関数から呼び出すことができますが、サブ関数は、関数ファイルの外部のコマンドラインまたはその他の関数から呼び出すことはできません。

サブ関数は、それらを定義する関数ファイル内のプライマリ関数と他のサブ関数にのみ表示されます。

二次方程式の根を計算する二次関数を作成してみましょう。 この関数は、2次係数、線形係数、および定数項の3つの入力を取ります。 根を返します。

関数ファイルquadratic.mには、判別関数を計算するプライマリ関数_quadratic_とサブ関数_disc_が含まれます。

関数ファイル_quadratic.m_を作成し、その中に次のコードを入力します-

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

前の例の関数quadratic_を書き換えましょう。ただし、今回はディスク関数はネストされた関数になります。

関数ファイル_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

プライベート機能

プライベート関数は、他の関数の限られたグループにのみ表示される主要な関数です。 関数の実装を公開したくない場合は、プライベート関数として作成できます。

プライベート関数は、特別な名前 private で*サブフォルダー*にあります。

それらは、親フォルダー内の関数にのみ表示されます。

_quadratic_関数を書き直しましょう。 ただし、今回は、判別式を計算する_disc_関数はプライベート関数になります。

作業ディレクトリにprivateという名前のサブフォルダーを作成します。 次の関数ファイル_disc.m_を保存します-

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

グローバル変数

グローバル変数は複数の関数で共有できます。 このためには、すべての関数で変数をグローバルとして宣言する必要があります。

ベースワークスペースからその変数にアクセスする場合は、コマンドラインで変数を宣言します。

グローバル宣言は、変数が関数で実際に使用される前に発生する必要があります。 グローバル変数を他の変数と区別するために、グローバル変数の名前に大文字を使用することをお勧めします。

私たちは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