0

FullSimplify 未能认识到:

 a*Conjugate[b] + b*Conjugate[a] = 2 Re[a*b]  

如果 Mathematica 能够识别这个简单的恒等式,我有一些非常复杂的方程可以大大简化

(and that a*Conjugate[b] - b*Conjugate[a] = 2 Im[a*b]).

看,Mathematica 写成时不会完成我的方程的求解

a*Conjugate[b] +b*Conjugate[a] form, 

但如果 Mathematica 认识到这一点,我至少可以以极其描述和紧凑的形式写出我的最终方程。实际表达式如下所示:

-((I q1 + q2)/(I q0 + Sqrt[-q0^2 + q1^2 + q2^2 + q3^2])) -
 (Conjugate[q1] + I Conjugate[q2])/
 (Conjugate[q0] + I Conjugate[Sqrt[-q0^2 + q1^2 + q2^2 + q3^2]]) 

我自己会这样做,但有 16 个这样的表达式,它们形成 4 组耦合系统。由于一个标志错误会使我的工作变得毫无用处,因此我更喜欢自动化流程。

4

4 回答 4

4

仅当 a 和 b 中的至少一个是真实的时,您给出的身份b Conjugate[a] + a Conjugate[b] == 2 Re[a b], 才是真实的:

In[7]:= Simplify[
 Reduce[a*Conjugate[b] + b*Conjugate[a] == 2 Re[a*b], {a, b}]]

Out[7]= Im[a] == 0 || Im[b] == 0

如果此附加条件在您的应用程序中实际上为真,那么您可以将其作为假设提供给 Simplify 或 FullSimplify,作为它们的第二个参数。例如:

In[14]:= FullSimplify[Im[a*Conjugate[b] + b*Conjugate[a]], 
 Im[a] == 0 || Im[b] == 0]

Out[14]= 0

顺便说一下,这是一个身份不真实的例子:

In[1]:= FindInstance[
 a*Conjugate[b] + b*Conjugate[a] != 2 Re[a*b], {a, b}]

Out[1]= {{a -> -I, b -> -I}}
于 2010-10-24T02:09:38.893 回答
1

First pass: Use ComplexExpand[].

    In := Simplify[ ComplexExpand[ a Conjugate[b] + b Conjugate[a], {a, b} ] ]
    Out = 2 (Im[a] Im[b] + Re[a] Re[b])

For more fun, look at ComplexityFunction, although I find that a lot of trial and error is involved in tuning FullSimplify.

于 2010-10-24T00:09:37.733 回答
1

我认为正确的身份应该是:

a*Conjugate[b] + b*Conjugate[a] == 2 Re[Conjugate[a]*b]

这总是正确的:

In[1]:= FullSimplify[a*Conjugate[b] + b*Conjugate[a] == 2 Re[Conjugate[a]*b]]

Out[1]= True
于 2012-11-12T02:15:53.727 回答
0

你的身份正确吗?我在两边得到不同的数字

{a*Conjugate[b] + b*Conjugate[a], 2 Re[a*b]} /. {a -> RandomComplex[],b -> RandomComplex[]}
于 2010-10-23T23:46:35.647 回答