3

path に mupad-notebook myMupadNotebook.mnがあるとします'C:\projectFolder\ABC\abc\'。にあるプロシージャMyMupadProcedure.muを呼び出します'C:\DEF\GHI\'

これで、コンテンツを含む Matlab スクリプトmain.mができました。'C:\projectFolder\XYZ\xyz\'

nb = mupad('C:\projectFolder\ABC\abc\myMupadNotebook.mn');
status = evaluateMuPADNotebook(nb);

そのため、シンボリック エンジンを初期化し、Mupad スクリプトを実行します。ただし、Mupad スクリプトでは、プロシージャを見つける場所を知る必要があります。したがって、Mupad ノートブック内で、次のように [ファイル] -> [プロパティ] -> [起動コマンド] を使用して、いくつかの起動コマンド (または起動スクリプト) を定義できます。

READPATH := "C:\DEF\GHI\";
read("MyMupadProcedure.mu");

しかし、今は別のマシンで作業しており、フォルダーの絶対パスは異なりますが、相対パスは同じです。すべてのマシンでスクリプトを使用するにはどうすればよいですか?

Matlab では、すべてのマシンでSearchPathを設定するだけで動作します。Mupad に相当するものはありますか?


または、Matlab から Mupad に文字列を渡すことができれば、すでに役に立ちます。ノートブックのヘッダーに起動コマンドを記述し、Matlab 関数を使用して相対パスを決定するだけです。ただし、次の行のすべての組み合わせは機能しません。

syms X
X = 'hello'
setVar(nb,'X',X)
evalin(nb,['X := "' X '"']) 
4

1 に答える 1

3

MuPad の Matlab への統合は、はるかに優れていると考えることができます。

シンボリック式 ( ) を除いて、Matlab から MuPad への変数および文字列からの直接転送はsetVar可能ではないようです。私が間違っている場合は修正してください。ただし、相対パスを使用して Matlab にファイルを書き込み、相対パスを使用して MuPad にファイルを読み取ることは可能です。

このようにして、MuPad プロシージャが保存されているパスを、MuPad Notebook が実行される同じフォルダーにあるテキストファイルに書き込むことができます。

%// determined with pwd, cd and string manipulation etc
MuPadNotebookPath = 'C:\projectFolder\ABC\abc\' 
MuPadProceduresPath = 'C:\DEF\GHI\';    

fid = fopen( [MuPadNotebookPath  '\parameters.txt'], 'w'); 
fprintf(fid,'%s\r\n%', strrep(MuPadProceduresPath ,'\','\\')); %'
fclose(fid);

にファイルparameters.txtが作成され'C:\projectFolder\ABC\abc\'ます。

MuPad では、環境変数を使用して、 parameters.txtmyMupadNotebook.mnNOTEBOOKPATHの両方のディレクトリを取得できます。

ftextinput'C:\DEF\GHI\'その後、テキスト ファイルからパスを読み取るために使用できます。やっとREADPATH設定できるようになりました。

cfgfile := NOTEBOOKPATH . "parameters.txt":
rpath = ftextinput(cfgfile, rpath):
READPATH := rpath:
read("MyMupadProcedure.mu");

合計すると次のようになります。

nb = mupad(MuPadNotebookPath);
fid = fopen( [MuPadNotebookPath  '\parameters.txt'], 'w'); 
fprintf(fid,'%s\r\n%', strrep(MuPadProceduresPath ,'\','\\')); %'
fclose(fid);
status = evaluateMuPADNotebook(nb);
于 2015-08-03T13:59:19.153 に答える