Sie haben hier ein etwas heikles Problem: abhängig von Ihren x-Werten (Wellenlängen) kann der Exponent 1/(lamb*T)
oft zu groß sein, um ausgewertet zu werden, und Sie werden einen Überlauf bekommen. (Oder zu klein, und es wird immer zu Null
Es könnte gut sein, um zu versuchen, und teilen Sie Ihre Planck-Funktion in drei Teile:.
- ein Teil, wo
lamb * T
groß ist, sagen> 100. Sie Rayleigh-Jeans-Näherung kann dann verwendet werden.
- ein Teil, wo
lamb * T
klein ist, sagen < 1e-4. Sie dann die Annäherung Wien nutzen können.
- für den Zwischenteil, verwenden Sie die Funktion selbst.
Das sollte Überläufe verhindern.
gute Passform Ergebnisse zu erhalten, ist es wünschenswert, Parameter und Daten nicht Ergebnisse in den Grenzen der Maschine laufen zu lassen, entweder zu groß oder zu klein. Da die Anpassung oft zu Zwischenergebnissen führt, die weit außerhalb des Eingabebereichs (Parameter oder Daten) liegen, sind Sie sicher, dass alles von der Ordnungseinheit ist (dies ist einfach das Ergebnis von "(hu)man(s) being the measure of all things", und Computer werden von und für Menschen hergestellt).
Beginnend mit der Original-Planck-Funktion:
alpha = 2*h*c*c
beta = h*c/k
return alpha/np.power(lamb,5.0) * 1/(np.exp(beta/(lamb*T)) - 1)
Beachten Sie, dass Alpha nur eine Normalisierung ist. Lassen Sie es hier draußen und wenden Sie es am Ende auf Ihre Fit Ergebnisse an. Während der Anpassung haben Sie dort keinen großen oder kleinen Alpha-Wert, nur 1
. Dieser ist einfach.
Für Beta, Sie können dies nicht wirklich tun: Sie können es nicht außerhalb der Exponential-Modus, und wenden Sie es nach der Tat.Dafür ist die dreiteilige Funktion gedacht, um Probleme dort zu umgehen.
Sie können aber auch Ihre x-Werte normalisieren (und möglicherweise sollten). Nehmen wir an, Ihre Eingabe ist in der Reihenfolge 1e-9, also Nanometer in Metern ausgedrückt. Machen Sie Nanometer zu Ihrer Einheit und multiplizieren Sie alle Werte mit 1e9. Jetzt sind die x-Eingabewerte von der Ordnungseinheit.
Das bedeutet natürlich, dass sich Ihr Alpha ändert; es gibt einen lambd**-5
Faktor dort, wenn also lambd
um 1e9 steigt, dann ändern sich hier Dinge durch 1/1e-(9*5) = 1e45
. Faktor 1e45 in Alpha.
Für Beta gibt es etwas ähnliches: Sie multiplizieren beta
mit 1e9.
Schließlich könnten Sie auch versuchen, "T
" zu "normalisieren". 5000 ist nicht so weit von der Ordnungseinheit entfernt, aber Sie könnten es in Int 5 umwandeln und den Faktor 1000 in beta
setzen.
Setzen Sie auch alpha
und beta
außerhalb die Funktion: Sie sind im Wesentlichen Konstanten und müssen nicht jedes Mal ausgewertet werden, wenn die Funktion aufgerufen wird. Das macht die Anpassung schneller.
Hinweis: Wenn Sie Alpha aus der Funktion entfernen und erst nach der Anpassung verwenden, vergessen Sie nicht, auch die Approximationen von Wien und Rayleigh-Jeans zu entfernen. Wie unten angegeben: Test (z. B. manuell vergleichen Sie die Ergebnisse um die Region, wo Sie von einer Formulierung zur anderen gehen, und sehen, dass es übereinstimmt. Oder einfach die Kurve über einen breiten Bereich auf einem logarithmischen Plot zeichnen)!
Haftungsausschluss: Ich habe dies nicht getestet und möglicherweise Zeichen falsch verstanden. Dreifach überprüfen, dass Sie 1e45 und nicht 1e-45, und dito für 1e9 oder 1e-9 benötigen. Einfache Überprüfung: Geben Sie einige anständige Zahlen mit der Wellenlänge in Metern ein, sehen Sie, welchen Fluss Sie erhalten, geben Sie dann die Wellenlänge in Nanometer mit den zusätzlichen Faktoren ein und sehen Sie, ob Sie den gleichen Fluss erhalten.
Auch: schnappen Sie sich ein Stück Papier und arbeiten Sie die Änderungen Schritt für Schritt aus. Tun Sie das hier, und Sie können dieselbe Methode auch für andere Funktionen und Anpassungsprobleme anwenden.
'a' und' b' könnten für eine anständige Passform zu klein sein. Versuchen Sie, diese auch aus Ihrer Fit-Funktion herauszufiltern oder sie mit 1 gleichzusetzen und nach der Anpassung zu renormieren. Eine Anpassung funktioniert im Allgemeinen am besten, wenn sowohl x, y als auch Fit-y in der Reihenfolge 1 liegen; Andernfalls können Probleme mit der Maschinenpräzision auftreten. – Evert
@Evert, lassen Sie mich sehen, ob ich meine Magie arbeiten kann. – DarthLazar
@Evert Guter Vorschlag, jetzt ist der schwierige Teil nur alles zu konvertieren. Du warst doch Hilfe. Sie können eine Antwort senden und ich werde es hochladen, wenn Sie möchten. – DarthLazar