Seite 1 von 1

Die Gausche Summenformel in Python programmieren

Verfasst: Mittwoch 31. März 2021, 11:44
von CsAngel
Hallo ihr Lieben,

ich stehe momentan vor einer echt großen Herausforderung und nachdem ich mir jetzt 3h lang den Kopf zerbrochen habe möchte ich euch um Hilfe bitten.
Die Aufgabe ist es, unter einem Graphen mit n Maxima n Gausfunktionen zu legen. Momentan muss ich noch für jede Anzahl n die unten stehenen funktionen einzeln implementieren.

Code: Alles auswählen

def _1gaussian(x, amp1, cen1, sigma):
    return amp1 * (np.exp(-((x - cen1) ** 2) / (2 * (sigma ** 2))))

def _2gaussian(x, amp1, cen1, amp2, cen2, sigma):
    return amp1 * (np.exp(-((x - cen1) ** 2) / (2 * (sigma ** 2)))) + \
           amp2 * (np.exp(-((x - cen2) ** 2) / (2 * (sigma ** 2))))

def _3gaussian(x, amp1, cen1, amp2, cen2, amp3, cen3, sigma):
    return amp1 * (np.exp(-((x - cen1) ** 2) / (2 * (sigma ** 2)))) + \
           amp2 * (np.exp(-((x - cen2) ** 2) / (2 * (sigma ** 2)))) + \
           amp3 * (np.exp(-((x - cen3) ** 2) / (2 * (sigma ** 2))))

def _4gaussian(x, amp1, cen1, amp2, cen2, amp3, cen3, amp4, cen4, sigma):
    return amp1 * (np.exp(-((x - cen1) ** 2) / (2 * (sigma ** 2)))) + \
           amp2 * (np.exp(-((x - cen2) ** 2) / (2 * (sigma ** 2)))) + \
           amp3 * (np.exp(-((x - cen3) ** 2) / (2 * (sigma ** 2)))) + \
           amp4 * (np.exp(-((x - cen4) ** 2) / (2 * (sigma ** 2))))

jetzt bin ich auf der Suche nach einer Möglichkeit dieses langwierige Verfahren abzukürzen. Gibt es eine Möglichkeit dass sich die gewünschte Funktion von selbst erzeugt, und ich nur die Anzahl der Maxima eingeben muss?

Dafür wäre es wohl notwendig funktionen in funktionnen zu verschachteln, da ich zum einen eine Funktion benötige die mir die richtige Anzahl Parameter für die eigentliche Funktion liefert.

und gibt es in Python eine Möglichkeit die Gaussche Summenfunktion zu implementieren?



Vielen Dank schonmal an jeden der antwortet

Schöne Grüße
CsAngel

Re: Die Gausche Summenformel in Python programmieren

Verfasst: Mittwoch 31. März 2021, 14:51
von Sirius3
Die Idee wäre ja, gar keine verschiedenen Funktionen zu haben, sondern eine Funktion, die gleich einen Vektor mit Amplituden und Zentren bekommt:

Code: Alles auswählen

def gaussian(x, amplitudes, centers, sigma):
    x = np.asarray(x)[..., None]
    return (np.exp(-(x - centers) ** 2 / (2 * sigma ** 2)) * amplitudes).sum(axis=-1)
    
# values = gaussian(x, [amp1, amp2, amp3], [cen1, cen2, cen3], sigma)

Re: Die Gausche Summenformel in Python programmieren

Verfasst: Donnerstag 8. April 2021, 16:20
von CsAngel
Aber das funktioniert nicht :/ wenn man deine implementierung abläuft wird mir angezeigt, " x does not exist", "amp1 does not exist", etc. wo definiere ich diese werte?

Re: Die Gausche Summenformel in Python programmieren

Verfasst: Donnerstag 8. April 2021, 16:31
von kbr
Das sind genau die gleichen Werte, die Du auch an Deine oben genannten Funktionen übergibst.