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()