使用python通过点拟合曲线

时间:2019-05-23 18:21:10

标签: python numpy scipy curve-fitting

大家好,我正在尝试使用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

1 个答案:

答案 0 :(得分:3)

我使用的数据与您粘贴在问题中的数据完全相同,保存在txt文件中。我没有任何错误!我认为您的原始文件有问题。

这是输出。

enter image description here