2014-06-08 2 views
-1

J'ai quelques données (x et y coordonnées) provenant d'une étude et je dois les tracer et de trouver la meilleure courbe qui correspond aux données. Mes courbes sont:Python ajustement polynomial, la loi de puissance et exponentielle des données

  • polynôme jusqu'au 6ème degré;
  • loi de puissance;
  • exponentielle.

Je suis en mesure de trouver la meilleure solution pour polynomiale avec

while(i < 6): 
    coefs, val = poly.polyfit(x, y, i, full=True) 

et je prends le degré qui minimise val.

Quand je dois ajuster une loi de puissance (la plus probable dans mon étude), je ne sais pas comment le faire correctement. C'est ce que j'ai fait. J'ai appliqué la fonction log à tous x et y et j'ai essayé de l'adapter avec un polynôme linéaire. Si l'erreur (val) est plus faible que les autres polynômes essayés auparavant, je choisis la fonction de loi de puissance (naturellement si m de la droite est négatif). Ai-je raison?

Maintenant, comment puis-je reconstruire ma loi de puissance à partir de la ligne y = mx + q pour la dessiner avec les points d'origine? J'ai aussi besoin d'afficher la fonction trouvée.

J'ai essayé avec:

def power_law(x, m, q): 
    return q * (x**m) 

utilisant

x_new = np.linspace(x[0], x[-1], num=len(x)*10) 
y1 = power_law(x_new, coefs[0], coefs[1]) 
popt, pcov = curve_fit(power_law, x_new, y1) 

mais la courbe résultante ne convient pas les données.

+2

Qu'est-ce que * "ne semble pas bien fonctionner" *? Erreurs (fournir un retraçage complet)? Sortie inattendue (fournir les entrées et la sortie attendue et réelle)? – jonrsharpe

+0

Ceci est une question méthodologique, je ne demande pas un code complet, le code n'est pas nécessaire ici. Je ne le demande pas. Il y a une question "Ai-je raison, comment reconstruire la loi de pouvoir?" – Nadir

+0

La courbe ne correspond pas aux données, donc, probablement, mon idée n'est pas la bonne, sur le plan méthodologique. – Nadir

Répondre

2

Si vous utilisez google l'expression "ajustement de courbe", mon site web est le meilleur retour - donc je connais un peu ce genre de chose.

Je recommande de ne pas faire de log ou autre transformation des données, car scipy a un solveur non linéaire qui est parfait pour ce type de raccord. Regardez:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

J'utilise le solveur non linéaire scipy sur mon site web, qui peut directement répondre à vos données en ligne. Essayez:

http://zunzun.com/Equation/2/Power/Standard%20Power/

et d'assurer qu'il n'y avait pas expérimentalement introduit offset, comme une tension continue de décalage par exemple, essayez:

http://zunzun.com/Equation/2/Power/Standard%20Power%20With%20Offset/

Un problème vous pouvez courir pour avec L'ajustement non linéaire est le choix d'un ensemble de paramètres de départ approprié pour le solveur non linéaire pour affiner itérativement. Le code source sous licence BSD du site Web utilise un algorithme génétique pour déterminer automatiquement un point de départ. Vous pouvez donc essayer vous-même. Il est livré avec de nombreux exemples, y compris un "fonction finder" qui correspond à des centaines d'équations et les classe - que vous pouvez également essayer en ligne.Le code source est au Google Code Repository à:

https://code.google.com/p/pyeq2/

ou des liens vers des distributions source zippée et tgz'd sont au bas de chaque page sur le site Web.

S'il vous plaît me contacter directement si vous avez des questions, je serai heureux de vous aider. J'aime ce genre de choses.

James [email protected]

+1

zunzun.com est parti, les liens ne fonctionnent pas – wordsforthewise

+0

Zunzun a migré vers github. [google search results] (https://www.google.com/search?q=zunzun%20github&ie=utf-8&oe=utf-8) – mikey

+0

Je suis devenu trop aveugle pour que le site fonctionne, toutes mes excuses. Je peux toujours voir le texte agrandi avec mon œil droit, donc je peux lire et répondre aux emails. Le code source du site zunzun.com se trouve sur https://github.com/zunzun/zunzunsite/ (Python 2.X) et sur https://github.com/zunzun/zunzunsite3/ (Python 3). –

Questions connexes