功能:最小二乘法擬合一元線性多項式 p(1)*x**n+p(2)*x**(n-1)*...*p(n-1)*x+p(n),指數不能是小數
模組:numpy
**如下:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1, 17, 1)
y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, 9.70, 9.86, 10.00, 10.20, 10.32, 10.42, 10.50, 10.55, 10.58, 10.60])
z1 = np.polyfit(x, y, 3)#用3次多項式擬合,輸出係數從高到0
p1 = np.poly1d(z1)#使用次數合成多項式
yvals=p1(x)
plt.plot(x,y,'*')
plt.plot(x,yvals)
plt.show()
計算結果:
#np.poly1d函式解釋
1)p1 = np.poly1d([1,2,3])使用係數合成多項式 1*x**2+2*x**1+3*x**0
2)p1 = np.poly1d([1,2,3],true)使用根合成多項式(x-1)*(x-2)*(x-3)
3)p1(0.5)表示當x = 0.5時,多項式的值為多少
4)p1.r表示當多項式為 0 時,此等式的根
5)p1.c表示生成多項式的係數陣列
6)p1.order表示返回最高項的次方數
7)p1[1]表示返回第一項的係數
8)多項式支援實數的四則運算
功能:最小二乘法擬合一元任意函式 y=f(x)
模組:from scipy import optimize
**如下:
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize
def func(x,a,b):#需要擬合的函式
return a*np.exp(b/x)
# 擬合點
x0 = [1, 2, 3, 4, 5]
y0 = [1, 3, 8, 18, 36]
a4, b4= optimize.curve_fit(func, x0, y0)[0]
x4 = np.arange(1, 6, 0.01)
y4 = a4*np.exp(b4/x4)
plt.figure()
plt.scatter(x0[:], y0[:], 25, "red")
plt.plot(x4, y4, "purple")
plt.show()
計算結果:
存在問題:bounds=[,],指定引數範圍,長度是1或者和引數一樣多,為1時表示所有引數都是這個數,[0,[20,30]]即0功能:最小二乘法任意函式
模組:from scipy import optimize
**如下:
import numpy as np
from scipy import optimize # 最小二乘法擬合
import matplotlib.pyplot as plt # python matplotlib 繪圖
from mpl_toolkits.mplot3d import axes3d # 3d 繪圖
def func(x, y, p):
""" 資料擬合所用的函式:z=ax+by
:param x: 自變數 x
:param y: 自變數 y
:param p: 擬合引數 a, b
"""a, b, c = p
return a * x**2 + b * y +c*x
def residuals(p, z, x, y):
""" 得到資料 z 和擬合函式之間的差
"""print(p)
return z - func(x, y, p)
def main():
x = np.arange(5)
y = np.arange(5)
z = np.array([2, 4, 7, 7, 10]) # 資料隨便取的
plsq = optimize.leastsq(residuals, np.array([0, 0, 0]), args=(z, x, y)) # 最小二乘法擬合
# [0, 0] 為引數 a, b 初始值
a, b, c= plsq[0] # 獲得擬合結果
print("擬合結果:\na = {}".format(a))
print("b = {}".format(b))
print("c = {}".format(c))
# 繪圖
xp = np.linspace(-1, 6, 100)
yp = np.linspace(-1, 6, 100)
x, y = np.meshgrid(xp, yp)
z = func(x, y, [a, b, c]) # 帶入擬合得到的 a, b, c
fig = plt.figure(figsize=(8, 6))
ax = axes3d(fig) # 3d 繪圖
ax.plot_su***ce(x, y, z, alpha=0.5)
ax.scatter(x, y, z, color="r")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
plt.show()
main()
2 Python內建函式
位元組陣列和位元組,3個引數 source,encoding,errors 當source引數為字串時,encoding引數也必須提供,函式將字串使用str.encode方法轉換成位元組陣列 當3個引數都不傳的時候,返回長度為0的位元組陣列 當source引數為整數時,返回這個整數所指定長度的空位元...
python入門2 Python入門2
1列表和元組 列表 當索引超出了範圍時,python會報乙個indexerror錯誤 usr bin env python3 coding utf 8 列印s的1,v,9.注意 索引計數從 0 開始 s 1,2,3 a v b 7,8,9 列印1 print s 0 0 列印v print s 1 ...
2 Python 函式作為返回值
函式作為返回值 高階函式除了可以接收函式作為引數外,還可以把函式作為結果值返回。我們來實現乙個可變引數的求和。通常情況下,求和的函式是這樣定義的 def lazy sum args def sum ax 0 for n in args ax ax n return ax return sum f l...