0

コサイン関数の位相オフセットを解こうとしています。[0, 2*pi] の間の値を探しています。

scipy.optimize.curvefit を使用してこれを調査するために、以下のおもちゃ関数を作成しました。

import scipy.optimize as optimize
import numpy as np
import matplotlib.pyplot as plt

# DATA
angles = np.array([0, 45, 90, 135, 180, 225, 270, 315])
angles = np.radians(angles)
offset = np.radians(176)
data = np.cos(np.radians(np.linspace(0,315,8))-offset)

plt.plot(np.degrees(angles), data)

# COSINE FUNCTION
def func(theta, k, b, p):
    return b + k*np.cos(theta-(p))

# COSINE FIT
popt, pcov = optimize.curve_fit(func, angles, data)

# COSINE COMPUTATION
yn = func(angles, popt[0], popt[1], popt[2])
plt.plot(np.degrees(angles), yn, color='r', linestyle='--')
print np.degrees(popt[2])

上記の例では、位相オフセットが 176 度の余弦関数を作成します。位相オフセットを解くと、-4 が返ってきました。(180-4) でこれに到達できることは理解していますが、根本的な動作がわかりません。たとえば、オフセットが 190 に設定されている場合、出力は 10 になります。その結果、フィットが [0, pi] または [pi, 2pi] の間隔にあるかどうかは (曲線を視覚的に調べずに) わかりません。 ]。

アドバイスをいただければ幸いです。

4

1 に答える 1

2

三角関係の知識をリフレッシュしてください。180を期待してはいけません。

于 2013-10-10T16:50:25.447 に答える