16

私は午後全体を検索してきましたが、そのパスを指定し、そのディレクトリをパスに追加しないことで、matlab で関数を呼び出す解決策が見つかりませんでした。

この質問は、MATLAB のパスにない関数を呼び出すことは可能ですか? とよく似ています。、しかし私の場合、組み込み関数を呼び出したくありませんが、m-ファイルで定義されている通常の関数のみを呼び出します。

ハンドルが解決策になる可能性があると思います(パス上にない関数を参照できるように見えるため)がcd、ディレクトリに -ing せずにハンドルを作成し、そこに作成してcd-ing 戻す方法が見つかりませんでした。関数ハンドル オブジェクトとは何か、パス上にない特定の関数への参照を使用して関数ハンドル オブジェクトを作成する方法を「探索」しようとしても、どこにも行きませんでした。

1) 特定のディレクトリにある m ファイルのハンドル
を作成する方法を知っている。
2) matlab パス上にない関数を呼び出す方法を知っている。

functions(myhandle)編集:ハンドルが参照しているファイルパスを実際に表示できる機能を発見しました。しかし、まだそれを変更する方法はありません...

4

5 に答える 5

9

これは実行可能ですが、少しの解析と への呼び出しが必要evalinです。

(何年も前に!) MATLAB Central File Exchange に関数を追加しました。externalFcn

http://www.mathworks.com/matlabcentral/fileexchange/4361-externalfcn

オフパス関数への呼び出しを管理します。たとえばoffpathFcn、成功メッセージと入力の値を含む構造体を単純に返す関数が呼び出されています。その関数を MATLAB パスに保存すると、次のように呼び出すことができます。

externalfcn('out = C:\MFILES_OffPath\offpathFcn(''this is a test'')');

これは以下を返します:

out = 
    success: 1
    input: 'this is a test'

(私の実装には制限があり、改善可能であることに注意してください。これを機能させるには、出力に等号を含める必要があります。ただし、目的を達成する方法が示されているはずです。)

(MathWorks アプリケーション エンジニア)

于 2012-10-25T16:26:43.053 に答える
2

私はティエリー・ダロンのコードを変更して、私がいつも不快に感じる feval の使用を避けました。これはまだ問題のディレクトリへの cd-ing を回避できないことに注意してください。しかし、まあ、それは舞台裏で行われるので、起こらないふりをします :-) また、Ben Voigt が上で指摘したことにも注意してください: ヘルパー関数 off の呼び出しパスは失敗します。

function [varargout]=funeval(FunctionHandle, FunctionPath, varargin)
% INPUT:
% FunctionHandle: handle to the function to be called; eg @MyFunction
% FunctionPath: the path to that function
% varargin: the arguments to be passed to Myfunction
curdir=cd;
cd(FunctionPath)
[varargout{1:nargout}] = FunctionHandle(varargin{:});
cd(curdir);
end

それを呼び出すと、次のようになります

Output = funeval(@MyFunction, 'c:\SomeDirOffMatlabsPath\', InputArgToMyFunc)
于 2013-11-07T15:39:47.180 に答える
1

このrunコマンドは、任意のディレクトリからスクリプト ファイルを実行できますが、(入力および出力引数を使用して) 関数を呼び出すことはできません。

関数文字列内のディレクトリ情報fevalも許可しません。str2func

そのために独自のラッパーを作成することをお勧めしますstr2func

  • 作業ディレクトリを保存します
  • ディレクトリをスクリプトディレクトリに変更します
  • 関数ハンドルを作成します
  • 元の作業ディレクトリを復元します

ただし、パスにない関数へのハンドルは破損する可能性があることに注意してください。関数は、そのディレクトリ内の他のファイルに格納されているヘルパー コードを呼び出すことができないためです。

于 2012-10-25T16:20:34.883 に答える