Minulla on yhtälö
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}]]
Yllä on, miten minulla on tällä hetkellä kaikki toiminnassa ja kuvaajat.
Päivitä
Minulla on melkein kaikki toiminnassa, minulla on theline bieing drwan, ainoa asia, joka minulla on, on se, että ensimmäiset 2 datapistettä ja rivin alku piirretty todellinen alku ennen kuvaajan y-akselia, joten jos tarkastelet kuvaajaa, se on vinossa vasemmalle. Yritän ymmärtää, mitä arvoa minun on muutettava, jotta voisin siirtyä takaisin oikealle, ja kamppailen hieman. mitään apua arvostetaan.
miten voin syöttää sen funktioon FindFit
?
FindFit[data, model, parms];
Minulla on tietoni, en vain osaa selvittää, miten tämä viedään oikein model
– ja params
-palveluihin. Tämä on varoitus, joka annettiin minulle tiedoista, enkä vain osaa syöttää niitä tai osoittaa, että se tulee olemaan eksponentiaalinen käyrä.
Kommentit
- Ok, tässä on kysymykseni, olen saanut kaiken toimimaan suurimmaksi osaksi '. Ainoa asia, jolla minulla on ongelma, on se, että X-akseli alkaa 150: stä ja ensimmäinen pisteeni on kohdassa 113. näet ongelman, se juontaa y-akselin taakse. Joten, onko olemassa tapa aloittaa x-akseli.
- päivitetty kysymyksesi on vain mielestäni juonealueen asettaminen. Tässä tapauksessa manuaalinen asettaminen toimii parhaiten, laita PlotRange – > {{0, 800}, {8000, 11000}} ListPlotisi sisälle.
vastaus
On parempi käyttää 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]}] ]
Jos haluat nähdä parametrit, voit käyttää nlm["BestFitParameters"]
saadaksesi
{a-> 0.100889, b-> 9.76356, c-> 1.62293}
Päivitä
Käyttämällä uusia testitietojasi @ george2079 -vinkillä saat:
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}] ]
kommentit
- Minulla on vaikeuksia saada epälineaarinenModelfit piirtämään se aiheuttaa minulle syntaksivirheitä. Luulen, että se on jotain ListPlotin kanssa, että se ei pidä.
- Voit liittää kysymykseesi joitain näytetietoja, jotta voimme testata niitä.
- @Bill muokkaa kysymystäsi sen sijaan usista Kommentteja.
- Olen lisännyt tietoja ja toimintoja, joita yritän käyttää alkuperäiseen kysymykseeni. ehdotuksia arvostetaan suuresti.
- Tämä toimii hyvin. Ainoa asia, joka minulla on, on saada linja näyttämään. Saan tiedot piirtämään, mutta älä ' t saa käyrää piirtämään. mitään käsitystä siitä, mitä voin tehdä väärin.
Vastaa
Tällöin FindFit ja NonlinearModelFit eivät löydä helposti hyvä sovitus, sinun on annettava kohtuulliset alkuarvot parametreille:
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]
(* virhe Haun vaihekoko on pienempi kuin toleranssi. .. *)
FindFit[data, a + b Exp[-x /c], {{a, 100}, {b, 100}, {c, 10}}, x]
(* {a -> 8692,35, b -> 1910,19, c -> 161,513} *)
Tämä on hyvännäköinen, valitettavasti en voi lähettää grafiikkaa.
Joten miten keksit lähtöarvot? Suunnittelin ilmeen ja soitin vakioiden kanssa käsin, kunnes pääsin melko lähelle. Anteeksi, jos se ei ole tyydyttävää, mutta tietojen sovittamisessa on todella vähän taidetta, joka ylittää sen, mitä Mathica voi tehdä täysin automaattisella tavalla.
Kommentit
- Sain itse asiassa viivan kuvaajaan koodisi kanssa, mutta saan edelleen vinon kaavion. ideoita.