Wolfram mathematica mathematica完全简化拒绝完全计算复数的实部?

Wolfram mathematica mathematica完全简化拒绝完全计算复数的实部?,wolfram-mathematica,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

我想知道是否有一个不同于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修饰符,这并不是因为表达式太复杂(这是很好的,因为我可以在头脑中做这个,但这是一个更大的测试表达式的子集,它也失败了)。

ComplexExpand,也许

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

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

为了弥补我在这里的慢贴,还有另一种方法:通过
ComplexityFunction
告诉Mathematica您不希望结果中出现
Complex

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] &)]

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

CSimplify[in_]:=
FullSimplify[in//ComplexExpand,

复杂性函数->(1-Boole@FreeQ[#,复杂]&)]

看起来在@Zabba和@closer上回答这个问题会更好。这是一个有效的Mathematica问题。请检查,因为你不是唯一的一个confused@belisarius,我的前提是,在数学网站上的人们可能比我们“软件类型”更多地使用mathematica。但是感谢你的链接,它确实澄清了为什么mathematica在这里如此混乱。@Zabba,这绝对是一个有趣的问题,然而这里提出的问题中有十分之九是编程问题,而这是一个复杂但非常有趣的用法ComplexityFunction@belisarius我想,任何经常想从Simplify中获得非常具体结果的人都应该建立一个这些结果的库。我倾向于喜欢一两个简单的函数,比如
StringLength[…
,但是可以用
ComplexityFunction
TransformationFunctions
(+1)做更多的事情。也许你应该把你最喜欢的
ComplexityFunction
发布在。