我想在 Mathematica 中使用稀疏数组,例如: a=SparseArray[{},{m,n},"*"] 使用默认值 * 而不是零。是否可以通过以下方式扩展 Plus 和 Times:
Plus[1, ]= Times[1, ]= 但 Plus[0,*]=0
谢谢, 拉沃斯拉夫
我想在 Mathematica 中使用稀疏数组,例如: a=SparseArray[{},{m,n},"*"] 使用默认值 * 而不是零。是否可以通过以下方式扩展 Plus 和 Times:
Plus[1, ]= Times[1, ]= 但 Plus[0,*]=0
谢谢, 拉沃斯拉夫
由于您在这里询问有关如何修改内在函数的建议,因此我得出结论,您还不是一个足够有经验的 Mathematica 用户,无法安全地进行此类修改。
是的,可以修改 Mathematica 内在函数的定义和活动,例如Plus
和Times
。但这几乎可以肯定是一个非常糟糕的主意。主要的威胁是,这尤其适用于诸如加法和乘法之类的基本运算,很难将这种修改的影响控制在您想要并理解影响的那些情况下。
一个更好的主意是定义您自己的函数版本以按照您的意愿运行。这样的操作可能会像这样开始;
mySparseArrayPlus[term1_SparseArray,term2_] :=
我还认为您应该避免使用字符串,例如s"*"
中的默认值SparseArray
,而是使用Symbol
.
如果您必须修改Plus
并通过;Times
的定义来处理它 Mathematica 文档中的这个页面提供了一个开始阅读的好地方。UpValues
最后,如果您必须干预,请阅读所有关于Unprotect
. 祝你好运,当你打破加法和乘法时不要回来寻求帮助。