python曲線擬合

2021-09-26 10:34:02 字數 3861 閱讀 8237

python中曲線擬合:

乙個是numpy中的polyfit()函式,多項式擬合,給定變數x、y、多項式次數,返回值為多項式的一維係數array;

另乙個是scipy的 optimize 模組中的 curve_fit()函式,可由自己定義擬合函式,更通用;給定變數x、y、擬合函式,返回值有兩個,popt是擬合函式中的一維引數array, pcov為擬合函式中引數的 協方差array ;

二者都是基於最小二乘法;

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""@email : [email protected]

@software: pycharm

@desc :

"""import numpy as np

import matplotlib.pyplot as plt

from scipy import optimize

motor_instruct = [

0,20,

40,60,

80,100,

120,

140,

160,

180,

200,

240,

280,

320,

360,

400,

440,

480,

520,

560,

600,

640,

680,

720,

760,

800,

840,

880,

900,

920,

940,

960,

980,

1000,

1020

]angle_40 = [

0,0,

5.4,

10.98,

17.28,

23.4,

29.52,

35.82,

41.58,

47.34,

53.64,

66.06,

78.48,

91.08,

102.78,

115.38,

127.98,

140.04,

151.92,

163.44,

174.78,

187.56,

200.16,

212.76,

225,

238.5,

252.36,

265.5,

272.52,

279.36,

286.56,

292.5,

298.62,

304.92,

306.18

]angle_212_5 = [

0,0,

4.68,

10.08,

15.3,

20.88,

27,33.3,

40.14,

47.52,

54.54,

69.84,

85.14,

100.44,

115.56,

129.96,

144,

155.16,

165.96,

177.48,

190.44,

204.66,

220.32,

236.16,

251.1,

265.68,

278.1,

290.34,

295.56,

300.6,

306,

311.4,

316.62,

321.84,

322.74

]angle_212_15 = [

0,0,

5.4,

11.16,

16.38,

21.96,

27.54,

33.3,

39.78,

46.08,

52.38,

67.68,

83.52,

98.1,

112.68,

126.36,

138.96,

150.3,

161.28,

172.62,

184.68,

198,

212.76,

227.88,

243.54,

259.38,

273.6,

287.82,

293.4,

299.16,

304.92,

309.96,

316.26,

321.48,

322.56

]def poly_fit(x, y, exponential_number=1):

f1 = np.polyfit(x[1:len(x)-1], y[1:len(y)-1], exponential_number)

print('f1 is :\n', f1)

yvals = np.polyval(f1, x[1:len(x)-1])

print('yvals is :\n', yvals)

# 繪圖

plot1 = plt.plot(x[1:len(x)-1], y[1:len(y)-1], 's', label='original values')

plot2 = plt.plot(x[1:len(x)-1], yvals, 'r', label='polyfit values')

plt.xlabel('x')

plt.ylabel('y')

plt.legend(loc=4) # 指定legend的位置右下角

plt.title('polyfitting')

plt.show()

def fit_function(x, a, b):

return [a * i + b for i in x ]

def curve_fit(x, y):

popt, pcov = optimize.curve_fit(fit_function, x[1:len(x)-1], y[1:len(y)-1])

# 獲取popt裡面是擬合係數

print "popt >> ", popt

a = popt[0]

b = popt[1]

print "協方差矩陣 pcov >> ", pcov

yvals = fit_function(x[1:len(x) - 1], a, b)

print('yvals is :\n', yvals)

# 繪圖

plot1 = plt.plot(x[1:len(x) - 1], y[1:len(y) - 1], 's', label='original values')

plot2 = plt.plot(x[1:len(x) - 1], yvals, 'r', label='polyfit values')

plt.xlabel('x')

plt.ylabel('y')

plt.legend(loc=4) # 指定legend的位置右下角

plt.title('curve_fitting')

plt.show()

if __name__=="__main__":

# poly_fit(motor_instruct, angle_212_15)

curve_fit(motor_instruct, angle_212_15)

以上兩個函式可達到同樣目的,都是對資料進行一次函式擬合;

Python曲線擬合

z1 np.polyfit x,y,5 用3次多項式擬合 p1 np.poly1d z1 print p1 在螢幕上列印擬合多項式 yvals p1 x 也可以使用yvals np.polyval z1,x plot1 plt.plot x,y,k.markersize 16,label origi...

MATLAB 曲線擬合

x0.1 0.20.15 0.0 0.2 0.3y 0.95 0.84 0.86 1.06 1.50 0.72 函式功能多項式的擬合運算 呼叫方法polyfit x,y,n x為橫座標,y為縱座標,n為擬合階數。例子x 0 0.1 2.5 1y erf x p polyfit x,y,6 p 0.0...

matlab 曲線擬合

在matlab中經常需要對資料進行曲線擬合,如最常見的多項式擬合,一般可以通過cftool呼叫曲線擬合工具 curve fit tool 通過圖形介面可以很方便的進行曲線擬合,但是有些時候也會遇到不方便用圖形工具。因此這裡簡單的記下兩種常用的擬合方法。1 多項式擬合 polyfit和polyval ...