终结篇:如何在MATLAB R2008之后版本中挂载Maple符号引擎

终结篇:如何在MATLAB R2008之后版本中挂载Maple符号引擎

又纠结于Maple 14引擎在MATLAB R2009b中的挂载问题。其实两个软件的兼容性是非常好的,Maple函数无缝耦合到了MATLAB的命令行界面。但是,前一阵子做的CMD文件并没有起到作用。花了几个小时去寻找原因,才发现不起作用是因为我犯了这样的错误:

在最新的Windows XP版本中,也许是因为打了某个安全补丁,现在使用内部命令set已经不能设置系统环境变量(environment variables)——对于任何一个实例,set只能设置运行这条命令所在的某个“命令提示符”窗口,或者某个批处理文件的上下文空间,之中的变量,也即只能改变或设置局部环境变量。但是,对于系统变量而言,set命令无能为力。

系统变量存放在注册表HKLM\SYSTEM中的某个键中,可以通过reg命令来更改,也可以用微软提供的第三方命令:setx来更改。但是,既然到了这一步,都需要修改注册表了,我就在想是不是能够回避这样的问题,不去改系统变量,而是在程序本身再找点可能性。

事实上,Maple已经提供了解决方案,在MATLAB的安装目录中,bin子目录中,存放着两个批处理文件:matlab-sym-maple.bat和matlab-sym-matlab.bat,其功能就是切换到相应的符号引擎,然后启动MATLAB。每个文件只包含了两行命令,对这两行命令的分析使我认识到了这样的原理:

set命令可以改变批处理过程的环境变量,而接下来使用批处理调用matlab.exe,这样以来批处理过程的环境变量就输送给了MATLAB。而MATLAB识别到局部变量MATLAB_SYMBOLIC有定义,就读取变量中的字符串,挂载相应的字符引擎。

进一步尝试与分析发现,如果对这个局部变量不做定义,那么MATLAB会查询是否存在同名的系统全局变量,如果有,则使用之。这也就解释了为什么Maple在安装时会询问用户,要将哪一个字符引擎作为默认的。于是,如果用户在启动MATLAB时没有定义局部变量,那么系统变量起到作用;如果定义局部变量,则系统变量被覆盖,字符引擎可以强制改变为用户所指定。

了解了局部变量和全局变量如何影响MATLAB加载字符引擎的机制,就可以制定以下方案:

1、选择希望加载的字符引擎,这一部分由用户在启动MATLAB之前就决定好。

2、设置局部变量,将字符引擎设置为所需。

3、启动MATLAB。

在实际操作中还发现,如果使用批处理调用matlab.exe,则默认的工作目录(是“Current Folder”选项卡中所显示的默认目录,而不是MATLAB查询命令文件时所查找的目录)是Windows用户的个人文件夹——这是不希望的结果,我希望Current Folder设置为我的文档下的文件夹“MATLAB”。经过尝试发现,使用chdir(cd)命令不能起到作用;而popd命令可以更改matlab.exe的工作目录。

下面是一段cmd脚本,它将MATLAB的符号引擎设置为Maple 14:

set MATLAB_SYMBOLIC=maple

pushd I:\Document\MATLAB

start /max “” “F:\MATLAB\R2009b\bin\matlab.exe” /DI:\Document\MATLAB

popd

 

参考文章:

Environment Variables in Windows XP – http://vlaurie.com/computers2/Articles/environment.htm

SET – http://ss64.com/nt/set.html

How to Clear Environment Variables Using Setx.exe – http://support.microsoft.com/kb/195050/en-us

Thread Subject: Problems with Symbolic Math Toolbox – http://www.mathworks.com/matlabcentral/newsreader/view_thread/263270

symengine – http://www.mathworks.com/help/toolbox/symbolic/symengine.html

 

– END –

Advertisements
  1. 留下评论

Log in or fill out contact info to leave a reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: