2017-01-11 50 views
0

、私は、いくつかの2次元データXDATA(floatの配列の配列を)持っている100,9 セカンド形状私はいくつかの2次元のYDATAを持っています。Shape 100,3 私の関数は、9つのエントリと3つのunknowパラメータの配列から3つのエントリの配列を作成します。 だから線形最小二乗を経由して、これらのパラメータを推定しようとしているイム:最小二乗リニアスカラー:scipy.optimize.curve_fit()throws "関数呼び出しの結果が浮動小数点数の適切な配列ではありません。"私は行列式</p> <p>まずための最小二乗誤差を計算している、今のpythonコードを実装しようとしています

#linear regression 
#Messured Data 
xdata = np.array(data[0:9]) 
xdata = xdata.astype(np.float) 
xdata = np.transpose(xdata) 
#True y 
ydata = np.array(data[9:12]) 
ydata = ydata.astype(np.float) 
ydata = np.transpose(ydata) 

#Timestamps 
size = np.size(xdata)/np.size(xdata[0]) 

def func(xdata,m1,m2,g): 
    y_est = [] 
    for x in xdata: 
     u_est = [] 
     u_est.append((m1+m2)*(x[6]+g)) 
     u_est.append(m2*(2*x[5]*x[4]*x[2]+(x[2]**2)*x[7])) 
     u_est.append(m2*(x[8]-x[2]*(x[4]**2))) 
     y_est.append(u_est) 
    y_est = np.array(y_est) 
    return y_est 

print (curve_fit(func,xdata,ydata)) 

しかし、それは私が(まだ)修正することはできませんよ、エラーがスローされます。 Error

+0

あなたのYデータは多次元であるように見えます。 'curve_fit'は、出力配列が1次元であることを要求します。 [この質問](http://stackoverflow.com/questions/40829791/fitting-a-vector-function-with-curve-fit-in-scipy)または[こちら](http: /stackoverflow.com/questions/21566379/fitting-a-2d-gaussian-function-using-scipy-optimize-curve-fit-valueerror-and-m)。 – BrenBarn

+0

典型的な入力に対して 'func'が生成するものを教えてください。 – hpaulj

+0

funcは、3つのエントリ[x] [3]を持つ配列の配列を生成します。[x] [9] 完全な実行xdataは、xdataの配列エントリごとに計算されたydataを返します。私は与えられていないパラメータ(m1、m2、g)を推定する必要があります。 curve_fitとlstsqは同じエラーを投げます(上記参照) –

答えて

0

curve_fit非線形最小二乗問題を解きます。 直線最小二乗、より良い使用lsq_linearまたはnumpy.lstsq

関連する問題