大家好,我正在尝试使用python拟合点的曲线,但是我没有成功,我是使用python的初学者,我发现它没有帮助我。
我有一组数据,我想分析哪一行最能描述它(不同阶次的多项式)。
在numpy
中,对于多项式拟合,有polyfit()
和polyval()
。但是我收到此错误,并且我不知道这意味着什么:
File "plantilla.py", line 28, in <module>
polinomio=np.polyfit(x,y,5)
File "/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py", line 581, in polyfit
c, resids, rank, s = lstsq(lhs, rhs, rcond)
File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 1867, in lstsq
0, work, lwork, iwork, 0)
ValueError: On entry to DLASCL parameter number 4 had an illegal value
import pandas as pd
from matplotlib import pyplot as plt
from scipy.optimize import curve_fit
import numpy as np
import sympy as sym
#----------------------------------------------------
data=pd.read_csv('radiacion.dat',header=None,delim_whitespace=True)
x=data.ix[:,0]
y=data.ix[:,1]
"""
x=np.array(x,dtype=float)
y=np.array(y,dtype=float)
"""
#----------------------------------------------------
plt.plot(x,y,'r',label="Original Data")
plt.title('Radiacion')
plt.xlabel('t(s)' ,fontsize=14,fontweight='bold')
plt.ylabel('G(w/m)',fontsize=14,fontweight='bold')
plt.xticks(fontsize=10,fontweight='bold')
plt.yticks(fontsize=10,fontweight='bold')
plt.show ()
#plt.hold (True)
#----------------------------------------------------
polinomio=np.polyfit(x,y,5)
print (polinomio)
yP=np.polyval(poli,x)
plt.plot(x,yp,'b+',label="fitted cuerve")
我希望像这样,可以在特定的x
值下评估多项式。
p[0]*x**(N-1) + p[1]*x**(N-2) + ... + p[N-2]*x + p[N-1]
我的输入数据:
25200 17
25800 38
26400 58
27000 93
27600 129
28200 163
28800 192
29400 234
30000 329
30600 387
31200 411
31800 460
32400 513
33000 569
33600 576
34200 635
34800 645
35400 683
36000 715
36600 747
37200 780
37800 810
38400 833
39000 862
39600 885
40200 910
40800 929
41400 945
42000 955
42600 974
43200 986
43800 985
44400 999
45000 1001
45600 993
46200 993
46800 999
47400 992
48000 985
48600 980
49200 978
49800 963
50400 959
51000 939
51600 917
52200 884
52800 881
53400 860
54000 845
54600 820
55200 812
55800 767
56400 720
57000 650
57600 619
58200 595
58800 541
59400 533
60000 504
60600 456
61200 389
61800 320
62400 285
63000 243
63600 279
64200 231
64800 192
65400 137
66000 91
66600 58
67200 38
67800 22
68400 9