2017-07-10 4 views
0

J'essaie d'appliquer une courbe de meilleur ajustement aux données ci-dessous. Je m'attends à ce que les données suivent une courbe de p1=p/dist^2, où p serait mon seul paramètre. Je n'obtiens pas tout à fait la courbe que je m'attendais, aucune idée de ce qui pourrait aider?Optimisation Avertissement pour exponentielle scipy.optimize.curve_fit

Merci beaucoup, faites-moi savoir si je dois fournir autre chose pour répondre à cette question!

dist = (1,2,3,3) 
ypos = np.arange(len(dist)) 
power1 = [0.33, 0.017, 0.0011, 0] 
power2 = [05.87, 3.34, 1.65, .035] 

def func(p,dist): 
    return p/(dist**2) 
popt, pcov = optimize.curve_fit(func, dist, array1,p0=[5]) 
print(popt) 
+0

S'il vous plaît ajouter un lien vers les données. –

+1

Données ajoutées dans mon message initial. –

Répondre

0

Quand je fais un diagramme de dispersion des données que vous avez publié, il ressemble plus à une impulsion ou équation pic serait nécessaire, et je ne pouvais pas obtenir un bon ajustement en utilisant l'équation que vous avez dans votre code. Voici mon code et mon image de nuage de points.

import numpy as np 
#import matplotlib 
import matplotlib.pyplot as plt 

frequency_a = np.array([1.0, 2.6, 5.1, 7.6, 1.01, 1.26, 1.51, 1.76, 2.01, 2.26]) 
dB_a = np.array([0.000, 0.001, 0.045, 0.099, 0.413, 1.004, 2.277, 1.529, 1.031, 0.919]) 


plt.plot(frequency_a, dB_a, 'o') # plot the raw data 
plt.ylim(-0.5, 2.0) 
plt.xlim(0.0, 8.0) 
plt.show() 

scatterplot

+0

D'accord, c'est un excellent point! Avez-vous des conseils sur la façon dont je peux ajouter une ligne de tendance basée sur cela? Je n'ai jamais fait aucune sorte de best-fit en python avant et je comprends le concept, mais je suis assez perdu sur le codage lui-même. –

+0

Je ne vois aucune sorte de tendance linéaire dans le diagramme de dispersion, donc je ne peux pas donner de conseils sur la façon d'en faire un ici. –

+0

Je cherche une relation 1/(x^2). Par exemple, a/(x^2) où a serait mon seul paramètre. –