2012-03-07 15 views
5

使用代码FullSimplify[Abs[q + I*w], Element[{q, w}, Reals]]结果数学不计算一个复数的绝对值的实系数

Abs[q + I w] 

,而不是

Sqrt[q^2 + w^2] 

我缺少什么?

P.S. Assuming[{q \[Element] Reals, w \[Element] Reals}, Abs[q + I*w]]也不起作用。 注意:Simplify[Abs[w]^2, Element[{q, w}, Reals]]Simplify[Abs[I*q]^2, Element[{q, w}, Reals]]工作。

+0

我现在不在我的Mathematica机器上,所以不能测试任何东西,但我有一个问题给你。 Sqrt [q^2 + w^2]比Abs [q + Iw]简单多少?你确定你对FullSimplify的期望会使这种“简化”是一个合理的期望吗?另外,再想一想,你的问题的标题与你的问题不一致。 – 2012-03-07 16:22:38

+0

我可以在'Sqrt'上运行'Series'命令,但不能在'Abs'上运行。 – shadesofdarkred 2012-03-07 16:26:38

+0

你可以试试'ComplexExpand'。例如'ComplexExpand [Abs [q + I w]]'产生'Sqrt [q^2 + w^2]' – Heike 2012-03-08 00:22:29

回答

5

问题是,你认为是“简单”,MMA认为简单是两件不同的事情。看看ComplexityFunction表示MMA主要看“LeafCount”。应用LeafCount给出:

In[3]:= Abs[q + I w] // LeafCount 
Out[3]= 8 

In[4]:= Sqrt[q^2 + w^2] // LeafCount  
Out[4]= 11 

所以,MMA认为Abs形式更好。 (可以使用TreeForm或FullForm直观地探索简单性)。我们需要做的是告诉MMA将MMA视为更贵。要做到这一点,我们采取的例子从ComplexityFunction和写:

In[7]:= f[e_] := 100 Count[e, _Abs, {0, Infinity}] + LeafCount[e] 
FullSimplify[Abs[q + I w], Element[{q, w}, Reals], 
ComplexityFunction -> f] 

Out[8]= Sqrt[q^2 + w^2] 

根据要求。基本上,我们通过f[e]告诉MMA,Abs表格的所有部分的计数应计为100叶。

编辑:正如布雷特所说,你也可以把它更普遍,并使用_Complex作为规则来寻找:

In[20]:= f[e_] := 100 Count[e, _Complex, {0, Infinity}] + LeafCount[e] 
FullSimplify[Abs[q + I w], Element[{q, w}, Reals], 
ComplexityFunction -> f] 

Out[21]= Sqrt[q^2 + w^2] 
+0

真,对于更一般的反对所有复数也是有益的。 – tkott 2012-03-07 19:34:54

4

我建议使用ComplexExpand,告诉系统,所有的变量是真实的。

In[28]:= Abs[q + I*w] // ComplexExpand 

Out[28]= Sqrt[q^2 + w^2] 
-1

这些评论是没有用的。 Mathematica未能评估复数,因为Abs[5+i20]保持不变。 i编码正确。对“什么是或不是简单的”抽象的观察是无关和错误的。应该产生一个浮点数,而不是一些代数。 NImportForm也不起作用。

+0

小写'i'是一个未定义的符号。放上'I'并使用'N',你会得到你所期望的。与这个问题无关。 – agentp 2017-12-14 03:47:43