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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章