Modellierung eines großen Datensatzes mit einer lorentzischen Funktion

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Modellierung eines großen Datensatzes mit einer lorentzischen Funktion

by Anonymous » 21 Feb 2025, 02:00

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

Top