はじめに

MATLABは強力な数値計算・可視化環境であり、スクリプト関数を使い分けることで、柔軟なプログラミングが行えます。本記事では、以下の内容に焦点を当てて解説します。

  1. スクリプト
  2. 関数
  3. 関数のタイプ
  4. グローバル変数
  5. コマンドと関数構文

これらを理解すると、MATLABのプログラム構成やスコープ管理、実行方法などが明確になり、より効率的なコーディングが可能になります。

キーワード:MATLAB, スクリプトと関数, スクリプト, 関数, 関数のタイプ, グローバル変数, コマンド構文, 関数構文

1. スクリプト (Script)

1.1 スクリプトとは

スクリプトは、連続したMATLABコマンドやステートメントを順番に実行するためのファイルで、一般的に拡張子「.m」を持ちます。スクリプトには引数や戻り値がなく、主に以下のような特徴があります。

  • コマンドを順次実行する
  • ワークスペース(ベースワークスペース)をそのまま利用する
  • 変数のスコープが広いため、簡単なデータ解析・実験に適している

以下はスクリプトの簡単な例です。

myScript.m
x = 0:0.1:2*pi;
y = sin(x);
plot(x,y);

この例では、myScript.mを実行すると、xy がベースワークスペースに作成され、最後にプロットが表示されます。

図1.スクリプトの実行例

2. 関数 (Function)

2.1 関数とは

MATLABの関数は、特定の入力に対して処理を行い、結果を戻り値として返す独立したプログラムブロックです。スクリプトとの最大の違いはスコープの分離であり、関数が作る変数は関数内のみで有効です。

a = myFunction(3,5)
disp(a)
function out = myFunction(a,b)
% MYFUNCTION 2つの数値を受け取り、和を返す例
    out = a + b;
end

myFunction.mというファイル名で保存し、このファイル内に上記のコードを記述すれば、myFunction(3,5) のように呼び出して 8 を返すことができます。

図2.関数の使用例

2.2 関数のメリット

  • 再利用可能: 同じ処理を何度も使う場合に便利
  • 変数スコープが限定的: 不用意な変数干渉を防げる
  • 保守性向上: 引数と戻り値が明確になり、コードを分割しやすい

3. 関数のタイプ

3.1 ローカル関数とプライベート関数

MATLABでは、一つの.mファイル内に複数の関数を含めることができます。ただし、先頭にあるメイン関数を除き、その他はローカル関数として扱われます。ローカル関数は同じファイル内からのみアクセスできます。
また、「private」という特別なフォルダを作り、そこに格納した関数は、同じ親フォルダ内の関数からのみ呼び出せるプライベート関数となります。

3.2 無名関数 (Anonymous function)

一行で定義できる簡易的な関数で、MATLABでは無名関数と呼ばれます。

f = @(x) x.^2 + 3*x + 2;  % 入力xに対してx^2 + 3x + 2を返す関数ハンドル
result = f(5);           % 5を代入すると34が得られる

短い処理をサクッと書きたいときや、引数として関数を渡す際に便利です。

図3.無名関数の使用例

表1.関数の種類

関数の種類特徴
メイン関数.m ファイル先頭に定義、外部から呼び出せるfunction y = mainFunc(x)
ローカル関数同じファイル内のメイン関数またはローカル関数からのみ呼び出せるfunction z = localFunc(a)
プライベート関数private フォルダ内に置く。同一親フォルダ内の関数からのみ呼び出せる
無名関数1行で定義、関数ハンドルとして使用可能f = @(x) x.^2 + 3*x;

4. グローバル変数

4.1 グローバル変数の定義

MATLABでは、global キーワードを使用することでグローバル変数を宣言できます。グローバル変数は、宣言が行われたすべてのワークスペース(ベース/関数/スクリプトなど)で共有されます。

global GVar;
GVar = 10;
testGlobal()
function testGlobal()
    global GVar;
    disp(GVar);
end

この場合、testGlobal() を呼び出すと関数内でも GVar が参照できます。

図4.グローバル変数の使用例

4.2 注意点

グローバル変数は便利な反面、以下のようなデメリットがあるため、乱用は推奨されません。

  • コードの可読性が下がる
  • 予期しないタイミングで値が変更されるリスク
  • デバッグや保守が難しくなる

5. コマンドと関数構文

5.1 コマンド構文

MATLABでは、関数を呼び出す際に引数の丸括弧やクォーテーションを省略できるコマンド構文が存在します。たとえば、以下の例のように同じ結果が得られます。

% 関数構文
disp('Hello MATLAB');

% コマンド構文
disp Hello MATLAB

ただし、コマンド構文は引数が文字列であるケースを想定した簡易的な書式であり、可読性や誤動作のリスクを考えると、関数構文の使用が推奨されます。

5.2 コマンド構文使用時の注意

スペースや特殊文字が含まれると正しくパースできない場合があります。

% 下記はエラーになる可能性がある
cd C:\Program Files\MATLAB

関数構文 cd('C:\Program Files\MATLAB') の形にするほうが安全です。

まとめ

本記事では、MATLABプログラム構築の基本となるスクリプトと関数に関して、以下のポイントをまとめました。

  1. スクリプト : 変数やワークスペースを共有し、手軽にコードを実行
  2. 関数 : スコープが独立し、再利用性や保守性が高い
  3. 関数のタイプ : ローカル関数、プライベート関数、無名関数など用途に合わせて選択
  4. グローバル変数 : 強力だが乱用は注意
  5. コマンドと関数構文 : 簡易的なコマンド構文より、関数構文が推奨される

これらの知識を活用することで、コードの品質向上やチーム開発の効率化が期待できます。特に関数によるモジュール分割や変数スコープの明確化は、大規模なプロジェクトで大きなメリットとなるでしょう。

さらなる学習リソース

  • MathWorks公式ドキュメント(日本語)
    MATLAB スクリプトと関数の使い方
  • MATLAB Answers (Q&Aフォーラム)
    スクリプトと関数の活用事例やトラブルシューティングが多数掲載
  • YouTube MathWorks公式チャンネル
    関数作成やスクリプト利用のチュートリアル動画が豊富

キーワード再掲:MATLAB, スクリプトと関数, スクリプト, 関数, 関数のタイプ, グローバル変数, コマンド構文, 関数構文