为什么ToMatlab []在Matlab中随机产生无效矩阵(vertcat错误)?(包括bugfix)

eac*_*eau 5 matlab wolfram-mathematica

我一直在使用http://library.wolfram.com/infocenter/MathSource/577/上的 ToMatlab [] 将Mathematica表达式转换为Matlab,以便在数值上模拟模型.

我最近遇到了一个错误:我尝试让Matlab评估由ToMatlab []生成的函数,但是它给了我以下错误:

??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
Run Code Online (Sandbox Code Playgroud)

这意味着我有一个非方矩阵(即不是矩阵).搜索并发现(一)提到该错误,但没有提到解决方案:http://groups.google.com/forum/#!searchin/comp.soft-sys.math.mathematica/tomatlab/comp.soft- sys.math.mathematica/cxNZC9IYgfQ/2Q6jP4U4hzkJ

eac*_*eau 2

深入研究一下,发现问题所在:如果 Foldlines[] 例程在运算符之前折叠带有“...”文字的行,则使用原始 ToMatlab[] 例程转换符号矩阵可能会引入错误它既是二进制又是一元(例如 + 和 -),并且与其右操作数之间没有空格分隔(例如,“+5”而不是“+ 5”)。

根据 Matlab 文档,原因是点-点-点符号“...”被解释为矩阵中的空格。这会导致引入额外的元素。请参阅所附示例以获取说明。

我能够通过在 Plus 转换模式“ToMatlabaux[e_ /; Head[e] === Plus]”中将“+”替换为“+”来填充“+”运算符来修复此错误。我对原始 ToMatlab[] 例程进行了此修改和类似(但在其他方面无关紧要)样式修改,并将其上传到此处的 Pastebin:

http://pastebin.com/TcjErHVT - ToMatlab 错误修复

我试图就此问题联系 Ojanen 博士,但我从他的旧邮件服务器收到一条错误消息,称他的用户名已不存在。

我也向 Wolfram 通报了此事,但​​他们说贡献者需要更新他们在图书馆档案中的代码。

[附加示例]

EDU>> [3 + 5]
ans =
     8

EDU>> [3 + ...
5]
ans =
     8

EDU>> [3 +...
5]
ans =
     3     5

EDU>> [3 (+ 5)]
ans =
     3     5

EDU>> [3 ...
+5]
ans =
     3     5
Run Code Online (Sandbox Code Playgroud)