渡されたラムダ関数に基づいて最小二乗法を実行する関数を作成しようとしています。ラムダ関数への初期推定のために、ラムダ関数が取る引数の数と同じ長さのゼロの配列を作成したいと考えています。したがって、線形の場合は[0,0]が必要で、二次の場合は[0,0,0]が必要です。
#polynomial functions
linear = lambda p, x: p[0] * x + p[1]
quadratic = lambda p, x: p[0] * x**2 + p[1] * x + p[2]
cubic = lambda p, x: p[0] * x**3 + p[1] * x**2 + p[2] * x + p[3]
#polynomial functions forced through 0
linear_zero = lambda p, x: p[0] * x
quadratic_zero = lambda p, x: p[0] * x**2 + p[1] * x
cubic_zero = lambda p, x: p[0] * x**3 + p[1] * x**2 + p[2] * x
def linFit(x, y,fitfunc):
errfunc = lambda p, x, y: fitfunc(p, x) - y
ここでは、ゼロの配列を作成します。しかし、この時点では p は定義されていません。したがって、len(p) は機能しません。
init_p = np.array(zeros(len(p))) #bundle initial values in initial parameters
p1, success = optimize.leastsq(errfunc, init_p.copy(), args = (x, y))
return p1