Il problema è che ciò che si presuppone sia "Semplice" e che l'MMA presuppone siano semplici sono due cose diverse. Dando uno sguardo a ComplexityFunction indica che MMA guarda principalmente a "LeafCount". Applicando LeafCount dà:
In[3]:= Abs[q + I w] // LeafCount
Out[3]= 8
In[4]:= Sqrt[q^2 + w^2] // LeafCount
Out[4]= 11
Quindi, MMA considera la forma Abs
di essere migliore. (Si può esplorare visivamente la semplicità usando TreeForm o FullForm). Quello che dobbiamo fare è dire a MMA di trattare gli MMA come più costosi. Per fare questo, prendiamo l'esempio da ComplexityFunction e scrittura:
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]
come richiesto. Fondamentalmente, stiamo comunicando all'MMA tramite f[e]
che il conteggio di tutte le parti del modulo Abs
dovrebbe essere pari a 100 foglie.
EDIT: Come già detto da Brett, si può anche rendere più generale, e utilizzare _Complex
come la regola per cercare:
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]
Al momento non sono alla mia macchina Mathematica quindi non posso testare nulla ma ho una domanda per te. In che senso è Sqrt [q^2 + w^2] più semplice di Abs [q + Iw]? Sei sicuro che la tua aspettativa che FullSimplify faccia questa 'semplificazione' è un'aspettativa ragionevole? Inoltre, pensandoci un po 'di più, il titolo della tua domanda è in disaccordo con la tua domanda. –
Posso eseguire il comando 'Series' su' Sqrt' ma non su 'Abs'. – shadesofdarkred
Si potrebbe provare 'ComplexExpand'. Ad esempio 'ComplexExpand [Abs [q + I w]]' produce 'Sqrt [q^2 + w^2]' – Heike