如何让Mathematica不将标量与向量逐元素相乘,保留原式形式
Mathematica中保留标量与向量乘积的显示形式
当你定义u = {1,2,3}后,a*u默认会展开为{a,2a,3a}。要实现显示为a {1,2,3}的效果,可尝试以下几种方法:
方法1:使用Inactive包裹乘法
通过Inactive阻止乘法自动展开,保留原式结构:
u = {1, 2, 3}; expr = Inactive[Times][a, u]
输出显示为a {1,2,3}。若需要实际计算展开结果,执行Activate[expr]即可得到{a,2a,3a}。
方法2:自定义Format规则
针对特定变量u设置显示规则:
u = {1, 2, 3}; Format[a_ * u] := a_ u
此后输入a*u会直接显示为a {1,2,3}。如果需要通用到所有标量与列表的乘积,可调整规则为:
Format[c_?NumberQ * v_List] := c v
注意:通用规则可能影响其他列表乘法的显示,按需使用。
方法3:通过MakeBoxes控制输出格式
直接定义表达式的输出盒子结构,精细控制显示效果:
u = {1, 2, 3}; MakeBoxes[a_ * u, StandardForm] := RowBox[{MakeBoxes[a], " ", MakeBoxes[u]}]
该方法仅改变显示形式,表达式的实际计算值仍为展开后的结果。
内容的提问来源于stack exchange,提问作者Felipe Jiménez
相关产品推荐
相关产品推荐

