python科学计算_scipy_常数与优化
scipy在numpy的基础上提供了众多的数学、科学以及工程计算中常用的模块;是强大的数值计算库;
1. 常数和特殊函数
scipy的constants模块包含了众多的物理常数:
import scipy.constants as C
C.c #真空中的光速
C.h #普朗克常数
C.pi #圆周率
在C.physical_constants字典中,通过物理常数的名称访问该物理常数,如:
C.physical_constants['speed of light in vacuum']
(299792458.0, 'm s^-1', 0.0)
C.physical_constants['Planck constant']
(6.62606957e-34, 'J s', 2.9e-41)
C.physical_constants['electron mass']
(9.10938291e-31, 'kg', 4e-38)
返回一个包含三个值的元组,分别表示常数值、单位、误差;
scipy的special模块包含基本的数学函数、特殊数学函数、以及numpy中的所有函数;
由于浮点数的精度限制,有些函数的无法精确地表示结果,如log(1+1e-20),1+1e-20非常接近1,得到的结果将是0,而不是精确的值;log1p(1e-20)则可以得到精确的值:
import math
import scipy.special as S
math.log(1+1e-20,10)
0.0
S.log1p(1e-20)
9.9999999999999995e-21
同时,查看文档可以了解到:log1p是一个ufunc;
2. 优化:optimize
scipy的optimize模块提供了许多数值优化算法;
1. 最小二乘拟合
optimize.leastsq()对数据进行最小二乘拟合计算。leastsq()使用时,需要传递计算误差的函数和待确定的参数的初始值p即可;
直线拟合:
def residuals(p):
k, b = p
return Y - (k*X - b)
X 、 Y 为两个一维数组,表示点的X轴和Y轴位置;
r = leastsq(residuals, [1,0])
leastsq()函数传入误差计算函数和初始值[1,0],该初始值将作为误差计算函数的第一个参数传入;
计算的结果r是一个包含两个元素的元组,第一个元素是一个数组,表示拟合后的参数k、b;第二个元素如果等于1、2、3、4中的其中一个整数,则拟合成功,否则将会返回mesg ;更多的返回值见文档;
其他函数拟合(以正弦波拟合为例):
def func(x,p):
A,k,theta = p
return A*np.sin(2*np.pi*k*x+theta)
def residuals(p,y,x):
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 = [10, 0.3, 0.5] #猜测拟合参数,即初始值
plsq = leastsq(residuals, p0, args=(y1,x)) # 除了初始值之外,还调用了args参数,用于指定residuals中使用到的其他参数(直线拟合时直接使用了X,Y的全局变量),同样也返回一个元组,第一个元素为拟合后的参数数组;
import pylab as pl
pl.plot(x,y0,label=u'真实数据')
pl.plot(x,y1,label=u'噪声数据')
pl.plot(x,func(x,plsq[0]),label=u'拟合结果')
pl.legend()
pl.show()
拟合的过程中,猜测的初始值非常重要,需要先将噪声数据画出来,然后大致估计相位和频率,推出估计的初始值,再进行拟合;

2. 函数的最小值
optimize模块还提供了许多求函数最小值的算法:fmin、fmin_powell、fmin_cg、fmin_bfgs等,这些函数通过传入目标函数和初始值对最小值进行拟合,fmin*()这个类型的函数还提供一个fprime的参数,该参数为计算目标函数对各个自变量偏导数的函数。
3. 非线性方程组的求解
optimize模块中的fsolve()函数可以求解非线性方程组,该函数传入一个计算方程组误差的函数,和参数的初始值如:
def func(x):
u1,u2,u3 = x
return [f1(u1,u2,u3),f2(u1,u2,u3),f3(u1,u2,u3)]
result = fsolve(func,[1,1,1])
以上过程可以求:
f1(u1,u2,u3) = 0
f2(u1,u2,u3) = 0
f3(u1,u2,u3) = 0
的非线性方程组的解;
python科学计算_scipy_常数与优化的更多相关文章
- Python 科学计算-介绍
Python 科学计算 作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/ 最新版本的 IPython notebook 课程文 ...
- Python科学计算类库
Numpy是什么 Numpy是一个开源的Python科学计算库.使用Numpy,就可以很自然地使用数组和矩阵.Numpy包含很多实用的数学函数,涵盖线性代数运算.傅里叶变换和随机数生成等功能. 矩阵: ...
- windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...
- Python科学计算(二)windows下开发环境搭建(当用pip安装出现Unable to find vcvarsall.bat)
用于科学计算Python语言真的是amazing! 方法一:直接安装集成好的软件 刚开始使用numpy.scipy这些模块的时候,图个方便直接使用了一个叫做Enthought的软件.Enthought ...
- 目前比较流行的Python科学计算发行版
经常有身边的学友问到用什么Python发行版比较好? 其实目前比较流行的Python科学计算发行版,主要有这么几个: Python(x,y) GUI基于PyQt,曾经是功能最全也是最强大的,而且是Wi ...
- Python科学计算之Pandas
Reference: http://mp.weixin.qq.com/s?src=3×tamp=1474979163&ver=1&signature=wnZn1UtW ...
- Python科学计算库
Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...
- Python科学计算基础包-Numpy
一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能: 快速高效的多维数组对象ndarray. 用于对数组执行元素级计算以及直接对数 ...
- Python科学计算PDF
Python科学计算(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VYs9BamMhCnu4rfN6TG5bg 提取码:2zzk 复制这段内容后打开百度网盘手机A ...
随机推荐
- 使用superMap实现点标注和区域着色
1.定义html文件,引入superMap的js和theme文件: <script src='${_ctxPath }/statics/js/superMap/SuperMap.Include. ...
- DIN(Deep Interest Network of CTR) [Paper笔记]
背景 经典MLP不能充分利用结构化数据,本文提出的DIN可以(1)使用兴趣分布代表用户多样化的兴趣(不同用户对不同商品有兴趣)(2)与attention机制一样,根据ad局部激活用户兴趣相关的兴趣(用 ...
- Python函数篇(4)之迭代器与生成器
1.文件操作的"b模式"(补充) 在上一篇文章中,我在最后一部分写了文件处理的一些方法,但是觉得还是有必要再提一下如下的内容: 像rb.wb.ab这种模式,是以字节的形式操作,需要 ...
- java web学习笔记 jstl
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53311722 冷血之心的博客) 一.JSTL标签介绍 1.什么是 ...
- Python爬虫(十四)_BeautifulSoup4 解析器
CSS选择器:BeautifulSoup4 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据. lxml只会局部遍历,而B ...
- A. Arrays(Codeforces Round #317 水题)
A. Arrays time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- SAP ABAP编程 Table Control动态隐藏列
在SAP DIALOG设计中,有时候须要动态的隐藏某些列,以下是方法. ***数据定义 CONTROLS: table_control TYPE TABLEVIEW USING SCREEN 0100 ...
- (四)—性能测试工具curl-loader(linux)
curl-loader介绍 curl-loader(也被称为"omes-NIK"和"davilka")是一个开源的C语言编写的工具,模拟应用负载和成千上万的几十 ...
- Java中流-----个人总结心得
流 字符流 字节流 缓冲区 数据流---用于传输数据.IO流---Input/Output流.数据从外部流向程序---输入流:数据从程序流向外部的时候--输出流.读取一个文件---数据从文件流向程序- ...
- EJB:快速入门
1.EJB概念 2.EJB体系结构 3.SessionBean 3.1 SessionBean 服务端组件 3.2 Remote 与 Local 模式 3.3 Client访问处理流程 3.3.1 R ...