定义自定义Mupad过程的常规相对搜索路径

时间:2015-08-03 11:33:38

标签: matlab mupad

想象一下,我在路径'C:\projectFolder\ABC\abc\'处有一个mupad-notebook myMupadNotebook.mn 。它调用 MyMupadProcedure.mu 程序,该程序位于'C:\DEF\GHI\'

现在我在'C:\projectFolder\XYZ\xyz\'处有一个Matlab脚本 main.m ,内容为:

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

因此它初始化一个符号引擎并执行Mupad脚本。但是Mupad脚本需要知道在哪里找到该过程。因此,我可以使用 File-> Properties-> Start-up命令在Mupad Notebook中定义一些启动命令(或启动脚本),如下所示:

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 '"']) 

1 个答案:

答案 0 :(得分:3)

可以认为MuPad与Matlab的集成要好得多。

除了符号表达式(setVar)之外,从Matlab到MuPad的变量和字符串的直接转换似乎不可能。如我错了请纠正我。但是,可以使用相对路径在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);

现在'C:\projectFolder\ABC\abc\'中会有一个 parameters.txt 文件。

在MuPad中,环境变量 NOTEBOOKPATH可用于获取 parameters.txt myMupadNotebook.mn 。

然后可以使用

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);