2017-11-08 5 views
-1

私はPythonで補間に問題があります。私は値セクション[-pi;π]でsin(1/x)を補間しなければならず、補間データは0.08ステップ生成する必要があります。 0.4ステップ分の入力データ。エントリデータの値に問題があり、3.14で終わらない。同じ状況が補間データにあり、どのようにしてこの問題を解決するのか分かりません。 2つのセットは等しいかもしれません。 @wwiiで先端を反映するために[-pi;]でsin(1/x)をどのように補間しますか?

import numpy as np 

//entry x 
x=[i for i in np.arange(-(np.pi),np.pi,0.4)] 
print(x); 

//interpolate x 
xinterp=[i for i in np.arange(-(np.pi),np.pi,0.08)] 
print(xinterp) 
+0

おそらく浮動小数点演算がそのように機能しないためです。 – duffymo

+0

@duffymoどうすれば修正できますか? –

+0

補間の仕方についてもっと知っておく必要がありますが、それはあなたが使用するループ構造の単なる変更だと思います。 – duffymo

答えて

2

編集:ここでは、この二組をテストするために私のコードです

これは予想される動作です。 https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.arange.html

停止:インターバルの数のエンドarangeはから最終値として停止とらないとも浮動小数点のために定義されていません...

。この間隔には、 の値は含まれません。ただし、stepが整数でなく、浮動小数点の が四捨五入されている場合は、長さに影響します。

代わりにlinspaceをご覧ください。

https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linspace.html

説明に従ってどの:

戻りインターバル にわたって計算等間隔サンプルを、NUM [開始、停止]。

したがって、0.8粒度を得るには、間隔の幅(2pi)を希望の粒度で割った値に等しい数の段差が必要です。

x = np.linspace(-np.pi, np.pi, int(2 * np.pi/0.08)) 
y = np.sin(1/x) 
+2

OPのステップサイズを取得するには、 'x = np.linspace(-np.pi、np.pi、int(2 * np.pi/0.08))'と入力します。 – wwii

+0

Ya!私はリンクから例を追加するだけであったので、OPが見えるようになりました。答えにあなたの解決策を追加しました: –

+0

@Caio Symあなたの解決策は働いていますか? –

関連する問題