Jai léquation
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}]]
Voici comment tout fonctionne actuellement et la création de graphiques.
Mise à jour
En fait, presque tout fonctionne. Jai la ligne en train de bieing drwan le seul problème que je rencontre est que les 2 premiers points de données et le début de la ligne en cours de dessin, tout commence avant laxe y sur le graphique, donc si vous regardez le graphique, il est incliné vers la gauche. Jessaie de comprendre quelle valeur je devrai changer pour faire reculer cela vers la droite et je me bats un peu. toute aide sera appréciée.
comment puis-je saisir cela dans la fonction FindFit
?
FindFit[data, model, parms];
Jai mes données. Je ne peux tout simplement pas trouver comment les intégrer correctement dans model
et params
. Voici le attention qui ma été donnée pour les données et je ne sais pas comment les saisir ou pour montrer que ce sera une courbe exponentielle.
Commentaires
- Ok, voici ma question: ' tout fonctionne pour la plupart. la seule chose que jai un problème est que laxe X commence à 150 et mon premier point est à 113. vous voyez le problème, il trace derrière laxe des y. Alors, y a-t-il un moyen dinitier laxe des X?
- Votre question mise à jour concerne simplement la définition de la plage de tracé, je pense. Dans ce cas, le définir manuellement fonctionne le mieux, placez PlotRange – > {{0, 800}, {8000, 11000}} dans votre ListPlot.
Réponse
Il est préférable dutiliser 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]}] ]
Pour voir les paramètres, vous pouvez utiliser nlm["BestFitParameters"]
pour obtenir
{a-> 0.100889, b-> 9.76356, c-> 1.62293}
Mise à jour
En utilisant vos nouvelles données de test avec le conseil @ george2079, vous obtenez:
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}] ]
Commentaires
- Jai du mal à obtenir le nonlinearModelfit pour Plot, il me donne des erreurs de syntaxe. Je pense que cest quelque chose avec le ListPlot qui ne lui plaît pas.
- Vous pouvez ajouter des exemples de données à votre question, afin que nous puissions la tester.
- @Bill modifie votre question à la place de usi ng commentaires.
- Jai ajouté des données et les fonctions que jessaie dutiliser à ma question initiale. toute suggestion sera grandement appréciée.
- Cela fonctionne très bien. le seul problème que jai est de faire afficher la ligne. Jobtiens les données à tracer mais ne ' t obtenir réellement la courbe à tracer. toute idée de ce que je peux faire mal.
Réponse
Dans ce cas, FindFit et NonlinearModelFit ne trouvent pas facilement un bon ajustement, vous devez fournir des valeurs de départ raisonnables pour les paramètres:
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]
(* error Le pas dans la recherche est devenu inférieur à la tolérance. .. *)
FindFit[data, a + b Exp[-x /c], {{a, 100}, {b, 100}, {c, 10}}, x]
(* {a -> 8692.35, b -> 1910.19, c -> 161.513} *)
Cest un bon ajustement, désolé, je ne peux pas publier de graphiques.
Alors, comment trouvez-vous les valeurs de départ? Jai tracé lexpression et joué avec les constantes à la main jusquà ce que je sois assez proche. Désolé si cela nest pas satisfaisant, mais il existe vraiment un art de lajustement de données qui va au-delà de ce que Mathematica peut faire de manière entièrement automatique.
Commentaires
- Jai en fait la ligne à graver avec votre code, mais jobtiens toujours un graphique biaisé. toutes les idées.