0

私はいくつかの作業を行い、最終的にその形状がsinc関数のように見えるデータを取得し、numpyを使用してグラフをsinc関数に適合させる方法を検索しようとしましたが、これが見つかりました:

Pythonで変数Sinc関数を適合させる

見つかったのは良いことですが、なぜそれが非常に複雑に見えるのでしょうか。

sinc関数のような曲線を与えるグラフをフィッティングするためのよりフレンドリーな方法を教えてください。

4

1 に答える 1

2

あなたが与えたリンクで提供されている答えをフィッティングするのに十分です。しかし、あなたはそれが難しいと言うので、正弦曲線の形のデータとデータに適合するユーザー定義関数のサンプルコードがあります。

コードは次のとおりです。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import math

xdata = np.array([2.65, 2.80, 2.96, 3.80, 3.90, 4.60, 4.80, 4.90, 5.65, 5.92])
ydata = np.sin(xdata)

def func(x,p1,p2,p3): # HERE WE DEFINE A SIN FUNCTION THAT WE THINK WILL FOLLOW THE DATA DISTRIBUTION
    return p1*np.sin(x*p2+p3)

# Here you give the initial parameters for p0 which Python then iterates over
# to find the best fit
popt, pcov = curve_fit(func,xdata,ydata,p0=(1.0,1.0,1.0)) #THESE PARAMETERS ARE USER DEFINED

print(popt) # This contains your two best fit parameters

# Performing sum of squares
p1 = popt[0]
p2 = popt[1]
p3 = popt[2]
residuals = ydata - func(xdata,p1,p2,p3)
fres = sum(residuals**2)

print(fres) #THIS IS YOUR CHI-SQUARE VALUE!

xaxis = np.linspace(1,7,100) # we can plot with xdata, but fit will not look good 
curve_y = func(xaxis,p1,p2,p3)
plt.plot(xdata,ydata,'*')
plt.plot(xaxis,curve_y,'-')
plt.show()

ここに画像の説明を入力

こちらのサイトからもご覧いただけます!! また、curve_fit がどのように機能するかを段階的に学習します。

于 2014-06-20T19:08:39.317 に答える