Modellierung eines großen Datensatzes mit einer lorentzischen FunktionPython

Python-Programme
Anonymous
 Modellierung eines großen Datensatzes mit einer lorentzischen Funktion

Post by Anonymous »

Ich versuche, einen großen Datensatz mit der Lorentzischen Funktion zu modellieren. PNG " /> < /p>
Ich konnte dies nicht tun, der Datensatz, den ich auf einem grundlegenden Pyplot gesehen habe, hat es Multiple Maxima und Minima. Um sie auf einen Lorentzianer anzupassen, bin ich mir nicht sicher, ob ich sie planen muss, indem ich die Daten um jede Minima spleißen oder ob ich die Daten als Ganzes eingeben muss. Unabhängig davon habe ich den Code hier unten und die Ausgabe darunter gepostet. Ein bisschen Informationen, die Daten, die ich mussten, um durch einen Faktor in meinem Experiment zu finden zu sein, und ich verwendete einen Savitzky-Golay-Filter, um die Daten zu glätten.
Ich arbeite im Wesentlichen nur mit Minimas. < /P >

Code: Select all

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post