Я пытаюсь написать сценарий подгонки кривой и хи-квадрат.у меня есть некоторые примерные данные, но по какой-то причине подгонка не получается так, как ожидалось, и я получаю значения хи-квадрат, которые не имеют смысла (я уже рассчитал их с помощью Matlab, так что я знаю, чего ожидать).Я понятия не имею, почему скрипт не работает, так как он уже работал нормально со значениями игрушек.Вот сценарий:
import matplotlib.pyplot as plt
import matplotlib as matp
import numpy as np
import scipy.optimize as opt
import math
import pandas as pd
from scipy import stats
#Read the csv file to a DataFrame
df = pd.read_csv('HarmonicData.csv')
#Define data
xdata = df.m
dX = df.dm
ydata = df.Tavg
dY = df.dTavg
def func(x, a, b):
return a/x**2 + b
#Title and axis title Variables
title = 'Fit'
ytitle = 'Tavg [sec]'
xtitle = 'r [cm]'
#Define plot and add errorbars
fig, ax = plt.subplots()
ax.errorbar(xdata, ydata, yerr=dY, xerr=dX, fmt='o', ms=2)
#Axis Title Setting
ax.set_title(title)
ax.set_ylabel(ytitle)
ax.set_xlabel(xtitle)
#Curve parameter initial guess
paraguess = ([0.230000, 0.300000])
#Curve Fit
parafit, pcov = opt.curve_fit(func, xdata, ydata, p0=paraguess)
#Reduced Chi squared
chi_sq = np.sum(((func(xdata, *parafit)-ydata)/dX)**2)
red_chi_sq = (chi_sq)/(len(xdata)-len(parafit))
#Print results
print('initial guess for parameters: a= %.8f b= %.8f' % tuple(paraguess))
print ('The degrees of freedom for this test is', len(xdata)-len(parafit))
print ('The chi squared value is: ',("%.2f" %chi_sq))
print ('The reduced chi squared value is: ',("%.2f" %red_chi_sq))
#Show and plot
plt.plot(xdata, func(xdata, *parafit), 'r-', label='fit: a=%.3f b=%.3f' % tuple(parafit))
plt.legend()
plt.show()
Я понятия не имею, почему это произошло, и я не могу найти причину этого.Я хотел бы помочь, так как я не очень разбираюсь в scipy / python в целом