2

ある m ファイルにアルゴリズムを記述し、別の .m ファイルにいくつかの関数を作成しました。メインのアルゴリズム .m ファイルとは別のファイルで作成したこれらのいくつかの関数を呼び出したいと思います。ある関数をファイルから別の関数に呼び出す方法は知っていますが、ここでは、メール アルゴリズム ファイルとは別のファイルで作成したさまざまな関数を呼び出したいと考えています。私はここで検索しましたが、私が得た答えは役に立たず、私が欲しいものについて話していません.

ここに私が話していることの小さな実例があります:

main algo file
N = 30;
x = -10 + 20rand(1,N)
for j = 1 to N
  c = f1(x) % here i need to call different functions from another file
end

複数の変数を持つ関数 - これは別のファイルです

Function perform

%% Function F1
f = f1(x)
 statements
end

%% Function F2
f = f2(x)
 statements
end

%% Function F3
f = f3(x)
 statements
end

%% Function F4
f = f4(x)
 statements
end

%% Function F5
f = f5(x)
 statements
end

end Perform

メインの algo .m ファイルで F1 から F4 を呼び出したいと思います。どうやってこれを行うことができますか。また、メインの algo .m ファイルを実行するたびに、F1 から F4 の関数のどれを呼び出したいかを選択するように求められ、入力してダイアログ ボックスに関数を指定すると、その特定の関数が呼び出されます。関数。これを行う方法について何か考えはありますか?

4

3 に答える 3

3

MATLABのドキュメントには次のように記載されています。

MATLAB® プログラム ファイルには、複数の関数のコードを含めることができます。ファイル内の最初の関数 (メイン関数) は、他のファイル内の関数から見えるか、コマンド ラインから呼び出すことができます。ファイル内の追加関数は、ローカル関数と呼ばれます。ローカル関数は、同じファイル内の他の関数からのみ見えます。

したがって、実際には、この m ファイルの外部で呼び出すことができる唯一の関数は最初の関数 (perform例にある) ですが、関数f1...はlocalf5であるため、m ファイル内でのみ呼び出すことができます。

私の提案は、推奨される方法に固執し、各関数を独自の m ファイルで定義することです。ただし、最終的に多数の m ファイルを作成したくなく、すべての関数を同じ m ファイルに実装することを主張する場合は、次のように main 関数に追加の引数を渡すことでこれを回避できます。

function f = perform(func, x);
    switch(func)
        case 'f1'
            f = f1(x);
        case 'f2'
            f = f2(x);
        case 'f3'
            f = f3(x);
        case 'f4'
            f = f4(x);
        case 'f5'
            f = f5(x);
        otherwise
            error(['Unknown function ', func]);
    end

%// ... next follows the implementation of f1 through f5

次に、適切な関数名文字列を使用して呼び出してf1、各関数を呼び出します。例えば:f5perform

perform('f1', some_variable)
于 2013-07-03T10:55:05.043 に答える
1

もう 1 つの回避策は、元の関数に対応するclasswithstaticメソッドを作成することです。.m次に、すべてが 1 つのクラス ファイルにバンドルされます。

于 2013-07-03T15:06:00.037 に答える