17. SciPy求函数的导数

在SciPy里提供了很多的方法函数可以实现对某函数进行求导和求积分的操作。

SciPy的求导相对简单也容易理解。已知函数$f(x)$求其在$x_0$的导数即$f'(x_0)$。

方法一,使用scipy.misc模块下的derivative方法函数。

import numpy as np

from scipy.misc import derivative

def f(x):

return x**5

for x in range(1, 4):

print derivative(f, x, dx=1e-6)

程序的执行结果:

4.999999999866223

80.00000000230045

405.00000005749826

这里的$f(x)= x^5$那么$f'(x) = 5 x^4$,当$x= 1$时$f'(x = 1) = 5$,当$x = 2$时$f'(x = 2) = 5\times 2 ^ 4 = 80$ 。

derivative方法函数还可以指定导数的阶数,下面求一下二阶导数。

import numpy as np

from scipy.misc import derivative

def f(x):

return x**5

for x in range(1, 4):

print derivative(f, x, dx=1e-6, n = 2)

程序的执行结果:

19.999335520992645

160.02132952053216

540.0124791776761

这里的$f(x)= x^5$那么$f''(x) = 20 x^3$,当$x= 1$时$f''(x = 1) = 20$,当$x = 2$时$f''(x = 2) = 20\times 2 ^ 3 = 160$ 。

方法二,使用sympy模块里的diff和symbols函数。diff函数可以得到$f(x)$的导数表达式$f'(x)$,而sympy的symbols函数给出数学表达式里数学符号描述符。

from sympy import diff, symbols

t = symbols('x', real=True)

for i in range(1, 4):

print diff(t**5, t, i)

print diff(t**5, t, i).subs(t, i),i

程序的执行结果:

5*x**4

5 1

20*x**3

160 2

60*x**2

540 3

程序里python变量t代表数学公式里的$x$,那么diff(t ** 5, t, i)里的$t ** 5 $的意思是$f(x) = x ^ 5$这样的一个函数,t, 1两个参数的意思是对$x$求i阶导数。

当$i = 1$时,即对$f(x) = x ^ 5$一阶求导,得导数表达式$f'(x) = 5 x^4$,而diff(t**5, t, i).subs(t, i)则是求$f'(x)$当$x = i$的导数的值,即$f'(1) = 5$。

当$i = 2$时,即对$f(x) = x ^ 5$二阶求导,得导数表达式$f''(x) = 20 x^3$,而diff(t**5, t, i).subs(t, i)则是求$f'(x)$当$x = i$的导数的值,即$f'(2) = 160$。

当$i = 3$时,即对$f(x) = x ^ 5$三阶求导,得导数表达式$f^{(3)}(x) = 60 x^2$,而diff(t**5, t, i).subs(t, i)则是求$f'(x)$当$x = 3$的导数的值,即$f'(3) = 540$。

方式三,使用numpy模块里的函数也可实现求函数的导数。

import numpy as np

p = np.poly1d([1,2,0,3,0,5])

print p

for i in range(1, 4):

print np.polyder(p,i)

print np.polyder(p,i)(1.0)

for i in range(1, 4):

print p.deriv(i)

print p.deriv(i)(1.0)

程序执行结果:

5 4 2

1 x + 2 x + 3 x + 5

4 3

5 x + 8 x + 6 x

19.0

3 2

20 x + 24 x + 6

50.0

2

60 x + 48 x

108.0

4 3

5 x + 8 x + 6 x

19.0

3 2

20 x + 24 x + 6

50.0

2

60 x + 48 x

108.0

用NumPy的poly1d构造$f(x)$,函数的形参是多项式的系数,最左侧的是最高次数的系数,因此p变量代表的方程为$f(x) = x^5 + 2x^4 + 3 x^2 + 5$。而NumPy的polyder和deriv函数的作用差不多都是对p所代表的多项式求导得到$f(x)$的导数的表达式。

下面仅分析一下如下代码:

for i in range(1, 4):

print np.polyder(p,i)

print np.polyder(p,i)(1.0)

其结果为:

4 3

5 x + 8 x + 6 x

19.0

3 2

20 x + 24 x + 6

50.0

2

60 x + 48 x

108.0

为了便于阅读,程序加上一些输出提示:

for i in range(1, 4):

print "f(x)'s %d-th derivative is" %(i)

print np.polyder(p,i)

print "f(x)'s %d-th value when i =" % (i), i

print np.polyder(p,i)(i)

结果为:

f(x)'s 1-th derivative is

4 3

5 x + 8 x + 6 x

f(x)'s 1-th value when i = 1

19

f(x)'s 2-th derivative is

3 2

20 x + 24 x + 6

f(x)'s 2-th value when i = 2

262

f(x)'s 3-th derivative is

2

60 x + 48 x

f(x)'s 3-th value when i = 3

684

方程为$f(x) = x^5 + 2x^4 + 3 x^2 + 5$其一阶导数的表达式为$f'(x) = 5 x^4 + 8 x^3 + 6x$由语句np.polyder(p,i)其$i = 1$时得到,而$f'(1) = 5 + 8 + 6 = 19$由语句np.polyder(p,i)(i)其$i = 1$时得到。

同理当$i = 3$时,语句np.polyder(p,i)计算p所代表的表达式$f(x) = x^5 + 2x^4 + 3 x^2 + 5$,求其三阶导数的表达式为$f^{(3)}(x) = 60 x^2 + 48 x $,而语句np.polyder(p,i)(i)则是计算p所代表的函数的导数在$x = 3$的导数值,即$f^{(3)}(x) = 60 \times 3^2 + 48\times 3 = 540 + 144 = 684$。

python编程求导数_SciPy函数求导数相关推荐

  1. matlab计算绝对值的导数,如何用matlab求带绝对值函数的导数? 你值得一看的技巧...

    用matlab求函数的导数:如果一个函数表达式中有绝对值,那对该函数求导就需要注意啦!该函数可能在他的零点处导数不存在,所以我们不能用传统的方法求导,应该在零点处分别求左导数和右导数,如果左导数和右导 ...

  2. Python 编程导论 Chapter 4 —— 函数、作用域与抽象

    typora-copy-images-to: Risk Management and Financial Institution typora-copy-images-to: Python 编程导论 ...

  3. Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介、使用方法、经典案例之详细攻略

    Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介.使用方法.经典案例之详细攻略 目录 *args和**kwargs(设计不同数量的参数函数)的简介 1 ...

  4. matlab求曲线极值程序,matlab函数求极值matlab函数求极值.ppt

    matlab函数求极值matlab函数求极值 * * 函数的极值 1.一元函数的极值 函数命令:fminbnd 调用格式:[x,feval,exitflag,output]=fminbnd(fun,x ...

  5. python内置高阶函数求导_Python——函数式编程、高阶函数和内置函数,及

    Python--函数式编程.高阶函数及内置函数 函数式编程 一.不可变数据:不用变量保存状态不修改变量 二.第一类对象:函数即"变量" 1.函数名可以当做参数传递 2.返回值可以是 ...

  6. JS学习之求带参函数求任意两个数和

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>带参函 ...

  7. python编程学习笔记⑦-1函数

    函数是带名字的代码块 8.1定义函数 使用关键字def 告诉python你要定义一个函数. def greet_user():#()是必要的print("Hello!") gree ...

  8. linux 里往表里导数语句,函数与导数中常用的函数和不等关系

    前言 高考中在压轴题中考查的函数有千千万,但是总能从其中找到一些比较核心的函数来: 常用函数 比如基本初等函数$f(x)=x$和$g(x)=e^x$做四则运算得到的这些函数: $h(x)=x\pm e ...

  9. matlab求固有频率,eig()函数求固有频率和有限元软件求固有频率结果不相等

    本帖最后由 爱模型啊 于 2017-12-26 16:54 编辑 我现在在用Abaqus有限元软件做模态分析,已经求出了各阶的模态频率,也知道怎么输出系统的质量矩阵.系统的刚度矩阵. 在有限元软件中, ...

最新文章

  1. android 摇一摇监听,Android摇一摇功能实现(摇一摇监听)
  2. .net导出Excel
  3. java 面向接口编程的理解
  4. mysql的FIQ怎么安装_MySQL数据库设计总结
  5. generator mysql插件_mybatis Generator最佳实践(数据库:mysql)
  6. 如何使用插件生成自定义Java 8代码
  7. ASP.NET MVC 入门6、TempData
  8. php 10060,远程连接mysql 10060错误
  9. JS replace()方法替换变量(可以对变量进行全文替换)
  10. 语音信号的LPC特征提取
  11. sql md5或shal加密
  12. 地理Essay范文的组成剖析
  13. 【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器
  14. treeset可以重复吗_买了好几份意外险,可以重复理赔吗?
  15. 开源的价值观与文化的传递
  16. HDU 3518 HDU 4416【后缀自动机len的使用】
  17. 串口服务器中文使用文档,MOXA串口服务器中文使用文档
  18. 巨简单 在eclips上面新建一个网页动态项目
  19. Google Maps API V3 之 图层
  20. 免费的HTTPS(白嫖阿里云SSL证书)

热门文章

  1. PTA换硬币(枚举)
  2. 图片报道:2008年12月4日夜晚,暴风雪突袭烟台(上)
  3. android首页广告倒计时,(安卓APP)简单的首页广告倒计时实现代码
  4. DELPHI常用函数集及简要范例 3
  5. CSS3——制作带动画效果的小图片
  6. czl蒻蒟的OI之路8
  7. python上方菜单栏不见了_python tkinter-菜单栏
  8. js移动手机号码验证
  9. 微信公众号之在图片上添加热点链接
  10. SpreadJS 纯前端表格控件应用案例:在线问卷系统