Ho lequazione
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}]]
Quanto sopra è come attualmente funziona tutto e la rappresentazione grafica.
Aggiorna
In realtà ho quasi tutto funzionante Ho la linea che non funziona, lunico problema che sto riscontrando è che i primi 2 punti di dati e linizio della linea in fase di disegno inizia praticamente prima dellasse y sul grafico, quindi se guardi il grafico è inclinato a sinistra. Sto cercando di capire quale valore dovrò cambiare per riportarlo a destra e sto faticando un po . qualsiasi aiuto sarà apprezzato.
come posso inserirlo nella funzione FindFit
?
FindFit[data, model, parms];
Ho i miei dati non riesco a capire come importarli correttamente in model
e params
. Questo è il eqaution che mi è stato dato per i dati e semplicemente non so come inserirli o per mostrare che sarà una curva esponenziale.
Commenti
- Ok, ecco la mia domanda se ' tutto funziona per la maggior parte. lunica cosa che sto riscontrando è che lasse X inizia a 150 e il mio primo punto è a 113. vedi il problema, traccia dietro lasse y. Quindi, cè un modo per avviare lasse x.
- la tua domanda aggiornata riguarda solo limpostazione dellintervallo del grafico, credo. In questo caso limpostazione manuale funziona meglio, inserisci PlotRange – > {{0, 800}, {8000, 11000}} allinterno del tuo ListPlot.
Risposta
È meglio utilizzare 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]}] ]
Per vedere i parametri puoi utilizzare nlm["BestFitParameters"]
per ottenere
{a-> 0.100889, b-> 9.76356, c-> 1.62293}
Aggiorna
Usando i tuoi nuovi dati di test con @ george2079 suggerimento ottieni:
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}] ]
Commenti
- Ho problemi a portare il nonlinearModelfit su Plot perché mi dà errori di sintassi. Penso che sia qualcosa con ListPlot che non gli piace.
- Puoi aggiungere alcuni dati di esempio alla tua domanda, così possiamo testarla.
- @Bill modifica invece la tua domanda di usi ng commenti.
- Ho aggiunto i dati e le funzioni che sto cercando di utilizzare alla mia domanda originale. qualsiasi suggerimento sarà molto apprezzato.
- Funziona benissimo. lunico problema che sto avendo in realtà è far vedere la linea. Ottengo i dati da tracciare ma non ' per tracciare effettivamente la curva. qualsiasi idea di cosa stia facendo di sbagliato.
Answer
In questo caso FindFit e NonlinearModelFit non trovano subito una buona corrispondenza, è necessario fornire valori iniziali ragionevoli per i parametri:
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]
(* errore La dimensione del passo nella ricerca è diventata inferiore alla tolleranza. .. *)
FindFit[data, a + b Exp[-x /c], {{a, 100}, {b, 100}, {c, 10}}, x]
(* {a -> 8692.35, b -> 1910.19, c -> 161.513} *)
Questa è una bella corrispondenza, mi dispiace non posso pubblicare grafica.
Quindi come si creano i valori di partenza? Ho tracciato lespressione e ho giocato con le costanti a mano finché non sono arrivato abbastanza vicino. Scusa se questo non è soddisfacente, ma ladattamento dei dati è davvero un po unarte che va oltre ciò che la matematica può fare in modo completamente automatico.
Commenti
- In realtà ho la linea da rappresentare graficamente con il tuo codice, ma continuo a ottenere un grafico distorto. qualsiasi idea.