2

Python/numpy を使用しているときに多項式の結果について質問がありました。先行係数がかなり小さい多項式を使用して関数を定義しました。以下は私のコードと方程式です:

import matplotlib.pyplot as plt
import numpy as np 

def myfunction(X):
    return 9.06043895*10**(-9)*X**6-1.67073053*10**(-6)*X**5 + \
          7.49688511*10**(-5)*X**4 + 7.97984114*10**(-4)*X**3 - \
          6.07927087*10**(-2)*X**2 - 0.415861627*X + 80.62563

Input = np.arange(0, 100, 1)
Output = myfunction(Input)

plt.plot(Input, Output)

これにより、次のプロットが得られます。

ここに画像の説明を入力

エラーは、配列自体がオフになっているため、結果の Y が計算される方法にあるようです。(値はプロットと一致しますが、正しいです)

WolframAlpha を使用してプロットされたまったく同じ方程式のサンプル: (上記のリテラル コピー/貼り付けから \ と戻り値を引いたもの)

ここに画像の説明を入力

この問題に光を当てるのを手伝ってくれる人はいますか?

関数の処理中に切り捨てが発生する可能性があると感じていますが、この方程式はそれほど悪くはない感じています...

お時間をいただき、ありがとうございました。

4

1 に答える 1

4

これはint対のfloat問題です。整数オーバーフローが発生しています:

>>> np.int32(100)**6
-727379968
>>> np.float32(100)**6
1000000000000.0

np.arange(0, 100, 1)整数を与えるからです。

好きなようにフロートにすることができます-私は通常 を使用np.arange(0, 100, 1.0)しますが、正直に言うとnp.linspace.

フロートを使用すると、次のようになります。

補正曲線

于 2014-04-02T19:10:08.610 に答える