Jeg har ligningen
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}]]
Ovenstående er, hvordan jeg i øjeblikket har alt i gang og graftegning.
Opdatering
Jeg har faktisk fået næsten alt til at fungere. Jeg har den linie, bieing drwan, det eneste jeg har, er at de første 2 datapunkter og begyndelsen af linjen tegnes startes faktisk før y-aksen på grafen, så hvis du ser på grafen, er den skæv mod venstre. Jeg prøver at forstå, hvilken værdi jeg bliver nødt til at ændre for at flytte dette tilbage til højre, og jeg kæmper lidt. enhver hjælp vil blive værdsat.
hvordan kan jeg indtaste det i FindFit
-funktionen?
FindFit[data, model, parms];
Jeg har mine data, jeg kan bare ikke finde ud af, hvordan jeg får dette ind i model
og params
korrekt. Dette er eqaution, der blev givet mig for dataene, og bare ikke ved, hvordan man indtaster det eller for at vise, at det bliver en eksponentiel kurve.
Kommentarer
- Ok, her er mit spørgsmål jeg ' har fået alt til at fungere for det meste. det eneste, jeg har et problem, er at X-aksen starter ved 150, og mit første punkt er ved 113. du ser problemet, det plotter bag y-aksen. Så er der en måde at starte x-aksen på.
- dit opdaterede spørgsmål handler bare om at indstille plotområdet, tror jeg. I dette tilfælde fungerer det manuelt at indstille det bedst, sæt PlotRange – > {{0, 800}, {8000, 11000}} inde i din ListPlot.
Svar
Det er bedre at bruge NonlinearModelFit
:
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]}] ]
For at se parametre kan du bruge nlm["BestFitParameters"]
for at få
{a-> 0.100889, b-> 9.76356, c-> 1.62293}
Opdater
Ved hjælp af dine nye testdata med @ george2079 tip får du:
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}] ]
Kommentarer
- Jeg har problemer med at få den ikke-lineære Modelfit til at plotte, det giver mig syntaksfejl. Jeg synes, det er noget med ListPlot, som det ikke kan lide.
- Du kan tilføje nogle eksempeldata til dit spørgsmål, så vi kan teste det.
- @Bill rediger dit spørgsmål i stedet af usi ng kommentarer.
- Jeg har tilføjet data og de funktioner, som jeg prøver at bruge til mit originale spørgsmål. eventuelle forslag vil blive meget værdsat.
- Dette fungerer godt. det eneste problem, jeg har, er faktisk at få linjen til at vise. Jeg får dataene til at plotte, men ikke ' t får faktisk kurven til at plotte. nogen idé om, hvad jeg måske gør forkert.
Svar
I dette tilfælde finder FindFit og NonlinearModelFit ikke let en god pasform, skal du angive rimelige startværdier for parametrene:
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]
(* fejl Trinstørrelsen i søgningen er blevet mindre end tolerancen. .. *)
FindFit[data, a + b Exp[-x /c], {{a, 100}, {b, 100}, {c, 10}}, x]
(* {a -> 8692.35, b -> 1910.19, c -> 161.513} *)
Dette ser godt ud, undskyld, jeg kan ikke sende grafik.
Så hvordan finder du ud af startværdier? Jeg plottede udtrykket og spillede med konstanterne i hånden, indtil jeg kom temmelig tæt på. Undskyld, hvis det ikke er tilfredsstillende, men der er virkelig lidt kunst til datatilpasning, der går ud over, hvad mathematica kan gøre på en fuldautomatisk måde.
Kommentarer
- Jeg fik faktisk linjen til at tegne graf med din kode, men jeg får stadig en skæv graf. eventuelle ideer.