Скриптовый скрипт не работает должным образом даже после работы со значениями игрушек - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь написать сценарий подгонки кривой и хи-квадрат.у меня есть некоторые примерные данные, но по какой-то причине подгонка не получается так, как ожидалось, и я получаю значения хи-квадрат, которые не имеют смысла (я уже рассчитал их с помощью 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 в целом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...