Есть ли функция для нахождения самой дальней точки данных по линейной линии графика наилучшего рассеяния - PullRequest
0 голосов
/ 07 ноября 2019

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

1 Ответ

0 голосов
/ 07 ноября 2019

Я собираюсь предположить, что xvals, yvals и yfit - все массивы. Предполагая, что я не пропускаю что-то здесь, вы можете попробовать что-то вроде этого:

import numpy as np

# create an array of delta values
delta_fit = abs(yvals - yfit)

# find the index where the maximum delta point is located
max_idx = np.argmax(delta_fit)

# get the xvals value at max_idx
max_xval = xvals[max_idx]

Это предполагает, что ваши массивы имеют одинаковую форму, и вы заинтересованы в определении максимального расстояния от подгонки для данного местоположения индекса.

...