mathematica FullSimplify懦弱拒绝完全评估复杂数字的真实部分?

时间:2011-03-12 03:46:13

标签: wolfram-mathematica

我想知道是否有一个与FullSimplify不同的命令告诉mathematica进行所请求的计算。以下是简化尝试的三种变体

FullSimplify[Re[                       (-I + k Rr)] Cos[Ttheta], Element[{k, Rr, Ttheta, t, omega}, Reals]]
FullSimplify[Re[E^(I (omega t - k Rr))            ] Cos[Ttheta], Element[{k, Rr, Ttheta, t, omega}, Reals]]
FullSimplify[Re[E^(I (omega t - k Rr)) (-I + k Rr)] Cos[Ttheta], Element[{k, Rr, Ttheta, t, omega}, Reals]]

我分别得到了:

k Rr Cos[Ttheta]
Cos[k Rr - omega t] Cos[Ttheta]

                I (-k Rr + omega t)
Cos[Ttheta] Re[E                    (-I + k Rr)]

没有指数,实际部分得到评估。如果没有复数因子乘以指数,就会对实部进行评估。两者相乘后,输入将作为输出返回?

我尝试了// Timings修饰符,这不是因为表达式过于复杂(这很好,因为我可以在我脑海中做到这一点,但这是一个较大的测试表达式的子集,也是失败的)。

3 个答案:

答案 0 :(得分:5)

由于您的变量已声明Reals,您是否尝试过ComplexExpand

要在此处兑换我的慢发帖是另一种方法:通过Complex告诉Mathematica你不希望ComplexityFunction成为结果{/ 1}

FullSimplify[Re[E^(I (omega t - k Rr)) (-I + k Rr)] Cos[Ttheta], 
 Element[{k, Rr, Ttheta, t, omega}, Reals], 
 ComplexityFunction -> (1 - Boole@FreeQ[#, Complex] &)]

答案 1 :(得分:3)

ComplexExpand,也许?

ComplexExpand[Re[E^(I (omega t - k Rr)) (-I + k Rr)] Cos[Ttheta]]

答案 2 :(得分:0)

这是我长期以来在Mathematica上遇到的一个问题,结合这里的建议我创建了一个新函数,可以在处理复杂参数时用来代替Simplify []。到目前为止对我有用,还有什么进一步的建议吗?

CSimplify[in_] := FullSimplify[in // ComplexExpand, ComplexityFunction -> (1 - Boole@FreeQ[#, Complex] &)]