2015-06-26 54 views
1

在sympy中似乎沒有對應的cosd,sind(即餘弦和正弦參數的度數)。有沒有簡單的方法來實現這些功能?cosd和smp同sympy

對於numpy的,我所做的:

numpy.cosd = lambda x : numpy.cos(numpy.deg2rad(x)) 

喜歡的東西:

sympy.cosd = lambda x : sympy.cos(sympy.pi/180*x) 

作品進行評估,但表達打印爲:

cos(pi*x/180) 

這是不是偉大的可讀性(由於3D座標變化,我有複雜的表達)。有什麼辦法可以創建一個sympy.cosd函數來評估cos(pi/180 * x),但打印cosd(x)

+4

很多數學公式看起來很漂亮,但[萌芽當以度數工作時,會出現「pi/180'疣」(https://qedinsight.wordpress.com/2011/03/14/why-radian-measure-makes-life-easier-in-mathematics-and-physics/)。最好以弧度工作,並完全避免度數 - 如果您絕對必須,最終轉換爲度數。 – unutbu

+0

公平不夠,感謝您的鏈接。那麼如何完成更換?如果我有一個表達式'y = sympy.cos(x)','y.subs(sympy.cos,sympy.cosd)'不能與sympy.cosd的上述定義一起工作(因爲它不是sympy函數但只是一個通常的lambda函數)。 'y.subs(x,pi/180 * x)'在這裏起作用,但是如果cos中的表達式是複雜的(如各種參數的多項式表達式),那麼搜索哪些參數必須用pi來代替可能並不方便/ 180',哪一個不行。 – Nihl

+0

設'''''''''''''','phi'等是以弧度表示量的符號。保留這些符號的列表:'角度= [x,theta,phi]'。然後,在最後,使用'y.subs([(角度,角度* pi/180)角度角]]來將符號的含義改變爲度數。 – unutbu

回答

1

sympy確實有radian converter,在mpmath模塊中。

sympy.cosd = lambda x : sympy.cos(sympy.mpmath.radians(x)) 
+0

謝謝,但它打印'cos(0.0174532925199433 * x)',這也不是真的可讀。 – Nihl

+0

呵呵。這個對我有用。例如,在如上定義'sympy.cosd'之後,我輸入'sympy.cosd(60)'並返回'0.5'。也許這是一個版本的東西?我使用'sympy 0.7.6' – tom

+0

'sympy.cosd(60)'也給了我'0.5'。我認爲它給出了'cos(0.0174532925199433 * x)',因爲參數是一個符號:'x = sympy.Symbol('x')'我用它來做符號演算(所以我可以檢查公式),然後我將它用於數字應用。 – Nihl

0

爲了保持符號的機智,而使用度,我不喜歡的東西:

import sympy as sp 
def tand(x): 
    return sp.tan(x * sp.pi/180) 

def sind(x): 
    return sp.sin(x * sp.pi/180) 

def cosd(x): 
    return sp.cos(x * sp.pi/180) 

例子的結果是弧度工作時

In [5]: tand(60) 
Out[5]: sqrt(3)