在其他CAS如Mathematica中很容易獲得這樣的重寫。如何在Sympy中將sin(x)^ 2'重寫爲cos(2 * x)形式
TrigReduce[Sin[x]^2]
(*1/2 (1 - Cos[2 x])*)
然而,在Sympy,trigsimp
所有的方法進行測試的回報sin(x)**2
trigsimp(sin(x)*sin(x),method='fu')
在其他CAS如Mathematica中很容易獲得這樣的重寫。如何在Sympy中將sin(x)^ 2'重寫爲cos(2 * x)形式
TrigReduce[Sin[x]^2]
(*1/2 (1 - Cos[2 x])*)
然而,在Sympy,trigsimp
所有的方法進行測試的回報sin(x)**2
trigsimp(sin(x)*sin(x),method='fu')
完整的 「福」 方法嘗試變換多種不同的組合中找到 「最好」 的結果。
Fu-routines中使用的單個轉換可用於執行目標轉換。您必須閱讀文檔,瞭解什麼不同的功能做的,只是通過FU字典的功能運行標識TR8爲你的主力位置:
>>> for f in FU.keys():
... print f,FU[f](sin(var('x'))**2)
...
8<---
TR8 -cos(2*x)/2 + 1/2
TR1 sin(x)**2
8<---
這裏是得到這份工作做了愚蠢的辦法。
trigsimp((sin(x)**2).rewrite(tan))
回報: -cos(2*x)/2 + 1/2
也適用於
trigsimp((sin(x)**3).rewrite(tan))
回報 3*sin(x)/4 - sin(3*x)/4
而不是作品
個trigsimp((sin(x)**2*cos(x)).rewrite(tan))
retruns 4*(-tan(x/2)**2 + 1)*cos(x/2)**6*tan(x/2)**2
在處理類似的問題,減少的順序sin(x)** 6,我注意到sympy可以通過使用,重寫,展開,然後重寫來減少sin(x)** n的順序,n = 2,3,4,5,...通過簡化,如下所示:
expr = sin(x)**6
expr.rewrite(sin, exp).expand().rewrite(exp, sin).simplify()
此返回:
-15*cos(2*x)/32 + 3*cos(4*x)/16 - cos(6*x)/32 + 5/16
適用於與Mathematica將執行的操作類似的每種功能。
另一方面,如果你想減少sin(x)** 2 * cos(x)一個類似的策略。在這種情況下,你不得不重新改寫COS和罪exp和以前一樣擴大重寫和簡化再爲:
(sin(x)**2*cos(x)).rewrite(sin, exp).rewrite(cos, exp).expand().rewrite(exp, sin).simplify()
返回:
cos(x)/4 - cos(3*x)/4
是啊,我注意到在以前的答案類似這個功能題。我關心這個問題,因爲由於這種限制,manualintegrate函數無法集成很多trig函數。 – Kattern