Моделирование большого набора данных с использованием Lorentzian функции [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Моделирование большого набора данных с использованием Lorentzian функции [закрыто]

Сообщение Anonymous »

Я пытаюсь моделировать большой набор данных, используя функцию Lorentzian
< /p>
Пока что я не смог этого сделать, набор данных, который я имел, когда я смотрю на основном пипплоте, имеет Несколько максимумов и минимумов. Чтобы соответствовать им на Лоренциане, я не уверен, нужно ли мне построить их, сплачивая данные вокруг каждого минимума или мне нужно вводить данные в целом. Независимо от того, что я опубликовал код здесь ниже и вывод под ним.
У меня не очень много опыта в программировании, поэтому код определенно плохо структурирован. Немного информации, данные, которые мне нужно было масштабировать, на фактор, обнаруженный в моем эксперименте, и я использовал фильтр Savitzky-Golay, чтобы сгладить данные.
Я по сути работаю только с минимумами. < /P >

Код: Выделить всё

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.signal import savgol_filter, find_peaks

#Lorentzian
def lorentzian(x, u, T, A):
return (A/np.pi) * ( (T/2) / ((x -u) **2 + (T/2)**2) )

## Load data
file_path = "Franck-Hertz/Mercury/VaDecreasing.csv"
data = pd.read_csv(file_path)

#parameters
x_data = data.Pot1
y_data = data.Pot2

# Filter
pot1Smooth = savgol_filter(x_data, window_length = 21, polyorder =2)
pot2Smooth = savgol_filter(y_data, window_length=21, polyorder=2)
pot2Smooth_invert = -pot2Smooth
peaks, properties = find_peaks(pot2Smooth_invert, prominence=0.05, distance = 10)

x_minima = []
for i in peaks:
x_minima.append(x_data[i])

#Scaling
x = [57.2, 51.4, 46.5, 41.0, 36.3, 31.2, 26.2, 21.0, 16.20, 11.30, 6.8]
x.sort()
Ratio = np.mean(x)/ np.mean(x_minima)
newPot1 = Ratio * pot1Smooth

#new Minima
minimax = newPot1[peaks]
minimax.sort()
minimayb = pot2Smooth[peaks]
minimayb.sort()
minimay = np.delete(minimayb, [5,13])
minima = np.delete(minimax,[5,13])
print(minima)

#temp fit
plt.plot(newPot1, pot2Smooth)
plt.scatter(minima,minimay)
#curve fitting
uGuess = []
TGuess = 2.0
AGuess = 1.0
for i in range(len(minima)):
uGuess = minima[i]
pGuess = [ uGuess, TGuess, AGuess ]
popt, pcov = curve_fit(lorentzian, newPot1, pot2Smooth, p0 =pGuess)
u, T = popt[0], popt[1]
print(u, T)
out



Подробнее здесь: https://stackoverflow.com/questions/794 ... n-function
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»