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

时间:2011-06-15 05:17:49

标签: matlab wolfram-mathematica

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

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

??? Error using ==> vertcat
CAT arguments dimensions are not consistent.

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

1 个答案:

答案 0 :(得分:2)

再挖一点,发现问题所在: 使用原始ToMatlab []例程转换符号矩阵如果foldlines []例程在二元和一元运算符(例如+和 - )之前折叠带有“...”文字的行,则会引入错误没有用空格分隔右边的操作数(例如,“+ 5”而不是“+ 5”)。

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

我能够通过填充“+”运算符来修复此错误,方法是在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