2016-04-13 6 views
0

私のpythonのガウス・ニュートンアルゴリズムを作成しようとしている、と私は理解していないエラーが発生している:ガウスニュートンアルゴリズムとの行列積

np.dot(-Jr(x0,n,t).T,r(x0,t,a,n)) 
ValueError: shapes (2,7) and (1,7) not aligned: 7 (dim 1) != 1 (dim 0)` 

わからない私の行列積は」doesnの理由仕事が... 助けていただければ幸いです。ここに私のコードは次のとおりです。

import numpy as np 
from scipy import linalg 
import math 

#on défini ici les residus 
def r(x,t,a,n): 
    r = np.ones((1,n)) 
    r[0,:] = a[0] - x0[0]*np.exp(-x0[1]*t) 
    return(np.array(r)) 

#definition du jacobien 
def Jr(x,n,t): 
    Jr = np.ones((n,2)) 
    Jr[:,1] = t*x0[0]*np.exp(-x[1]*t) 
    Jr[:,0] = -np.exp(-x[1]*t) 
    return(Jr) 

def f(x,n): 
    z = 0 
    t = 0 
    z = (r(x0,t,a,n))**2 
    for i in range (n): 
     t = t + z[0][i] 
    h = math.sqrt(t) 
    return(h) 

#initialisation des variables  
t = np.array([500,1000,2000,3000,4000,5000,6300],dtype=float) 
a = np.array([14.5,13.5,12.0,10.8,9.9,8.9,8.0],dtype=float).T 
x0 = np.array([10,0.0001]) 
n = np.size(t) 
R = (x0,t,a,n) 
X = Jr(x0,n,t) 
e = 0.00001 
k = 0 
x = x0 
np.dot(-Jr(x0,n,t).T,r(x0,t,a,n)) 
#while (1/2)*(f(x,n))**2 > e*(1/2)*(f(x0,n))**2: 
    #s = linalg.solve(np.dot(Jr(x,n,t).T,Jr(x,n,t)),np.dot(-   Jr(x,n,t).T,r(x,t,a,n))) 
#x = x + s.T 
#k = k + 1 
#print(x) 
#print(k) 

答えて

0

が、これは次元の問題を修正する必要があり、形状(2,1)の行列になります

np.dot(-Jr(x0,n,t).T, r(x0,t,a,n).T) 

を使用してみてくださいお願いします。

+0

ありがとう、その仕事 –

関連する問題