2016-11-17 5 views
-2

私はPythonで科学計算を学んでいます。ここでPython:私の多項式係数は10の係数でオフになっています

enter image description here

は私の実装です:演習では、私は、この式で、そのルーツを使用して多項式を生成することが出来るのです

def poly(x,roots):   #Pass real and/or complex roots 

    x = symbols(x) 
    f = 1    
    for r in roots: 
     f = f*(x - r) 

    return expand(f) 

私はそれをテスト:

from sympy import expand 
poly('x',[(-1/2), 5, (21/5), (-7/2) + (1/2)*sqrt(73), (-7/2) - (1/2)*sqrt(73)]) 

入手方法:

x**5 - 1.7*x**4 - 50.5*x**3 + 177.5*x**2 - 24.8999999999999*x - 63.0 

しかし、私は取得する必要があります。

したがって
10*x**5 - 17.0*x**4 - 505.0*x**3 + 1775.0*x**2 - 248.999999999999*x - 630.0 

を、私はf = 10を設定した場合、すべてが、10倍でオフになって、それは動作しますが、私はそれを行う必要があり、なぜ私は表示されません。私は明白な間違いをしていますか?ありがとうございました!

+2

数式が表示されません。あなたはこれを修正できますか? –

+0

symbols()は何をしますか? –

+1

特定の根を持つ多項式を構築しています。 coeffを任意の数に掛ければ、根は同じままになります。 – mingaleg

答えて

1

10x**5 + ...が正しいのは10 * p(x)ですが、これは実際には必要ではありません。あなたが得ている答えは今でも良くなり、rrootsで、p(r)0であることをテストできます。

+0

各ルートをテストしました。この本が私に警告するように、浮動小数点の丸め誤差のために、私はゼロに近い非常に小さな数字を得る。可能であれば、これを修正するための望ましいテクニックがありますか? – Johnathan

+1

@ Johnathan通常、浮動小数点エラーが発生します。私は一般に '1e-12'と' abs(p(r))<1e-12'の許容値を設定しました。それについて[ここ](http://stackoverflow.com/questions/588004/is-floating-point-math-broken?rq=1)を読んでください。 –

+0

ありがとうございます! – Johnathan

0

x**5が正しいです。

数式でわかるように、係数はありません。

+0

ありがとうございました! – Johnathan

関連する問題