3

これらの関数を単純化/結合する単一の関数を作成しようとしています:

def func0(x, a0):
    return a0

def func1(x, a0, a1):
    return a0 + a1*x

def func2(x, a0, a1, a2):
    return a0 + a1*x + a2*x**2

def func3(x, a0, a1, a2, a3):
    return a0 + a1*x + a2*x**2 + a3*x**3

このような関数に:

def func[n](x,a0,a1,...,an):
    return a0*x**0 + a1*x**1 + a2*x**2 + ... + an*x**n

これの目的は、引数の数が最適化するパラメーターの数として使用される呼び出し可能な関数を必要とする scipy.optimize.curve_fit と共に使用することです。

例えば:

from scipy.optimize import curve_fit
from matplotlib.pyplot import *
from numpy import *

def func[n](x, *list( vars()['a'+str(i)]      for i in range(0, n+1) ) ):
    return       sum( vars()['a'+str(i)]*x**i for i in range(0, n+1) )

xdata = array([1,2,3,4])
ydata = array([0.012,1.456,4.673,8.927])

popt,pcov = curve_fit(func[2],xdata,ydata)

plot(xdata, ydata, 'o')
plot(arange(0,5,.1), func[2](arange(0,5,.1),*popt))
show()

func[n] の非常に奇妙な定義が理にかなっている場合

いくらかの創造性とラムダの使用により、これは可能であると推測していますが、私はそれを理解することができませんでした.それが可能であることを願っています.

助けてくれてありがとう:)

PS。読みやすくするためにコーディングを色分けする方法はありますか?

4

1 に答える 1