Vấn đề là những gì bạn cho rằng là "Đơn giản" và điều mà MMA cho là đơn giản là hai điều khác nhau. Hãy xem ComplexityFunction chỉ ra rằng MMA chủ yếu xem xét "LeafCount". Áp dụng LeafCount cho:
In[3]:= Abs[q + I w] // LeafCount
Out[3]= 8
In[4]:= Sqrt[q^2 + w^2] // LeafCount
Out[4]= 11
Vì vậy, MMA coi mẫu Abs
là tốt hơn. (Người ta có thể khám phá một cách trực quan sự đơn giản bằng cách sử dụng TreeForm hoặc FullForm). Những gì chúng ta cần làm là nói với MMA để điều trị MMA đắt hơn. Để thực hiện việc này, chúng tôi lấy ví dụ từ ComplexityFunction và viết:
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]
Theo yêu cầu. Về cơ bản, chúng tôi đang nói với MMA thông qua f[e]
rằng số lượng tất cả các phần của biểu mẫu Abs
sẽ được tính là 100 lá.
EDIT: Như đã đề cập bởi Brett, bạn cũng có thể làm cho nó tổng quát hơn, và sử dụng _Complex
như quy tắc để tìm kiếm:
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]
Tôi hiện không ở máy Mathematica của mình nên không thể kiểm tra bất cứ điều gì nhưng tôi có câu hỏi cho bạn. Theo nghĩa nào thì Sqrt [q^2 + w^2] đơn giản hơn Abs [q + Iw]? Bạn có chắc chắn rằng kỳ vọng của bạn rằng FullSimplify sẽ làm cho 'đơn giản hóa' này là một kỳ vọng hợp lý? Ngoài ra, suy nghĩ về nó nhiều hơn một chút, tiêu đề câu hỏi của bạn là mâu thuẫn với câu hỏi của bạn. –
Tôi có thể chạy lệnh 'Series' trên' Sqrt' nhưng không chạy trên 'Abs'. – shadesofdarkred
Bạn có thể thử 'ComplexExpand'. Ví dụ 'ComplexExpand [Abs [q + I w]]' tạo 'Sqrt [q^2 + w^2]' – Heike