主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

スクリプトと関数

概要

MATLAB®は,対話形式の計算環境と同様に強力なプログラミング言語を提供します。MATLABコマンドラインから 1 つずつ言語のコマンドを入力するか、MATLAB 関数を実行するように一連のコマンドをファイルにして実行できます。関数ファイルを作成するには、MATLAB エディターまたはその他のテキスト エディターを使用します。その他の MATLAB 関数またはコマンドを呼び出すのと同様に、これらの関数を呼び出します。

プログラムファイルには2種類のものがあります。

  • スクリプト,このファイルは,入力引数を受け入れたり,出力引数を出力したりしません。このファイルは,ワークスペースの中のデータで機能します。

  • 関数,このファイルは,入力引数を受け入れ,出力引数を出力します。内部変数は,関数のローカル変数です。

MATLABのプログラミングをはじめて行う場合は,実行するプログラムファイルを現在のフォルダーに作成してください。ユーザー自身のファイルを多数作成したときには,他のフォルダーや個人のツールボックスにそれらをまとめて,MATLABの検索パスに加えてください。

関数名が重複すると,MATLABは検索パスの中で最初に現れるファイルを実行します。

たとえば,プログラムファイルmyfunction.mの内容を表示するには,次のようにします。

myfunction类型

スクリプト

”“スクリプトを読み込むと,MATLABは,単にファイルの中のコマンドを実行します。スクリプトは,ワークスペースの中に存在するデータを取り扱う、または演算するための新しいデータを作成します。スクリプトは、出力引数を出力しませんが、作成する変数はワークスペースに残り、その後の計算に使われます。加えて、スクリプトは、情节コマンド等を使って,グラフィカル出力を作成することができます。

たとえば,次のMATLABコマンドを含んだmagicrank.mと呼ばれるファイルを作成します。

%研究幻方的秩r = 0 (1,32);对于n = 3:32 r(n) = rank(magic(n));结束酒吧(右)

ステートメント

magicrank

により,MATLABはコマンドを実行し,最初の30個の魔方陣のランクを計算し,結果を棒グラフにプロット表示します。ファイルの実行が終了すると,変数nrがワークスペースに残ります。

関数

関数は,入力引数をもち,出力引数を出力するファイルです。ファイルの名前と関数の名前は同じものにしてください。関数M ファイルは、それ自身がもつワークスペースの中で変数を使い、MATLAB コマンド プロンプトでアクセスするワークスペースと区別します。

良い例は,排名を使って示されます。ファイルrank.mは,次のフォルダーにあります。

工具箱/ matlab / matfun

ファイルの内容は,次のコマンドで表示されます。

类型等级

内容は,次のとおりです。

函数r = rank(A,tol) % rank矩阵秩。% RANK(A)提供了矩阵A中线性%独立的行或列的数量的估计。% RANK(A,tol)是A %中大于tol的奇异值的数量。% RANK(A)使用默认的工具= max(size(A)) * norm(A) * eps。s =圣言();if tol = max(size(A)') * max(s) * eps;End r = sum(s > tol);

関数の最初の行は,函数というキーワードで始まります。これは,関数名と引数の順序を与えるものです。この場合,入力引数は2つで,出力引数は1です。

最初の空白行または実行可能行までの数行は,ヘルプテキストを与えるコメント行です。これらの行は,ユーザーが

帮助排名

と入力すると表示されます。ヘルプテキストの最初の行はH1ラインと呼ばれ,lookforコマンドを使用するか,またはフォルダー上の帮助を呼び出すことによりMATLABで表示されるものです。

ファイルの残りは,関数を定義している実行可能なMATLABコードです。最初の行の中の変数r一个托尔と同様に関数の中に導入されている変数年代は,すべて関数の“ローカル“変数です。すなわち,MATLABワークスペースの中の変数とは異なるものです

この例は,MATLAB関数の一つの見方を示すもので,通常の他のプログラミング言語の中には見られません。すなわち,引数の数を可変にできます。関数排名は,種々の方法で使うことができます。

rank(A) r = rank(A) r = rank(A)

多くの関数はこのように機能します。出力引数を設定しなければ,結果はに保存されます。2番目の入力引数が設定されなければ,関数は既定の値を使って計算します。関数の中で,输入参数个数nargoutと名付けられた2つの量は,関数の中で特殊な使い方で,入力引数の数や出力引数の数を出力するものです。関数排名は,输入参数个数を使っていますが,nargoutは使う必要がありません。

関数のタイプ

MATLABは,プログラミングで利用する異なるタイプの関数を提供しています。

無名関数

“無名関数“はシンプルな形式のMATLAB関数であり,単一のMATLABステートメント内で定義されます。これは,単一のMATLAB表現と任意数の入出力引数で構成されます。無名関数は,MATLABコマンドラインから、または関数やスクリプト内で定義できます。これは、ファイルをその都度作らなくても単純な関数を簡単に作成できる方法です。

式から無名関数を作成するための構文は,以下のとおりです。

f = @ (arglist)表达式

下記のステートメントは,数値のニ乗を計算する無名関数を作成します。この関数を呼び出すと,MATLABは渡された値を変数xに割り当て,xを使ってx ^ 2。式を計算します。

@(x) x.^2;

関数sqrを実行するには,次のように入力します。

A = sqr(5

メイン関数とローカル関数

無名でない関数はファイル内で定義しなければなりません。各関数ファイルには,必須の“メイン関数”を先頭とし,それに続いて任意の数の“ローカル関数”が含まれます。メイン関数はローカル関数よりも広い範囲をもちます。つまり,メイン関数はそれを定義するファイルの外(たとえば,MATLABコマンドラインや他のファイル内の関数など)から呼び出せますが,ローカル関数は呼び出せません。ローカル関数は,そのファイル内のメイン関数と他のローカル関数からのみ参照できます。

関数の節に示した関数排名は,メイン関数の例です。

プライベート関数

“プライベート関数”は,メイン関数の1つのタイプです。プライベート関数の固有な特徴は、他の関数の限られたグループからのみ、見ることができる点です。このタイプの関数は、関数へのアクセスを制限する場合、または関数のインプリメンテーションを外部に見えないように選択する場合に有効です。

プライベート関数は特別な名前私人でサブフォルダーに格納されます。これらは親フォルダー内の関数のみが参照できる関数です。たとえば,フォルダーnewmathがMATLAB検索パス上にあると仮定します。私人というnewmathのサブフォルダーには,newmath内にある関数のみから呼び出せる関数を含めることができます。

プライベート関数は親フォルダーの外からは参照できないため,他のフォルダー内で同じ関数名を使用できます。この機能は,他のフォルダーに元の関数を残したまま,特定の関数の固有バージョンを作成する場合に便利です。MATLABでは、標準のファイル関数よりも先にプライベート関数が検索されるため、プライベートではないファイルtest.mより先に,test.mというプライベート関数が検索されます。

入れ子関数

他の関数の本体内で関数を定義できます。これらは,外部関数の“入れ子”と呼ばれます。入れ子関数には、他の関数のいずれか、またはすべてが含まれています。次の例では、関数Bは関数一个の入れ子です。

函数x = A(p1, p2)…函数y = B(p3)…结束……结束

他の関数と同様に,入れ子関数は,関数が用いる変数を格納する独自のワークスペースをもちます。しかし,入れ子になっているすべての関数のワークスペースにもアクセスします。そのため,たとえば,メイン関数によって割り当てられた値をもつ変数は,メイン関数内の任意のレベルの入れ子関数によって読み込み,または上書きすることができます。同様に,入れ子関数内に代入された変数は,その関数を含む任意の関数によって読み込み,または上書きすることができます。

グローバル変数

1つの変数の単一コピーを共有し,複数の関数で使いたい場合,変数をすべての関数の中で単に全球として宣言してください。変数をアクセスするために基本ワークスペースを使う場合,コマンドラインで同じこと(グローバル宣言)をします。グローバル宣言は,変数が実際に関数の中で使われる前に行わなければなりません。絶対に必要ではありませんが,大文字を使うことにより,他の変数と区別できて便利です。たとえば,falling.mというファイルに新しい関数を作成します。

函数h =下降(t)全局重力h = 1/2*重力*t.^2;

そして,対話的にステートメントを入力します。

全球重力= 32;y =下跌((0:.1:5)');

2つのグローバルステートメントが,関数の内部で利用可能なコマンドプロンプトで重力に値を割り当てます。いくつかのファイルを編集しないで,対話的に重力を変更して,新しい解を得ることもできます。

コマンドと関数構文

かっこや引用符を使わずに文字引数を受け取るMATLAB関数を作成することができます。MATLABはつまり,

Foo a b c

として

foo (a, b, c)

ただし,引用符なしのコマンド形式を使う場合,MATLABは出力引数を返せません。たとえば,次の例を考えてみましょう。

传说苹果橘子

は,苹果橙子をラベルとして使用してプロットに凡例を作成します。传说コマンドにより出力引数を出力させたい場合は,引用符付きの形式を使う必要があります。

[legh, objh] =传奇(“苹果”、“橘子”);

さらに,引数のいずれかが文字ベクトルでない場合も引用符付きの形式を使用しなければなりません。

注意

引用符なしのコマンド構文は便利である一方,MATLABがエラーを出す原因とならないながらも,不適切に使用される場合があります。

コード内での文字引数の作成

引用符付きの関数形式を使って,コード内で文字引数を作成することができます。次の例は,複数のデータファイル,August1.datAugust2.dat等を処理します。ファイル名を作成するために整数を文字に変換する関数int2strを使っています。

for d = 1:31 s = ['August' int2str(d)“.dat”);load(s) %处理第d个文件端内容的代码