2017-12-09 5 views
0

私は、正確に計算された場合、値を持つ配列を持っています:[3.056565 3.924560]しかし、pythonでは丸められた数字を出力し、配列は[3.06,3.93]です。配列は他の何かを計算するために使用され、結果は予想と異なります。その配列を丸めを停止するにはどうすればよいですか?ここでnumpy配列の値をより正確に設定する

では、その配列が正確calcualtedされていない見ることができるコードです:

import datetime 
import math 
import numpy as np 

def numGradient(f, x, h): 


    n = len(x) 
    g = [0]*n 
    g = np.array(g) 

    for i in range(n): 
    e = [0]*n 
    e[i] = 1 
    e=np.array(e) 


    g[i] = (f(x+e*h)-f(x-e*h))//(2*h) 

    return(g) 

def myFun(x) : 
    return (0.6 + ((math.sin(x[0]**2-x[1]**2))**2-0.5)/((1+0.001*(x[0]**2+x[1]**2))**2)) 
x_old=(3,4) 

xthis = x_old - 0.01*numGradient(myFun, x_old, 10**(-6)) 

print(xthis) 
+3

。 (印字の丸めは数字自体には影響しません)。より簡潔なコードスニペットを提供して、あなたが求めている振る舞いを示すことができますか?期待され、得られた回答も役立ちます。 –

+0

したがって、基本的には、この式になります: 'x_old- a * numGradient(f、x_old、10 **( - 6))'、結果は[3.06 3.93] 'で、' 3.056565 3.924560' (例えばRを使用して)外部Pythonを計算する –

+0

おそらく、より簡単なコードでエフェクトを再現する必要があります。このような長いスニペットをデバッグすることは非常に困難です。この不一致がなぜ起こるのかは分かりませんが、単純な例はありません。 –

答えて

3

あなたのコードにはいくつかの問題があります。それはあなたが計算すると予想しているものを計算しないでしょう。

まず、これはnumpyの配列

g = [0]*n 
    g = np.array(g) 

eと同じ操作を行い、

g = np.zeros(n) 

セカンドでそれを置き換えを初期化するために間違った方法です。

for i in range(n): 
    e = np.zeros(n) 
    e[i] = 1 

そして、最も重要なのはこれが後に、すべての浮動小数点除算さ

g[i] = (f(x+e*h)-f(x-e*h))/(2*h) 

g[i] = (f(x+e*h)-f(x-e*h))//(2*h) 

を交換してください。そして//は、あなたが取得すべきか考えられます

[ 3.056565 3.92456 ] 

を取得する変更後のPython 3

、いわゆる整数の除算です。ここで

変更後の完全なコードされています。基本的には、 `numpy.array`年代には、浮動小数点演算で発生する通常の丸め以外にも、「その人自身ラウンド」ではありません

import datetime 
import math 
import numpy as np 

def numGradient(f, x, h): 


    n = len(x) 
    g = np.zeros(n) 

    for i in range(n): 
    e = np.zeros(n) 
    e[i] = 1 
    g[i] = (f(x+e*h)-f(x-e*h))/(2*h) 

    return(g) 

def myFun(x) : 
    return (0.6 + 
     ((math.sin(x[0]**2-x[1]**2))**2-0.5)/((1+0.001*(x[0]**2+x[1]**2))**2)) 


x_old=(3,4) 

np.set_printoptions(precision=6) 

xthis = x_old - 0.01*numGradient(myFun, x_old, 10**(-6)) 

print(xthis) 
+1

ニックピック: 'np.zeros((n))'では余分な括弧は無用です。 +1全体。 –

関連する問題