Попытка найти самую дальнюю точку данных из линейной линии наилучшего соответствия, поэтому можно использовать ее в качестве начального предположения для дополнительного соответствия Гауссу. Нужна самая далекая точка данных, которую можно использовать как приблизительное предположение для оптимизации. Требовать х значение точки данных. def fit_func (x, a, mu, sig, m, c): # функция для гауссовой и линейной подгонки gaus = a * sp.exp (- (x-mu) 2 / (2 * sig 2))) line = m * x + c return gaus + line def maximize (x, y, m, c): расстояние = (sp.sqrt (x 2 + y 2) -sp.sqrt (x** 2 + ((m * x + c) ** 2))) max_xval = [sp.argmax (distance)] возвращает max_xval для f в A: с открытым (f, 'r') в виде файла: line1 = file.readline () line1_split = line1.split (',') if 'Ответ инструмента: Хороший' в line1_split [3]: # фильтрация хороших данных из плохой печати (f) print (line1_split [3]) # good_file_data.append (f) J, Z = sp.loadtxt (f, delimiter = ',', skiprows = 2, unpack = True) # чтение хороших данных plt.plot (J, Z) максимизировать (J, Z, (Z [999] -Z)[0]) / (J [999] -J [0]), 50) initial_guess = [30, развернуть, 1, (Z [999] -Z [0]) / (J [999] -J [0]), 50] po, po_cov = sp.optimize.curve_fit (fit_func, J, Z, initial_guess, maxfev = 2000000000) # график построения графика наилучшего соответствия и разброса plt.plot (J, fit_func (J, po [0],po [1], po [2], po [3], po [4])) plt.plot (sp.unique (J), sp.poly1d (sp.polyfit (J, Z, 1)) (sp. уникальный (J))) K = [J, Z] plt.xlabel ('Длина волны / нм') plt.ylabel ('Intensity / AU ') plt.show () Возвращает ошибку типа с плавающей запятой и функцию, так как maximize не возвращает значение.