Ich habe die Gleichung
y = a + b Exp[-x/c] data = {{462.36, 8872}, {408.18, 8780}, {374.4, 8915}, {322.8, 8937}, {274.00, 8919}, {243.03, 9114}, {209.32, 9277}, {178.91, 9394}, {140.71, 9508}, {113.08, 9592}}; nlm = FindFit[data, y = a + b Exp[-x/c], {{a, 100}, {b, 100}, {c, 10}}, x] Show[ ListPlot[data, PlotStyle -> {Darker@Green, PointSize[0.03]}], Plot[y/. nlm, {x, 1, 600}]]
So funktioniert derzeit alles und grafische Darstellung.
Update
Ich habe tatsächlich fast alles zum Laufen gebracht. Das einzige Problem, das ich habe, sind die ersten beiden Datenpunkte und der Zeilenanfang Das Zeichnen beginnt tatsächlich vor der y-Achse im Diagramm. Wenn Sie sich das Diagramm ansehen, wird es nach links verschoben. Ich versuche zu verstehen, welchen Wert ich ändern muss, um dies wieder nach rechts zu verschieben, und ich kämpfe ein wenig. Jede Hilfe wird geschätzt.
Wie kann ich das in die Funktion FindFit
eingeben?
FindFit[data, model, parms];
Ich habe meine Daten. Ich kann einfach nicht herausfinden, wie ich diese in die model
und params
richtig einfügen kann Gleichung, die mir für die Daten gegeben wurde und ich weiß nicht, wie ich sie eingeben oder zeigen soll, dass es sich um eine Exponentialkurve handelt.
Kommentare
- Ok, hier ist meine Frage, ich ' habe zum größten Teil alles zum Laufen gebracht. Das einzige, was ich habe, ist, dass die X-Achse bei 150 beginnt und mein erster Punkt bei 113. Sie sehen das Problem, es wird hinter der y-Achse dargestellt. Gibt es also eine Möglichkeit, die x-Achse zu initiieren?
- Bei Ihrer aktualisierten Frage geht es meiner Meinung nach nur darum, den Plotbereich festzulegen. In diesem Fall können Sie PlotRange – > {{0, 800}, {8000, 11000}} in Ihren ListPlot einfügen.
Antwort
Es ist besser, NonlinearModelFit
zu verwenden:
data = {{0, 10}, {1, 5}, {3, 2}, {5, 1}, {6, 0}, {7, 0}}; nlm = NonlinearModelFit[data, a + b Exp[-x/c], {a, b, c}, x] Show[Plot[nlm[x], {x, 0, 7}] ,ListPlot[data, PlotStyle -> {Darker@Green, PointSize[0.03]}] ]
Um Parameter anzuzeigen, können Sie nlm["BestFitParameters"]
um
{a-> 0.100889, b-> 9.76356, c-> 1.62293}
Update
Wenn Sie Ihre neuen Testdaten mit dem Tipp @ george2079 verwenden, erhalten Sie:
data = {{462.36,8872},{408.18,8780},{374.4,8915},{322.8,8937}, {274.00,8919},{243.03,9114},{209.32,9277},{178.91,9394}, {140.71,9508},{113.08,9592}}; nlm=NonlinearModelFit[data, a + b Exp[-x /c], {{a, 100}, {b, 100}, {c, 10}},x] Show[ListPlot[data, PlotStyle -> {Darker@Green, PointSize[0.03]}] ,Plot[nlm[x],{x,1,600}] ]
Kommentare
- Ich habe Probleme, das nichtlineare Modell zum Plotten zu bringen. Es gibt mir Syntaxfehler. Ich denke, es ist etwas mit dem ListPlot, das ihm nicht gefällt.
- Sie können einige Beispieldaten an Ihre Frage anhängen, damit wir sie testen können.
- @Bill bearbeiten Sie stattdessen Ihre Frage von usi ng Kommentare.
- Ich habe meiner ursprünglichen Frage Daten und die Funktionen hinzugefügt, die ich verwenden möchte. Vorschläge werden sehr geschätzt.
- Dies funktioniert hervorragend. Das einzige Problem, das ich habe, ist, die Linie zu zeigen. Ich bekomme die Daten zum Plotten, aber ' bekomme die Kurve nicht zum Plotten. eine Idee, was ich falsch machen könnte.
Antwort
In diesem Fall finden FindFit und NonlinearModelFit nicht ohne weiteres Für eine gute Anpassung müssen Sie angemessene Startwerte für die Parameter angeben:
data = {{462.36, 8872}, {408.18, 8780}, {374.4, 8915}, {322.8, 8937}, {274.00, 8919}, {243.03, 9114}, {209.32, 9277}, {178.91, 9394}, {140.71, 9508}, {113.08, 9592}} FindFit[data, a + b Exp[-x /c], {a, b, c}, x]
(* Fehler Die Schrittgröße bei der Suche ist kleiner als die Toleranz geworden. .. *)
FindFit[data, a + b Exp[-x /c], {{a, 100}, {b, 100}, {c, 10}}, x]
(* {a -> 8692.35, b -> 1910.19, c -> 161.513} *)
Dies ist eine gut aussehende Passform. Es tut mir leid, dass ich keine Grafiken veröffentlichen kann.
Wie kommen Sie auf die Startwerte? Ich zeichnete den Ausdruck und spielte mit den Konstanten von Hand, bis ich ziemlich nahe kam. Es tut uns leid, wenn dies nicht zufriedenstellend ist, aber die Datenanpassung ist wirklich eine Kunst, die über das hinausgeht, was Mathematica vollautomatisch kann.
Kommentare
- Ich habe tatsächlich die Linie, die mit Ihrem Code grafisch dargestellt werden soll, aber ich erhalte immer noch eine verzerrte Grafik. irgendwelche Ideen.