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 つの出力引数があります。
function ステートメントの直後にあるコメント行は、ヘルプ テキストを提供します。入力すると、これらの行が出力されます −
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 ステートメント内で定義されます。これは、1 つの 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
プライマリおよびサブ機能
無名関数以外の関数は、ファイル内で定義する必要があります。各関数ファイルには、最初に表示される必須のプライマリ関数と、プライマリ関数の後に続き、それによって使用される任意の数のオプションのサブ関数が含まれています。
プライマリ関数は、それらを定義するファイルの外部 (コマンド ラインまたは他の関数) から呼び出すことができますが、サブ関数は、関数ファイルの外部のコマンド ラインまたは他の関数から呼び出すことはできません。
サブ関数は、それらを定義する関数ファイル内のプライマリ関数とその他のサブ関数にのみ表示されます。
例
二次方程式の根を計算する quadratic という名前の関数を書きましょう。この関数は、二次係数、線形係数、および定数項の 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 で .
親フォルダー内の関数にのみ表示されます。
例
二次方程式を書き直してみましょう 関数。ただし、今回はディスク 判別式を計算する関数は、プライベート関数になります。
作業ディレクトリに 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
MATLAB