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_常数与优化的更多相关文章

  1. Python 科学计算-介绍

    Python 科学计算 作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/ 最新版本的 IPython notebook 课程文 ...

  2. Python科学计算类库

    Numpy是什么 Numpy是一个开源的Python科学计算库.使用Numpy,就可以很自然地使用数组和矩阵.Numpy包含很多实用的数学函数,涵盖线性代数运算.傅里叶变换和随机数生成等功能. 矩阵: ...

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

    安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...

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

    用于科学计算Python语言真的是amazing! 方法一:直接安装集成好的软件 刚开始使用numpy.scipy这些模块的时候,图个方便直接使用了一个叫做Enthought的软件.Enthought ...

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

    经常有身边的学友问到用什么Python发行版比较好? 其实目前比较流行的Python科学计算发行版,主要有这么几个: Python(x,y) GUI基于PyQt,曾经是功能最全也是最强大的,而且是Wi ...

  6. Python科学计算之Pandas

    Reference: http://mp.weixin.qq.com/s?src=3&timestamp=1474979163&ver=1&signature=wnZn1UtW ...

  7. Python科学计算库

    Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...

  8. Python科学计算基础包-Numpy

    一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能: 快速高效的多维数组对象ndarray. 用于对数组执行元素级计算以及直接对数 ...

  9. Python科学计算PDF

    Python科学计算(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VYs9BamMhCnu4rfN6TG5bg 提取码:2zzk 复制这段内容后打开百度网盘手机A ...

随机推荐

  1. Java分布式锁之数据库实现

    之前的文章<Java分布式锁实现>中列举了分布式锁的3种实现方式,分别是基于数据库实现,基于缓存实现和基于zookeeper实现.三种实现方式各有可取之处,本篇文章就详细讲解一下Java分 ...

  2. tensorflow入门教程

    人工智能感觉很神秘,作为google公司力推的人工智能框架tensorflow也受到很多人的关注.本文用一个最简单的例子,带领大家看看tensorflow是如何工作的.如果你对人工智能的原理不了解可以 ...

  3. python面向对象其他相关-异常处理-反射

    1.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象   2.issubclass(sub, super) 检查sub类是否是 super 类的派生类 n1 = 10 ...

  4. webpack 图片的打包

    1. 在img文件夹下随便找一个小一点的图片放进去. 2.修改entry.js require('../css/index.css'); var demo1 = require('../js/demo ...

  5. node.js之express框架入门篇

    一.express框架简介 express框架是后台的Node框架,在后台的受欢迎的程度,和jQuery一样 英语官网:http://expressjs.com/ 中文官网:http://www.ex ...

  6. netty使用从0到1

    本周强总在组内做了netty分享,内容相当不错,趁着这次分享记录的,以及以前研究,进行一下记录. java io形式存在三种,一种是BIO传统IO是阻塞IO,面向字符.字节服务都属于这一种.NIO官方 ...

  7. 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)

    作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何基于dotnet core(微软.NET的最新版本,支持跨平台,跨设备的应用开发,详情请参考 https ...

  8. 解决EditText跟ScrollView滑动冲突

    etContent.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, Motion ...

  9. IT运维如何防止陷入“中年油腻”和频繁被动地打“遭遇战”?

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:陈峻近期,我拜访了一家文化传播公司的 IT 运维总监 Tim,他向我讲述了他的团队是如何像当年玩<大航海时代>那样将 IT ...

  10. 【SqlServer系列】表达式(expression)

    1   概述 本篇这文章主要概述SqlServer表达式. 2   具体内容 2.1  使用范围 SQL Server(2008开始) :Azure SQL数据库:Azure  SQL数据仓库:并行数 ...