python資料分析之(5)scipy

2021-07-26 07:50:33 字數 3023 閱讀 1290

(1)最小二乘法擬合資料

scipy中的子函式庫optimize已經提供了實現最小二乘擬合演算法的函式leastsq。函式原型為:

leastsq(func, x0, args=(), dfun=none, full_output=0, col_deriv=0, ftol=1.49012e-08, xtol=1.49012e-08, gtol=0.0, maxfev=0, epsfcn=0.0, factor=100, diag=none, warning=true)
一般我們只要指定前三個引數就可以了。

func 是我們自己定義的乙個計算誤差的函式,

x0 是計算的初始引數值

args 是指定func的其他引數

下面用乙個示例程式來解釋他的用法,同樣也是使用上面的求一次函式的擬合引數

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

import numpy as np

from scipy.optimize import leastsq

import pylab as pl

def func(x,p):

"""資料擬合所用的函式: a*sin(2*pi*k*x + theta)"""

a, k, theta = p

return a*np.sin(2*np.pi*k*x+theta)

def errors(p,y,x):

"""實驗資料x, y和擬合函式之間的差,p為擬合需要找到的係數"""

return y-func(x,p)

x = np.linspace(0,-2*np.pi,100)

a, k, theta = 10,0.34,np.pi/6 # 真實資料的函式引數

y0 = func(x,[a,k,theta]) # 真實資料

y1 = y0+2*np.random.randn(len(x)) # 加入雜訊之後的實驗資料

p0 = [7,0.2,0] # 設定第一次猜測的函式擬合引數

#呼叫leastsq進行資料擬合,errors為計算誤差的函式,p0為擬合引數的初始值

#args為需要擬合的實驗資料

plsq =leastsq(errors, p0, args=(y1, x))

print("real pares:", [a, k, theta])

print("fitting paras", plsq[0]) # 實驗資料擬合後的引數

pl.plot(x, y0, label="real data")

pl.plot(x, y1, label="noise data")

pl.plot(x, func(x,plsq[0]),label="fitting data")

pl.legend()

pl.show()

f5執行結果如下:

注:由於正弦函式具有週期性,實際上擬合引數得到的函式和真實引數對應的函式基本是一致的。

(2)非線性方程組求解

optimize庫中的fsolve函式可以用來對非線性方程組進行求解。它的基本呼叫形式如下:

fsolve(func, x0)
func(x)是計算方程組誤差的函式,它的引數x是乙個向量,表示方程組的各個未知數的一組可能解,func返回將x代入方程組之後得到的誤差;x0為未知數向量的初始值。如果要對如下方程組進行求解的話:

f1(u1,u2,u3) = 0

f2(u1,u2,u3) = 0

f3(u1,u2,u3) = 0

那麼func可以如下定義:

def func(x):

u1,u2,u3 = x

return [f1(u1,u2,u3), f2(u1,u2,u3), f3(u1,u2,u3)]

例如,求解如下方程組的解:

x1-2 = 0

x0*x0-*sin(x1*x2) = 0

x1*x2-2 = 0

from scipy.optimize import fsolve

from math import sin,cos

def f(x):

x0 = float(x[0])

x1 = float(x[1])

x2 = float(x[2])

return [

x1-2,

x0*x0-sin(x1*x2),

x1*x2-2

]result = fsolve(f, [1,1,1]) #設定初始值為[1 1 1]

print (result)

print (f(result))

執行結果如下:

>>> 

[ 0.95357088 2. 1. ]

[0.0, -6.661338147750939e-16, -4.440892098500626e-16]

參考:

資料分析5

具體 以及講解 將作者列表進行處理,並完成統計。具體步驟如下 圖是複雜網路研究中的乙個重要概念。graph是用點和線來刻畫離散事物集合中的每對事物間以某種方式相聯絡的數學模型。graph在現實世界中隨處可見,如交通運輸圖 旅遊圖 流程圖等。利用圖可以描述現實生活中的許多事物,如用點可以表示交叉口,點...

Python之資料分析(寶可夢資料分析)

在此感謝阿里雲天池平台提供的學習平台,並提供相應的教程供小白們學習資料分析。seaborn庫 seaborn 是基於 python 且非常受歡迎的圖形視覺化庫,在 matplotlib 的基礎上,進行了更高階的封裝,使得作圖更加方便快捷。即便是沒有什麼基礎的人,也能通過極簡的 做出具有分析價值而又十...

python資料分析之Numpy

numpy系統是python的一種開源的數值計算擴充套件 ndarray 多維陣列 所有元素必須是相同型別 ndim屬性,維度個數 shape屬性,各維度大小 dtype屬性,資料型別 coding utf 8 import numpy as np 生成指定維度的隨機多維資料 data np.ran...