English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MATLAB 関数

関数はタスクを実行する一連の文のセットです。MATLABでは、関数は独立したファイルで定義されます。ファイル名と関数名は同じにするべきです。

関数は自分自身の作業空間(ローカルワークスペースと呼ばれる)で変数を操作し、MATLABコマンドプロンプトでアクセスする作業空間(基本ワークスペースと呼ばれる)とは異なります。

関数は複数の入力パラメータを受け取り、複数の出力パラメータを返すことができます。

関数の文の構文は-

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

オンラインサンプル

以下のmymaxの関数は、mymax.mのファイルに。これは五つの数字をパラメータとして受け取り、最大の数字を返します。

関数ファイルを作成し、その名前をmymax.mにし、以下のコードを入力します。-

function max = mymax(n1, n2, n3, n4, n5)
%この関数は以下の計算を行います
%入力五つの数字
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関数には、五つの入力パラメータと一つの出力パラメータがあります。

関数の文の次のコメント行は、ヘルプテキストを提供します。以下の内容を入力すると、これらの行が表示されます:

help mymax

MATLABは上記の文を実行し、以下の結果を返します-

この関数は、以下の
   five numbers given as input

関数を呼び出す方法は-

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

MATLABは上記の文を実行し、以下の結果を返します-

ans = 89

匿名関数

匿名関数は、従来のプログラミング言語のインライン関数のように、単一のMATLAB文で定義されます。MATLABの表現と、任意の入力および出力パラメータが含まれます。

MATLABのコマンドラインや関数やスクリプト内で匿名関数を定義できます。

このようにして、ファイルを作成せずに簡単な機能を作成できます。

匿名関数を作成するための表現の構文は

f = @(arglist)expression

この例では、名前がpowerの匿名関数を書き込みます。この関数は、二つの数字を入力として受け取り、最初の数字を第二の数字のべき乗にします。

スクリプトファイルを作成し、以下のコードを入力します-

power = @(x, n) x.^n;
result1 =7, 3)
result2 =49, 0.5)
result3 =10, -10)
result4 =4。5, 1。5)

ファイルを実行中に、それが表示されます-

result1 =  343
result2 =  7
result3 =  1.0000e-10
result4 =  9。5459

メインおよびサブ関数

匿名関数以外のすべての関数はファイル内で定義する必要があります。各関数ファイルには、最初に現れる必須のメイン関数と、メイン関数の後にその使用する任意のオプションのサブ関数が含まれています。

メインファイルの定義外部(コマンドラインや他の関数から)メイン関数を呼び出すことができますが、機能ファイル外部から子関数をコマンドラインや他の関数から呼び出すことはできません。

子函数仅对主函数和定义它们的函数文件中的其他子函数可见。

サブ関数は、メイン関数とそれを定義する関数ファイル内の他のサブ関数に対してのみアクセス可能です

quadraticという名前の関数を作成し、二次方程式の根を計算します。この関数には3つの入力があります:二次係数、一次係数、および常数項。それが根を返します

関数ファイル quadratic.m にはメイン関数 quadratic と判別式を計算するサブ関数 disc が含まれます

function [x1,x2関数ファイル quadratic.m を作成し、その中に以下のコードを入力します
] = quadratic(a,b,c)
% この関数は以下を返します
% それが二次方程式を必要とします3の入力引数です
% x2、xと
% 常数項
% これが根を返します
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % quadraticの終わり
function dis = disc(a,b,c) 
% 函数が判別式を計算
dis = sqrt(b^2 - 4*a*c);
end % サブ関数の終わり-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 % 嵌套関数
d = sqrt(b^2 - 4*a*c);
end % 関数 disc 終了
disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % 関数 quadratic 終了2

上記の関数をコマンドプロンプトから呼び出すには、以下のようにします:

quadratic2(2,4,-4)

MATLABは上記の文を実行し、以下の結果を返します-

ans =  0.73205

私有関数

私有関数は、限られた集合の他の関数に対してのみアクセス可能なメイン関数です。function(s)の実装を公開したくない場合は、私有関数として作成できます

私有関数は、Special Name として Private という名前のサブフォルダーに位置します

それらは親フォルダー内の関数に対してのみアクセス可能です

再書き直しましょうquadratic関数。ただし、今回は disc 関数が判別式を計算する私有関数になります

作業ディレクトリのフォルダー内に private というサブフォルダーを作成し、その中に以下の関数ファイル disc.m を保存します

function dis = disc(a,b,c) 
% 函数が判別式を計算
dis = sqrt(b^2 - 4*a*c);
end % 子関数終了

作業ディレクトリ内に function quadratic という関数を作成します3.m 、その中に以下のコードを入力します-

function [x1,x2] = quadratic3(a,b,c)
% この関数は、以下を返します
% 一元二次方程式です。
これは3の入力引数です
% それらは x2、x と
% 常数項
% それが根を返します
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end      % quadratic 終了3

上記の関数をコマンドプロンプトから呼び出すには、以下のようにします:

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