1

カーブ フィッティングを実行しようとすると、エラーの原因となる数値のセットがあります。私は以前に同じ数字でこれを行うことができたと確信しています(他のデータセットで行ったことは確かです)。このエラーの原因は何ですか?

XYErr値は (出現順)

[0.0, 0.6931471805599453, 1.3862943611198906]
[-5.354761064902713, -6.190455611580044, -6.558604540577015]
[0.0014079400762288246, 0.0006083544693643583, 0.0002989970199491765]

そしてkappa8に等しい

これは私が当てはめようとしている関数です (主に a + 2*x)

 out = []
    for x in X:
        y = log(kappa)
        y += 4*log(pi)
        y += 2*x 
        y -= 2*log(2)
        out.append(-y)
    return np.array(out)

これが私が呼ぶ方法ですcurve_fit

 popt,pcov = curve_fit(fitFunc1,self.X[0:3],self.Y[0:3],sigma=self.Err[0:3],p0=kappa)

これは私が得るエラーです

popt,pcov = curve_fit(fitFunc1,self.X[0:3],self.Y[0:3],sigma=self.Err[0:3],p0=kappa)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 506, in curve_fit
    res = leastsq(func, p0, args=args, full_output=1, **kw)
  File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 355, in leastsq
    gtol, maxfev, epsfcn, factor, diag)
minpack.error: Error occurred while calling the Python function named _weighted_general_function

編集 1

付加kappa価値 (8)


編集 2

これは、これの最小限の実例です

#!/usr/bin/python
import numpy as np
from scipy.optimize import curve_fit
from math import log,pi
X = [0.0, 0.6931471805599453, 1.3862943611198906]
Y = [-5.354761064902713, -6.190455611580044, -6.558604540577015]
Err = [0.0014079400762288246, 0.0006083544693643583, 0.0002989970199491765]
kappa = 8

def func(X,kappa):
    out = []
    for x in X:
        y = log(kappa)
        y += 4*log(pi)
        y += 2*x 
        y -= 2*log(2)
        out.append(-y)
    return np.array(out)


popt,pcov = curve_fit(func,X,Y,sigma=Err,p0=kappa)
4

1 に答える 1

0

まず、入力配列を numpy 配列に変換します。これにより、 でブロードキャストを使用できますfunc。さらに、kappa<=0おそらく関心のあるドメイン外で評価されるのを防ぐために、適切でない値をチェックして返す必要があります。

import numpy as np
from scipy.optimize import curve_fit
X = np.array([0.0, 0.6931471805599453, 1.3862943611198906])
Y = np.array([-5.354761064902713, -6.190455611580044, -6.558604540577015])
Err = np.array([0.0014079400762288246, 0.0006083544693643583, 0.0002989970199491765])
kappa = 8.0

def func(X,kappa):
    if kappa <=0: return np.inf
    return -(np.log(kappa) + 4*np.log(np.pi) + 2*X - 2*np.log(2))

popt,pcov = curve_fit(func,X,Y,sigma=Err,p0=kappa)
于 2013-09-30T14:45:38.640 に答える