SciPy——數值計算庫

1.最小二乘法擬合函數

使用leastsq()對數據進行最小二乘擬合,leastsq()中需要的參數爲誤差計算函數以及待定參數的初始值,其可對線性函數進行擬合

簡單的代碼示例如下:y=kx+b

import numpy as np
from scipy.optimize import leastsq

X = np.array([8.19,2.72,6.39,8.71,4.7,2.66,3.78])
Y = np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05])

#函數用來計算以p爲參數的直線和原始數據之間誤差
def residuals(p):
    k,b=p
    return Y-(k*X + b)

#leastsq使得residuals()的輸出數組平方和最小,參數初始值爲[1,0]
r = leastsq(residuals,[1,0])
k,b=r[0]
print("k=",k,"b=",b)

2.非線性方程組求解

調用fsolve()可以求解非線性方程組,fsolve()工作的原理爲計算方程組在某點對各個未知數變量的偏導數,組成雅可比矩陣。
例如:給定一個方程組
5*x1+3=0
4*x0^2-2*sin(x1,x2)=0
x1*x2-1.5=0

代碼:

from scipy.optimize import fsolve
from math import sin

#計算方程組的誤差函數
def f(x):
    x0,x1,x2=x.tolist()
    return [
        5*x1+3,
        4*x0*x0 -2*sin(x1*x2),
        x1*x2-1.5
    ]
#fsolve()所需參數爲:誤差函數,以及未知數初始值
result = fsolve(f,[1,1,1])
print(result)

3.數理統計

3.1 正態分佈

from scipy import stats
from math import sin
import numpy as np
import matplotlib.pyplot as pl
from pylab import *

X = stats.norm(loc=1.0,scale=2.0)
temp = X.rvs(size=10000)#輸出對隨機變量X隨機取樣所得到的隨機序列
#輸出隨機序列的方差
print(np.var(temp))
#輸出隨機序列的期望值
print(np.mean(temp))
#得到隨機序列的期望和標準差
print(stats.norm.fit(temp))

#繪製概率密度理論值
t=np.arange(-10,10,0.01)
pl.plot(t,X.pdf(t))
pl.show()

#繪製統計得到的概率密度
#對數組temp進行直方圖統計,將temp的取值範圍分爲100個區間,並統計temp中每個只落入區間的次數
#histogram()返回兩個數組p,t2,其中p表示各個區間取樣值出現的頻數,t2表示區間
p,t2=np.histogram(temp,bins=100,normed=True)
t2 = (t2[:-1]+t2[1:])/2
pl.plot(t2,p)
pl.show()
發佈了162 篇原創文章 · 獲贊 40 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章