2

SciPy のcurve_fit方法を使用して汎用適合多項式を生成しようとしています。現在の簡略化されたコードは次のようになります。

import functools
import scipy.optimize

def __fit_polynom_order_6(self, data):
    def func(x, c1=None, c2=None, c3=None, c4=None, c5=None, c6=None):
        return c1*x + c2*x**2 + c3*x**3 + c4*x**4 + c5*x**5 + c6*x**6

    x, y = data[:,0], data[:,1]
    popt, pcov = scipy.optimize.curve_fit(func, x, y)

    func_fit = functools.partial(func, c1=popt[0],c2=popt[1],c3=popt[2],c4=popt[3],c5=popt[4],c6=popt[5])

    return func_fit

ここで、次数の多項式で近似を行い、多項式を自動的に生成し、上記の関数と本質的に同じことを任意の多項式でn行う汎用関数を生成したいと考えています。__fit_polynom_order_n(self, n, data)

これを行う私の試みはすべて無駄になりました。手伝ってくれますか?前もって感謝します!

4

1 に答える 1

2

そのための関数np.polyfitが既にあります。

fit = np.polyfit(x, y, n)

一方、 your にfuncは定数項がありません。それはわざとですか?

独自のpolyfitタイプのメソッドを作成したい場合は、 np.polyfit のソース コードを調べてください。問題が線形行列方程式として設定され、 より汎用的な ではなく、np.linalg.lstsqscipy.optimize.curve_fitで解決されていることがわかります。

# set up least squares equation for powers of x
lhs = vander(x, order)
rhs = y
c, resids, rank, s = lstsq(lhs, rhs, rcond)

参考資料:

  • np.vander -- あはは、これは x で多項式を評価するために使用できます。定数項を削除したい場合は、 によって返された一番右の列を切り取る必要がありますnp.vander
于 2013-09-19T08:04:42.177 に答える