curve_fit из scipy.optimize не работает

#python #scipy

#python #scipy

Вопрос:

Я хочу создать подходящую кривую с моими необработанными данными, но я получаю такие сообщения об ошибках :

 <ipython-input-6-47cbf1e1c239>:9: RuntimeWarning: invalid value encountered 
in true_divide
  return I0*((np.sin(beta)/beta)**2)*(np.cos(gamma))**2
/Users/username/opt/anaconda3/lib/python3.8/site- 
packages/scipy/optimize/minpack.py:828: OptimizeWarning: Covariance of the 
parameters could not be estimated
warnings.warn('Covariance of the parameters could not be estimated')
 

Ниже приведен мой код и разброс для необработанных данных:

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

def sinc(x, b, h, I0, phi):
    beta = 0.5 * b * np.sin(x-phi)
    gamma = 0.5 * h * np.sin(x-phi)
    return I0*((np.sin(beta)/beta)**2)*(np.cos(gamma))**2

                             
data = pd.read_excel('14_laser_doubleslit.xlsx')
display(data)

x = np.array(data.iloc[1:101,0])
y = np.array(data.iloc[1:101,1])

popt, pcov = curve_fit(sinc, x, y)
print(popt)
print(pcov)

plt.scatter(x,y,marker='.')
plt.plot(x,sinc(x,*popt),color='blue',linewidth =2)
plt.show
 

введите описание изображения здесь

Комментарии:

1. Пожалуйста, предоставьте образец вашего x и y массивов, чтобы мы могли воспроизвести

2. Кроме того, поскольку есть true_divide ошибка, I0*((np.sin(beta)/beta)**2)*(np.cos(gamma))**2 я предполагаю, что вы должны указать beta ограничение> 0

3. @MaxPierini я изменил границы некоторых переменных в качестве вашего комментария, и теперь это работает! Большое спасибо! 🙂