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
例
この例では、2つの数値を入力として受け取り、最初の数値を2番目の数値の累乗した値を返す、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
主関数とサブ関数
無名関数以外の関数は、ファイル内で定義する必要があります。各関数ファイルには、最初に現れる必須の主関数と、その後に続く任意の数のサブ関数が含まれます。サブ関数は主関数によって使用されます。
主関数は、定義しているファイルの外部から呼び出せます(コマンドラインや他の関数から)。しかし、サブ関数は、関数ファイルの外部からコマンドラインや他の関数で呼び出すことはできません。
サブ関数は、それらを定義している関数ファイル内の主関数と他のサブ関数からのみ参照可能です。
例
二次方程式の根を計算する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関数を書き直します。ただし、今度はdisc関数をネスト関数とします。
関数ファイル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
MATLAB
- Stratasys FDM造形を最適化するInsight必須機能10選
- C++関数を実例で徹底解説:基本から応用まで
- C言語の関数マスター:構造、宣言、ベストプラクティス
- Verilog関数のマスター:効率的なRTL設計のために
- MATLAB徹底解説:数値計算環境の決定版
- MATLAB変数の理解:基礎から実例まで徹底解説
- MATLAB必須コマンドリファレンス:効率的な計算のための完全ガイド
- MATLABデータ型完全ガイド:15種類の基本型と変換・判定関数
- MATLAB行列完全マスター:作成・参照・操作・削除の基礎
- MATLABの数値型:型、格納、変換
- Pythonラムダ関数をマスターする:実例とベストプラクティス