はじめに

MATLABを使ったプログラミングでは、関数の呼び出しが至るところで登場します。組み込み関数を呼び出すのはもちろん、自作の関数を呼び出して大規模なプログラムを開発することもできます。効率的にMATLABプログラムを構築するために、関数を上手に利用することは不可欠です。

本記事では、MATLABにおける関数の呼び出し方法や注意点について、図や表を交えながらわかりやすく解説していきます。

キーワード例:MATLAB, 関数の呼び出し, 組み込み関数, ユーザー定義関数, 入出力引数

MATLABの関数呼び出しの基本

MATLABで関数を呼び出す際の基本構文は、以下のとおりです。

[output1, output2, ...] = functionName(input1, input2, ...);    % 使い方の例のため実行できません
  • functionName: 呼び出したい関数名
  • input1, input2, …: 関数に渡す入力引数
  • output1, output2, …: 関数から返される出力引数

出力引数が1つだけの場合、以下のように書いてもOKです。

output = functionName(input1, input2);    % 使い方の例のため実行できません

また、出力引数を受け取らずに実行することも可能です。

functionName(input1, input2);    % 使い方の例のため実行できません

組み込み関数の呼び出し

MATLABには多数の組み込み関数が用意されています。たとえば、以下のようなものがあります。

  • 数学系: sin, cos, exp, sqrt, log
  • 統計系: mean, median, std, var
  • 行列演算系: det, inv, eig
  • プロット系: plot, surf, bar

組み込み関数の例

plot関数は、ベクトルや行列のデータを簡単にグラフに描画します。

% --- 数学系の関数 ---
disp('--- 数学系の関数 ---');
sinValue = sin(pi/4); % sin(π/4)
cosValue = cos(pi/4); % cos(π/4)
expValue = exp(1);    % e^1
sqrtValue = sqrt(16); % √16
logValue = log(10);   % 自然対数 ln(10)

disp(['sin(pi/4) = ', num2str(sinValue)]);
disp(['cos(pi/4) = ', num2str(cosValue)]);
disp(['exp(1) = ', num2str(expValue)]);
disp(['sqrt(16) = ', num2str(sqrtValue)]);
disp(['log(10) = ', num2str(logValue)]);

% --- 統計系の関数 ---
disp('--- 統計系の関数 ---');
data = [1, 2, 3, 4, 5];
meanValue = mean(data);    % 平均値
medianValue = median(data);% 中央値
stdValue = std(data);      % 標準偏差
varValue = var(data);      % 分散

disp(['mean([1, 2, 3, 4, 5]) = ', num2str(meanValue)]);
disp(['median([1, 2, 3, 4, 5]) = ', num2str(medianValue)]);
disp(['std([1, 2, 3, 4, 5]) = ', num2str(stdValue)]);
disp(['var([1, 2, 3, 4, 5]) = ', num2str(varValue)]);

% --- 行列演算系の関数 ---
disp('--- 行列演算系の関数 ---');
A = [1, 2; 3, 4]; % 2x2行列
detA = det(A);    % 行列式
invA = inv(A);    % 逆行列
eigA = eig(A);    % 固有値

disp(['det([1, 2; 3, 4]) = ', num2str(detA)]);
disp('inv([1, 2; 3, 4]) = ');
disp(invA);
disp('eig([1, 2; 3, 4]) = ');
disp(eigA);

% --- プロット系の関数 ---
disp('--- プロット系の関数 ---');
x = 0:0.1:2*pi; % x軸データ
y = sin(x);     % y軸データ (sin)

% 1. plot: 線グラフ
figure;
plot(x, y, 'LineWidth', 2);
title('Plot of sin(x)');
xlabel('x');
ylabel('sin(x)');
grid on;

% 2. bar: 棒グラフ
figure;
bar([1, 2, 3, 4, 5], [2, 4, 6, 8, 10]);
title('Bar Graph Example');
xlabel('Category');
ylabel('Value');
grid on;

% 3. surf: サーフェスプロット
[X, Y] = meshgrid(-2:0.2:2, -2:0.2:2);
Z = X.^2 + Y.^2; % 二次関数の例
figure;
surf(X, Y, Z);
title('Surface Plot of Z = X^2 + Y^2');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
grid on;

図1.関数の使用例

ユーザー定義関数の呼び出し

自分で作成した関数(ユーザー定義関数)も同様の方法で呼び出すことができます。ユーザー定義関数は、基本的にfunctionキーワードを使い、.mファイルとして保存します。

ユーザー定義関数の例

% --- sampleFunction.m というファイル ---
function [sumVal, prodVal] = sampleFunction(a, b)
    % 引数 a と b の合計と積を返す関数
    sumVal  = a + b;
    prodVal = a * b;
end

呼び出し側のスクリプトやコマンドウィンドウでは、以下のように実行します。

[x, y] = sampleFunction(3, 5);
disp(x);  % => 8
disp(y);  % => 15

図2.ユーザー定義関数の例

  • 注意点: ファイル名と関数名をそろえる必要がある (sampleFunction.m と function [ … ] = sampleFunction(…))。
  • ワークスペース: 関数内部で使われる変数は、呼び出し元とは別のローカルなワークスペースで管理される。

表1.ユーザー定義関数のルール

ルール説明
ファイル名と関数名の一致例: function result = myFunc(a), ファイル名は myFunc.m が必要
入出力引数[output1, output2] = functionName(input1, input2, …)
ローカルワークスペース関数内で宣言された変数は関数終了と同時に破棄される
関数の先頭に function キーワードが必要スクリプトと区別するため

関数呼び出しのバリエーション

オプション引数の扱い

MATLABの関数によっては、可変長の引数リストを受け取ることがあります。

  • nargin 変数: 関数に渡された引数の数
  • varargout セル配列: 可変長の出力引数
function varargout = sampleFunc(varargin)
    % 受け取った引数に応じて処理を分岐
    if nargin == 1
        varargout{1} = varargin{1}^2;  % 1つの入力 => 2乗して返す
    elseif nargin == 2
        varargout{1} = varargin{1} + varargin{2};  % 2つの入力 => 足し算結果を返す
    else
        varargout{1} = "Unsupported input count";
    end
end

無名関数(匿名関数)の呼び出し

ワンライナーで定義する関数(匿名関数)もあります。

  • 変数に「@(引数) 式」で関数を格納し、後から呼び出せます。

% 無名関数を定義 (xの2乗を計算する)
squareIt = @(x) x.^2; % 無名関数として x を2乗する式を格納

% 無名関数を呼び出して結果を表示
disp('Result of squareIt(5):'); % 計算結果の説明
disp(squareIt(5)); % 無名関数に5を渡して結果を表示 (5^2 = 25)

% sampleFuncを1つの引数で呼び出し
disp('Calling sampleFunc(4):');
sampleFunc(4); % 引数1つ (平方)

% sampleFuncを2つの引数で呼び出し
disp('Calling sampleFunc(3, 5):');
sampleFunc(3, 5); % 引数2つ (和)

function sampleFunc(varargin)   % sampleFuncの定義 (可変長引数を受け取る関数)
    disp(['Number of inputs: ', num2str(nargin)]); % 入力引数の数を表示
    if nargin == 1
        disp(['Squared: ', num2str(varargin{1}^2)]); % 引数が1つの場合は2乗
    elseif nargin == 2
        disp(['Sum: ', num2str(varargin{1} + varargin{2})]); % 引数が2つの場合は合計
    else
        disp('Invalid number of arguments.'); % その他の場合
    end
end

図3.ユーザー定義関数と無名関数

コード説明
  1. 無名関数 squareIt:
    • @(x) x.^2: 入力引数 x の2乗を計算する無名関数を定義。
    • 呼び出し例: squareIt(5)25 が返される。
  2. sampleFunc 関数:
    • 可変長引数 (varargin) を受け取る関数。
    • 引数の個数 (nargin) に応じて動作を切り替え:
      • 1つの引数 → 平方を計算。
      • 2つの引数 → 合計を計算。
      • その他の場合 → エラーメッセージを表示。
  3. 呼び出し例:
    • sampleFunc(4) → 引数が1つなので平方を計算。
    • sampleFunc(3, 5) → 引数が2つなので合計を計算。

関数呼び出しにおけるエラー回避のポイント

  1. ファイル名と関数名を揃える
    • 不一致の場合、MATLABがファイルを正しく認識できません。
  2. 関数が存在するパスを確認する
    • addpath や MATLABパスの設定を行い、呼び出し可能にする。
  3. 引数の数や型をチェックする
    • 必要な引数が足りなかったり、型が合わなかったりするとエラーが発生します。
  4. 名前の衝突に注意
    • MATLABの組み込み関数と同名のファイルを作成すると、意図せず上書きしてしまう恐れがあります。

サンプル: 関数呼び出しフロー

以下のサンプルでは、ユーザー定義関数calcStatsを呼び出し、ベクトルの平均値と標準偏差を計算します。

% データを定義
data = [1, 2, 3, 4, 5]; % 数値データの配列

% calcStats関数を呼び出して平均値と標準偏差を取得
[avg, sd] = calcStats(data);

% 計算結果をコマンドウィンドウに出力
fprintf("平均値: %.2f\n", avg); % 平均値を表示
fprintf("標準偏差: %.2f\n", sd); % 標準偏差を表示

%%
function [avg, sd] = calcStats(data)
    % 平均値を計算
    avg = mean(data); 
    
    % 標準偏差を計算
    sd = std(data); 
end

図4.ユーザー定義関数のサンプル

コード説明
コードの説明
main.m ファイル:

データ配列 data を定義。
関数 calcStats を呼び出し、平均値 (avg) と標準偏差 (sd) を計算。
fprintf を使用して結果をコマンドウィンドウに出力。
calcStats.m ファイル:

平均値 (mean) と標準偏差 (std) を計算する関数を定義。
入力: 配列 data。
出力: 平均値 (avg) と標準偏差 (sd)。

まとめ

MATLABにおける関数の呼び出しは、組み込み関数からユーザー定義関数、無名関数まで多種多様です。自由度が高い一方で、ファイル名の管理やパスの設定など、いくつか注意点も存在します。これらのポイントを押さえておけば、MATLABプログラムの構造が格段に整備しやすくなり、再利用性や保守性が向上します。

  • 組み込み関数: 豊富なライブラリが最初から利用可能
  • ユーザー定義関数: 大規模なプログラムやプロジェクトにも対応できる柔軟性
  • 可変長引数無名関数: より複雑な要件にも対応

検索エンジンで上位表示を狙うには、記事タイトルや見出しに「関数の呼び出し」「MATLAB」といった主要キーワードを適切に含め、記事の内容にも自然な形で盛り込むことが重要です。ぜひ参考に、MATLABの関数呼び出しをマスターしてみてください。

さらなる学習リソース

  • MathWorks公式サイト (日本語)
  • MATLABヘルプドキュメント「Functions”
  • ユーザーフォーラムやYouTubeチュートリアルなど、実例ベースの情報も活用してください。

キーワード再掲: MATLAB, 関数の呼び出し, ユーザー定義関数, 組み込み関数, 無名関数, 入出力引数