1

我想在 Mathematica 中使用稀疏数组,例如: a=SparseArray[{},{m,n},"*"] 使用默认值 * 而不是零。是否可以通过以下方式扩展 Plus 和 Times:

Plus[1, ]= Times[1, ]= 但 Plus[0,*]=0

谢谢, 拉沃斯拉夫

4

1 回答 1

3

由于您在这里询问有关如何修改内在函数的建议,因此我得出结论,您还不是一个足够有经验的 Mathematica 用户,无法安全地进行此类修改。

是的,可以修改 Mathematica 内在函数的定义和活动,例如PlusTimes。但这几乎可以肯定是一个非常糟糕的主意。主要的威胁是,这尤其适用于诸如加法和乘法之类的基本运算,很难将这种修改的影响控制在您想要并理解影响的那些情况下。

一个更好的主意是定义您自己的函数版本以按照您的意愿运行。这样的操作可能会像这样开始;

mySparseArrayPlus[term1_SparseArray,term2_] :=

我还认为您应该避免使用字符串,例如s"*"中的默认值SparseArray,而是使用Symbol.

如果您必须修改Plus并通过;Times的定义来处理它 Mathematica 文档中的这个页面提供了一个开始阅读的好地方。UpValues

最后,如果您必须干预,请阅读所有关于Unprotect. 祝你好运,当你打破加法和乘法时不要回来寻求帮助。

于 2012-10-31T14:15:25.850 回答