Mám rovnici
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}]]
Výše je uvedeno, jak mám aktuálně vše funkční a grafy.
Aktualizace
Ve skutečnosti mám téměř všechno funkční Mám linii bieing drwan jediný problém, který mám, je to, že první 2 body dat a začátek řádku vykreslování všeho začíná před osou y v grafu, takže pokud se podíváte na graf, je zkosený doleva. Snažím se pochopit, jakou hodnotu budu muset změnit, abych to posunul zpět doprava, a trochu se potýkám. jakákoli pomoc bude oceněna.
Jak to mohu zadat do funkce FindFit
?
FindFit[data, model, parms];
Mám svá data, jen nemůžu přijít na to, jak je dostat do model
a params
správně. Toto je eqaution, která mi byla dána pro data, a jen nevím, jak je zadat nebo ukázat, že to bude exponenciální křivka.
Komentáře
- Dobře, tady je moje otázka, ' mám vše, co z větší části funguje. Jediná věc, kterou mám problém, je, že osa X začíná na 150 a můj první bod je na 113. Vidíte problém, vykresluje se za osou y. Existuje tedy způsob, jak inicializovat osu x.
- vaše aktualizovaná otázka se týká nastavení rozsahu grafu. V tomto případě nejlepší nastavení funguje nejlépe, vložte PlotRange – > {{0, 800}, {8000, 11000}} do svého ListPlot.
Odpověď
Je lepší použít 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]}] ]
Chcete-li zobrazit parametry, můžete použít nlm["BestFitParameters"]
získat
{a-> 0,100889, b-> 9,76356, c-> 1,62293}
Aktualizovat
Pomocí nových testovacích dat s tipem @ george2079 získáte:
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}] ]
Komentáře
- Mám potíže se získáním nelineárního modelu Modlotit, který mi dává syntaktické chyby. Myslím, že se ListPlotu něco nelíbí.
- K otázce můžete přidat několik ukázkových dat, abychom ji mohli otestovat.
- @Bill místo toho upravte svou otázku z USA ng komentáře.
- K původní otázce jsem přidal data a funkce, které se snažím použít. jakékoli návrhy budou velmi oceněny.
- Funguje to skvěle. Jediný problém, který mám, je ve skutečnosti ukázat linku. Získávám data k vykreslení, ale ' t ve skutečnosti nezískám křivku k vykreslení. jakýkoli nápad, co dělám špatně.
Odpověď
V tomto případě FindFit a NonlinearModelFit nenaleznou snadno dobře se hodí, je třeba zadat přiměřené počáteční hodnoty parametrů:
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]
(* chyba Velikost kroku ve vyhledávání je menší než tolerance. .. *)
FindFit[data, a + b Exp[-x /c], {{a, 100}, {b, 100}, {c, 10}}, x]
(* {a -> 8692,35, b -> 1910,19, c -> 161,513} *)
To vypadá dobře, omlouvám se, že nemůžu zveřejňovat grafiku.
Jak tedy přijdete s počátečními hodnotami? Vykreslil jsem výraz a hrál si s konstantami ručně, dokud jsem se nedostal docela blízko. Omlouváme se, pokud je to neuspokojivé, ale opravdu existuje trochu umění pro přizpůsobení dat, které jde nad rámec toho, co dokáže matematika plně automatickým způsobem.
Komentáře
- Ve skutečnosti jsem dostal řádek do grafu s vaším kódem, ale stále dostávám zkosený graf. nějaké nápady.