2016-11-27 41 views
0

例如,我有两个向量:如何简化Mathematica中的抽象矢量运算?

a,b 

我需要简化以下简单的公式:

|a+b|==|a-b| 

我们可以通过人工计算知道:

a.b==0 

现在我试着Mathematica中的以下表达式:

In[1040]= 
     Reduce[{a, b} \[Element] Vectors[2, Reals] && (a + b).(a + b) == (a - b).(a - b)] 

但保持原样。

Out[1040]= 
     Reduce[(a | b) \[Element] Reals && (a + b).(a + b) == (a - b).(a - b)] 
+1

只要你知道,有一个专门[mathematica.SE(HTTP://mathematica.stackexchange .com)姊妹网站。 –

+0

Mathematica在处理抽象向量时经常非常不好,您只需告诉它两个未知向量的名称,并且不会为向量的内容提供至少一个符号列表。这可能解释了为什么你很难得到你想要的答案。 – Bill

回答

1

随着一点点的帮助,TensorReduce

assumptions = Element[#, Vectors[2, Reals]] & /@ {a, b}; 
[email protected][(a + b).(a + b) == (a - b).(a - b), Assumptions->assumptions] 

输出:

a.b == 0 
+0

你能解释一下吗?为什么减少无法工作,Reduce必须与TensorReduce结合使用?我不明白原因。 – tiankonghewo

+0

@tiankonghewo这可能是由于内部实施。 'TensorReduce'配备了来自线性代数的张量转换规则,而'Reduce'配备了标量转换规则。最重要的是,*它不完美*。最好的做法是总是试验它。 – Kh40tiK