Python 为什么我的代码不适合正确的sersic函数?

Python 为什么我的代码不适合正确的sersic函数?,python,gaussian,astropy,Python,Gaussian,Astropy,我试图将表面亮度曲线拟合到一个星系,我要么得到一个错误,说明:未找到最佳参数:调用函数的次数已达到maxfev=800,要么就是它与数据不匹配。以前有没有人这样做过,可以提供帮助 我的代码: from astropy.io import ascii import numpy as np import matplotlib.pyplot as plt import scipy.optimize from astropy.io import fits import math #plate scal

我试图将表面亮度曲线拟合到一个星系,我要么得到一个错误,说明:未找到最佳参数:调用函数的次数已达到maxfev=800,要么就是它与数据不匹配。以前有没有人这样做过,可以提供帮助

我的代码:

from astropy.io import ascii
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize
from astropy.io import fits
import math

#plate scale for CofC Observatory
f = 3962                #mm
p = 206265./f           # arcsec/mm
p = p * 9.e-6           #arcsec/pix
finalp = p * 20         #pc/pix, sombrero = 97, ngc720 = 105, ngc6946 = 20
finalp = finalp/1000    #kpc

#importing files
data_b = ascii.read('/Users/research/Desktop/Dowd.A/Final/data/NGC6946/ngc6946_b_profile.dat')
data_g = ascii.read('/Users/research/Desktop/Dowd.A/Final/data/NGC6946/ngc6946_g_profile.dat')
data_r = ascii.read('/Users/research/Desktop/Dowd.A/Final/data/NGC6946/ngc6946_r_profile.dat')


#Converting x-axis from pixels to kpc
r_b = data_b['x']*finalp
r_g = data_g['x']*finalp
r_r = data_r['x']*finalp

y_b = data_b['y'] - 412.    #final number is background, different for each filter
y_g = data_g['y'] - 1288.
y_r = data_r['y'] - 1364.

r_b = np.array(r_b)
y_b = np.array(y_b)
r_g = np.array(r_g)
y_g = np.array(y_g)
r_r = np.array(r_r)
y_r = np.array(y_r)

#fitting the model for sersic and exponential
def GaussPoly(r, munaught, beta, n0):
    return munaught * np.exp(-beta*(r/re)**(1/n0))

munaught = 8       #change for each filter 
beta = .001            #change for each filter
r = r_b
n0 = 1.              #1 for spiral and 4 for elliptical
re = r_b[0]

nlfit, nlpcov = scipy.optimize.curve_fit(GaussPoly, r_b, y_b, p0=[munaught, beta, n0])
munaught, beta, n0 = nlfit

x600 = np.arange(0,10)
fit = GaussPoly(x600, munaught, beta, n0)

plt.plot(x600, fit, color = 'orange')


#commented out filters to see one graph at a time
plt.plot(r_b,y_b, 'b.')
plt.xlabel('Avg Radius (kpc)')
plt.ylabel('Surface Brightness (counts/pixel**2)')
plt.savefig('ngc6946_radial_profile_b')

很难回答,拟合方法不收敛的原因有很多。没有数据,很难猜测。该函数似乎是的包装器。您应该能够提供相同的关键字,尤其是
maxfev
,以增加呼叫数。另外,确保在离最佳位置不远的地方开始安装。原始数据的绘图和初始猜测可能很有用。查看数据的绘图也可能有帮助。尽管您发布的用于加载和绘制数据的所有代码也与问题无关。请尽量将您的问题简化为一个问题,可能包括一些重现该问题的数据。或者像我说的,至少是一个阴谋。例如,如果您的高斯分布有一些长尾巴,则可能有助于将拟合数据切割为几个标准偏差。Astropy也有一个内置的,尽管它的大多数算法都来自
scipy。优化
,因此您可能会遇到同样的问题。