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