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

的非线性方程组的解;?

时间: 2024-08-04 04:07:14

python科学计算_scipy_常数与优化的相关文章

Python科学计算之Pandas

Reference: http://mp.weixin.qq.com/s?src=3&timestamp=1474979163&ver=1&signature=wnZn1UtWreFWjQbpWweZXp6RRvmmKwW1-Kud3x6OF0czmyPqv*F6KzQ1i-dKhi4D-QvDjp1mFDdqAHLPrCLgMOb1KXJcbbkU5-QAREDarkCaPumjQlORzVAOma541S0X2MGgysuH18DI2567rBcTSkMHPsVf6sxClfB

windows下安装python科学计算环境,numpy scipy scikit等

背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器学习模块,包括分类.回归.聚类系列算法,主要算法有SVM.逻辑回归.朴素贝叶斯.Kmeans.DBSCAN等,目前由INRI 资助,偶尔Google也资助一点. SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化.线性代数.积分.插值.特殊函数.快速傅里叶变换.信号处理和图像处理.常微分方程求解和其他科学与工程中常用的计算.其功能与软件MA

python科学计算

windows下python科学计算库的下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/(由于C运行库的问题,scipy在linux下可以用pip安装,而windows下不行) matpoltlib:绘图 numpy:矩阵运算 scipy:科学计算,高阶抽象和物理模型 sklearn:科学计算,多种聚类算法. 数据拟合:http://blog.csdn.net/lsldd/article/details/41251583 遗传算法:http://bl

Python科学计算(二)windows下开发环境搭建(当用pip安装出现Unable to find vcvarsall.bat)

用于科学计算Python语言真的是amazing! 方法一:直接安装集成好的软件 刚开始使用numpy.scipy这些模块的时候,图个方便直接使用了一个叫做Enthought的软件.Enthought是一家位于美国得克萨斯州首府奥斯汀的软件公司,主要使用Python从事科学计算工具的开发.Enthought里面包含了很多库,不需要你自己安装就可以直接使用了. 其实还又很多Python科学计算的集成软件,比如Python(x, y)和WinPython,个人感觉WinPython还是不错的,里面包

linux中安装python科学计算环境-numpy、scipy、matplotlib、OpenCV...

http://blog.csdn.net/pipisorry/article/details/39902327 在Ubuntu中安装numpy.scipy.matplotlib.OpenCV等 和Python(x,y)不一样,在Ubuntu中需要手工安装科学计算的各个模块, 如何安装IPython, NumPy, SciPy, matplotlib, PyQt4, Spyder, Cython, SWIG, ETS, OpenCV: 在Ubuntu下安装Python模块通常可以使用apt-get

目前比较流行的Python科学计算发行版

经常有身边的学友问到用什么Python发行版比较好? 其实目前比较流行的Python科学计算发行版,主要有这么几个: Python(x,y) GUI基于PyQt,曾经是功能最全也是最强大的,而且是Windows系统中科学免费Python发行版的不二选择.不过今时已不同往昔! PythonXY里面的许多包为了兼容性的问题,无法使用最新的程序包.尤其是令人气愤的是MinGW到现在还是古董级的4.5版本,而TDM-GCC现在都4.8.1-3了.不过这个包在你安装了之后,除了占用较大的磁盘空间之外,基本

Python科学计算(两)——时域波形和正弦信号的频谱

Python科学计算(两)-- 时域和频域波形为正弦波形信号生成.计算和显示 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as pl import matplotlib import math import random row = 4 col = 4 N = 500 fs = 5 n = [2*math.pi*fs*t/N for t in range(N)] axis_x = np.linspace(

Python科学计算函数库介绍

数值计算库 NumPy为Python提供了快速的多维数组处理的能力,而SciPy则在NumPy基础上添加了众多的科学计算所需的各种工具包,有了这两个库,Python就有几乎和Matlab一样的处理数据和计算的能力了. NumPy和SciPy官方网址: http://www.scipy.org NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组.它将常用的数学函数都进行数组化,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语

Mac OS X中搭建Python科学计算环境

这个日志也是参考了几位网友的经验(例如这篇日志:http://blog.csdn.net/waleking/article/details/7578517).他们推荐使用Mac Ports这样的软件来管理和安装所有的安装包.按照这里的教程:http://www.macports.org/install.php,需要首先安装Xcode,如果下载网速不好的话,使用浏览器下载可能需要数个小时.这里建议国内的朋友试试迅雷之类的离线下载,可以加速很多.安装好Mac Ports之后,在终端中输入: port