Это довольно конкретная проблема. Я надеялся, что сообщество сможет мне помочь. Заранее спасибо.Фиксация кривых с большим количеством точек данных
Итак, у меня есть 2 набора данных, один экспериментальный, а другой основан на уравнении. Я пытаюсь подогнать свои данные к этой кривой и, следовательно, получить недостающие переменные, которые меня интересуют. А именно, a и b в функции Ebfit.
Вот код:
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as spys
from scipy.optimize import curve_fit
time = [60,220,520,1840]
Moment = [0.64227262,0.468318916,0.197100772,0.104512508]
Temperature = 25 # Bake temperature in degrees C
Nb = len(Moment) # Number of bake measurements
Baketime_a = time #[s]
N_Device = 10000 # No. of devices considered in the array
T_ambient = 273 + Temperature
kt = 0.0256*(T_ambient/298) # In units of eV
f0 = 1e9 # Attempt frequency
def Ebfit(x,a,b):
Eb_mean = a*(0.0256/kt) # Eb at bake temperature
Eb_sigma = b*Eb_mean
Foursigma = 4*Eb_sigma
Eb_a = np.linspace(Eb_mean-Foursigma,Eb_mean+Foursigma,N_Device)
dEb = Eb_a[1] - Eb_a[0]
pdfEb_a = spys.norm.pdf(Eb_a,Eb_mean,Eb_sigma)
## Retention Time
DMom = np.zeros(len(x),float)
tau = (1/f0)*np.exp(Eb_a)
for bb in range(len(x)):
DMom[bb]= (1 - 2*(sum(pdfEb_a*(1 - np.exp(np.divide(-x[bb],tau))))*dEb))
return DMom
a = 30
b = 0.10
params,extras = curve_fit(Ebfit,time,Moment)
x_new = list(range(0,2000,1))
y_new = Ebfit(x_new,params[0],params[1])
plt.plot(time,Moment, 'o', label = 'data points')
plt.plot(x_new,y_new, label = 'fitted curve')
plt.legend()
Основная проблема, которую я имею, что подгонка данных в функции не работает, когда я использую большое количество очков. В приведенном выше коде Когда я использую 4 точки (время & момент), этот код работает нормально.
Я получаю следующие значения для a и b.
массив ([+29,11832766, 0,13918353])
Ожидаемые значения для это (23-50) и Ь (0,06 - 0,15). Таким образом, эти значения находятся в допустимом диапазоне. Это соответствующий график:
Однако, когда я использую свои фактические экспериментальные нормализованные данные с примерно 500 точками.
EDIT: Эти данные:
нормализованных данных
https://www.dropbox.com/s/64zke4wckxc1r75/Normalized%20Data.csv?dl=0
необработанных данных
https://www.dropbox.com/s/ojgse5ibp59r8nw/Data1.csv?dl=0
Я получаю следующие значения и сюжет для и б, которые находятся вне допустимого диапазона,
массив ([- +13,76687781, -12,90494196])
Я знаю, что эти значения являются неправильными, и если бы я сделать это вручную (медленно регулируя значения получить надлежащую подгонку) было бы около a = 30,1 и b = 0,09. И когда график выглядит так:
Я попытался изменить исходные значения для угадывать & б, другие множества экспериментальных данных, а также и другие предложения в аналогичных нитей. Кажется, что никто не работает для меня. Любая помощь, которую вы можете предоставить, оценивается. Благодарю.
. . . .
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Модель Я пытаюсь подобрать данные, которые вытекает из следующего уравнения:
где Dmom = 1 - 2 * PSW
в - значение Eb, а b - значение Sigma, где Eb имеет диапазон значений b y функция плотности вероятности и 4 раза значений сигмы (т. Foursigma). Затем это распределение суммируется для использования для окончательного уравнения.
Ваша ссылка Google Drive, кажется, ограничено. Это намеренно? –
@ ВласСоколов эй извините за это. Я обновил ссылку. Пожалуйста, попробуйте еще раз. – xplodnow
Данные момента в файле варьируются от -3e-5 до 1.65e-5, но в соответствии с вашим набором данных с 500 точками диапазоны приближаются к одному. Это объясняет несоответствие соответствия? Нормализуете ли вы данные где-то между их установкой и их отображением на экране? –