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
深入研究一下,发现问题所在:如果 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)