我是Mathematica编程的新手,我需要一些帮助。我正在尝试编写一个函数来获取任意数组的元素,并构建一个特定格式的字符串,以便在Math LibreOffice中使用。
我的代码如下:
OOForm[MM_] :=
(strMM = "left ( matrix{";
For[i = 1, i < Dimensions[MM][[1]], i++] { (* not last row *)
For[j = 1, j < Dimensions[MM][[2]], j++] { (* not last element from the row *)
strMM = strMM <> ToString[MM[[i, j]], InputForm] <> "#";
}; (* last element from the row *)
strMM = strMM <> ToString[MM[[i, Dimensions[MM][[2]]]], InputForm] <> "##";
};
For[j = 1, j < Dimensions[MM][[2]], j++] { (* last row without the last element *)
strMM = strMM <> ToString[MM[[Dimensions[MM][[1]], j]], InputForm] <> "#";
}; (* last element *)
strMM = strMM <> ToString[MM[[(Dimensions[MM][[1]]), Dimensions[MM][[2]]]], InputForm] <> "} right )";
strMM;
)
输入如下:
A = {{3/2, -1, -2, -2, -2}, {0, 3, 6, 10, 14}, {-6, 3/2, 5, 5, 5}, {19/2, -7, -35/2, -24, -61/2}};
预期输出为:
"left ( matrix{3/2#-1#-2#-2#-2##0#3#6#10#14##-6#3/2#5#5#5##19/2#-7#-35/2#-24#-61/2} right )"
但它抛出了这个输出:
"left ( matrix{-61/2#-61/2##-61/2#-61/2} right )"
这不是预期的输出,但我无法找到错误。
感谢。
答案 0 :(得分:2)
首先得到一个代表你的数组的字符串。
我讨厌单字母变量名,我遵循Mathematica惯例,为我定义的变量名使用初始小写字母,所以让
myArray = {{3/2, -1, -2, -2, -2}, {0, 3, 6, 10, 14}, {-6, 3/2, 5, 5, 5}, {19/2, -7, -35/2, -24, -61/2}};
然后
myArrayString = ToString[myArray,InputForm];
和
StringReplace[myArrayString,{" " -> "", "," -> "#", "{{" -> "left ( matrix{", "}}"
-> "} right)", "}" -> "#", "{" -> ""}]
返回您想要的字符串。
如果你想要一个功能来做这件事,就像这样把它们全部粉碎:
ooForm[arr_List]:= StringReplace[ToString[arr,InputForm],
{" " -> "", "," -> "#", "{{" -> "left ( matrix{", "}}"
-> "} right)", "}" -> "#", "{" -> ""}]
您向Mathematica的新手提出了一个常见的基本错误。使用循环是一个明确的信号,表明你正在编写命令式,程序性代码,这几乎总是对你的时间的低效使用(注意我编写的代码比你编写的代码短得多,并且使用的函数更少)并且效率低下使用计算机的时间。当然,后者不那么重要,但如果你有兴趣比较你的方法和我的时间。