以度为单位的Python三角计算

时间:2017-03-29 17:29:39

标签: python matlab numpy

我正在为一个项目将MATLAB程序转换为Python。我正面临着将MATLAB的sind()语法转换为Python的一些主要问题。我正在使用

numpy.sin(numpy.radians())

但是,与Matlab相比,Python中的一些结果显示出巨大的变化。有没有更简单的方法来告诉Python度数而不是弧度?

1 个答案:

答案 0 :(得分:1)

在Octave中,sind是:

function y = sind (x)
  ...
  I = x / 180;
  y = sin (I .* pi);
  y(I == fix (I) & isfinite (I)) = 0;
endfunction
根据记录np.radians

np.deg2radx * pi / 180)。

因此,大多数值np.sin(np.radians(x))应与sind(x)相同。浮点精度的极限可能会有一些变化。此外,我不确定最后一行应该做什么。

In [327]: np.sin(np.radians(0))
Out[327]: 0.0
In [328]: np.sin(np.radians(90))
Out[328]: 1.0
In [329]: np.sin(np.radians(180))
Out[329]: 1.2246467991473532e-16

>> sind(0)
ans = 0
>> sind(90)
ans =  1
>> sind(180)
ans = 0

Octave文档添加:Returns zero for elements where 'X/180' is an integer.

所以是的,可能存在差异,但1e-16并不是一个巨大的差异。

我可以复制sind

def sind(x):
    I = x/180.
    y = np.sin(I * np.pi)
    mask = (I == np.trunc(I)) & np.isfinite(I)
    y[mask] = 0
    return y

In [356]: x=np.array([0,90,180,359,360])
In [357]: np.sin(np.radians(x))
Out[357]: 
array([  0.00000000e+00,   1.00000000e+00,   1.22464680e-16,
        -1.74524064e-02,  -2.44929360e-16])
In [358]: sind(x)
Out[358]: array([ 0.        ,  1.        ,  0.        , -0.01745241,  0.        ])

>> x=[0,90,180,359, 360]
x =
     0    90   180   359   360
>> sind(x)
ans =
   0.00000   1.00000   0.00000  -0.01745   0.00000