Problem polega na tym, że to, co zakładamy jako "proste" i co MMA zakłada, że jest proste, to dwie różne rzeczy. Patrząc na ComplexityFunction wskazuje, że MMA przede wszystkim patrzy na "LeafCount". Stosując LeafCount daje:
In[3]:= Abs[q + I w] // LeafCount
Out[3]= 8
In[4]:= Sqrt[q^2 + w^2] // LeafCount
Out[4]= 11
Więc MMA uważa formularz Abs
być lepiej. (Można wizualnie zbadać prostotę za pomocą TreeForm lub FullForm). To, co musimy zrobić, to powiedzieć MMA, aby traktować MMA jako droższą. Aby to zrobić, bierzemy przykład z ComplexityFunction i napisać:
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]
na żądanie. Zasadniczo mówimy MMA poprzez f[e]
, że liczba wszystkich części formularza Abs
powinna być liczona jako 100 liści.
EDIT: Jak wspomniano przez Brett, można też uczynić go bardziej ogólny i używać _Complex
jako zasada szukać:
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]
Nie jestem teraz na moim komputerze Mathematica, więc nie mogę przetestować niczego, ale mam dla ciebie pytanie. W jakim sensie Sqrt [q^2 + w^2] jest prostszy od Abs [q + Iw]? Czy jesteś pewien, że twoje oczekiwanie, że FullSimplify zrobi to "uproszczenie", jest rozsądnym oczekiwaniem? Ponadto, myśląc o tym nieco więcej, tytuł twojego pytania jest sprzeczny z twoim pytaniem. –
Mogę uruchomić polecenie 'Series' na' Sqrt', ale nie na 'Abs'. – shadesofdarkred
Możesz wypróbować 'ComplexExpand'. Na przykład 'ComplexExpand [Abs [q + I w]]' tworzy 'Sqrt [q^2 + w^2]' – Heike