さまざまな高さ(Velocity Azimuth Display)で風の方向と速度を推定するために、いくつかの水平風データをコサインカーブに合わせようとしていますが、私は> 1の値でそうしようとすると、カーブが平坦すぎるように見え、フィットの出力が予想よりも低くなります。私はIDLの組み込みを使用して同様のcurvefitを行った大きな値でカーブにフィッティングするとscipy curve_fitが失敗する
パイソンCurveFit
:[1、0、0.13705066]プロット取り付け:coeffs出力された状態で
import numpy as np
import scipy.optimize as sc
azimuth = np.full((8), 60) #All values = 60 deg.
velocity = [5.6261001,6.6962662,3.9316666,-0.88413334,-5.4323335,-6.5153003,-3.2538002,1.0269333]
#Function that defines curve that data will be fitted to
def cos_Wave(x,a, b, c):
return a * np.cos(x-b) + c
azimuthData = np.deg2rad(azimuth)
coeffs, matcov = sc.curve_fit(cos_Wave, azimuthData, velocity, p0 = (1,0,0)
plt.scatter(azimuthData, velocity)
plt.plot(azimuthData, cos_Wave(azimuthData, *coeffs))
plt.show()
print(coeffs)
curvefit関数を使用し、[7.0348234,0.59962606,0.079354301]を生成し、適切なフィットを提供するより現実的な値を受け取りました。このような理由がありますか?私はそれが最初の推定値(P0)と何らかの関係があると想定していますが、IDL実装での最初の初期推定値を利用することで、さらに合理的な結果が得られます。
'方位= [0:8]'有効なPythonではありませんが。質問のコードを簡略化しようとしているのかもしれませんが、それは良い方法ではありません。理想的には、コードはコピーして実行できるものです。 –
申し訳ありませんが、修正済み – bgoudeau
修正する必要があります。 'curve_fit'への呼び出しを含む行に、閉じ括弧がありません。もっと重要なのは、 'azimuth'(したがって' azimuthData')はすべて同じ値を含む配列です。これらがあなたのデータの* x *座標であれば、もちろん 'curve_fit'は動作しません。しかし、私はこのコードはあなたが示すプロットを生成したコードではないと思います。コードを修正して、質問に含めるコードがあなたの質問に関するコードであることを確認してください。つまり、このコード*を実行して、問題があることを確認してください。 –