プロが教えるわが家の防犯対策術!

Matlabの組み込み関数の中には、引数の数や戻り値の数に応じて異なる作用をするものが沢山あると思います。
例えば組み込みのmax関数だと
y=max(x)
ならxの第一次元にについての最大値を返しますし、
[y,i]=max(x)
なら、さらに i に最大値のindexを代入、
一方
x=max(x,y)
ならx,yの各要素について大きい方を取った行列を、
x=max(x,[],d)
ならxのd次元についての最大化をしてくれます。

質問ですが、そういう関数を自分で作ることは可能ですか?

function [z,w]=f(x,y)
という風に関数を定義してしまうと、たとえyを関数中で利用しない場合でも、引数yを指定しなければエラーになってしまいます。同じ関数名でも呼び方に応じて異なった操作をさせることはできないでしょうか?

A 回答 (2件)

MATLABには、関数のオーバーロードという概念はありません。


組込み関数を覗いてみると分かりますが、複数の組合せの引数を許容している関数は、関数側の引数がCell型になっています。

そのような関数の詳細な作成方法は、実際にmsgbox.mなど該当する関数のソースコードを見て確認する方が早いと思います。
MATLABの組込み関数のソースファイルは、インストールフォルダのtoolboxフォルダ以下にあります。
    • good
    • 0
この回答へのお礼

ありがとうございます!早速試してみます。

お礼日時:2009/02/07 13:47

書き忘れましたが、戻り値の方は呼び出し側が全て受け取らなくても問題ありません。


ですので、max関数を例に挙げれば、おそらく関数定義は以下のようになっていると思います。

function [value, index] = max(varargin)
もしくは
function [varargout] = max(varargin)

■ varargin, varargout
http://dl.cybernet.co.jp/matlab/support/manual/r …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!