2016-05-04 8 views
0

Also meine geplottete Linie der besten Passform für eine Kurve ist am zweiten Punkt abgeschnitten und ich für das Leben von mir kann nicht herausfinden, warum.Python scipy Curve fit für quadratische Funktion stoppt früh

from matplotlib import pyplot as plt 
import numpy as np 
from scipy.optimize import curve_fit 
accuracy = 250 

def quadratic_function(E,a,b,c):  
    B = (a*(E**2.0)) + (b*E) + c 
    return B 

Implantation_E = np.array([5.0,10.0,15.0,20.0,25.0]) 

plt.figure() 
plt.title("A plot showing how the Magnetic Field varies with Implantation Energy") 
plt.ylabel("Magnetic Field Strength (T)") 
plt.xlabel("Implantation Energy (J)") 
plt.plot(Implantation_E,D_array[0],'bo') 
parameters, var = curve_fit(quadratic_function,Implantation_E,D_array[0], absolute_sigma = True, p0 = (1.0,1.0,1.0)) 
newTime = np.linspace(0,10,accuracy) 
newAsymmetry = quadratic_function(newTime, *parameters) 
plt.plot(newTime, newAsymmetry) 
plt.show() 

(Hinweis D_array [0]: [0,00523265 0,00860683 0,0109838 0,01241191 0,01284149] )

Image of plotted graph

Antwort

0

Ihre ursprüngliche Datenbereich in ihrem Argument von 5 bis 25. Aber Ihr fit geht nur zu 10. Ändern Sie die newTime Definition, um 25 zu erreichen, und Ihnen geht es gut.

from matplotlib import pyplot as plt 
import numpy as np 
from scipy.optimize import curve_fit 
%matplotlib inline 

accuracy = 250 

def quadratic_function(E,a,b,c):  
    B = (a*(E**2.0)) + (b*E) + c 
    return B 

dd= np.array([ 0.00523265, 0.00860683 ,0.0109838, 0.01241191 ,0.01284149]) 
Implantation_E = np.array([5.0,10.0,15.0,20.0,25.0]) 

plt.plot(Implantation_E,dd,'b-o',lw=15,ms=10,alpha=0.3) 

parameters, var = curve_fit(quadratic_function,Implantation_E,dd,absolute_sigma = True, p0 = (1.0,1.0,1.0)) 
newTime = np.linspace(0,10,accuracy) 
newAsymmetry = quadratic_function(newTime, *parameters) 

plt.plot(newTime, newAsymmetry,'r.',ms=1) 
plt.show() 

enter image description here

... 
newTime = np.linspace(3,25,accuracy) 
... 

enter image description here

+0

Großen Dank viel, würden Sie nicht wissen, geschehen, warum, wenn ich dies auch hinzufügen, es es nur bewirkt, dass die Punkte verbinden, wenn ich Fehler hinzufügen ? – user3740357

+0

plt.errorbar (Implantation_E, D_array [0], xerr = 0.0, yerr = D_array [1]) – user3740357

+0

D_array [1] = 1.66096809d-05 1.53262814d-05 1.62771310d-05 1.88651405e-05 1.56005258d-05 – user3740357