python计算导数并绘图的实例


Posted in Python onFebruary 29, 2020

我就废话不多说了,直接上代码吧!

import math
import numpy as np
import matplotlib.pyplot as plt
from sympy import * #用于求导积分等科学计算
 
 
def dif(left,right,step):#求导 左右区间以及间隔
 x,y = symbols('x y')#引入x y变量
 expr = pow(x,5)#计算表达式
 x_value = [] #save x value
 y_value = [] #save x f(x) value
 y_value_dif = [] #save x f(x)_dot value
 y_value_dif2 = [] #save x f(x)_dot2 value
 y_value_dif3 = [] #save x f(x)_dot3 value
 y_value_dif4 = [] #save x f(x)_dot4 value
 #print(expand(exp(I*x), complex=True))#将复指数展开成实部虚部形式
 expr_dif = diff(expr,x,1)
 expr_dif2 = diff(expr,x,2)
 expr_dif3 = diff(expr,x,3)
 expr_dif4 = diff(expr,x,4)
 for i in np.arange(left,right,step):
  x_value.append(i)
  y_value.append(expr.subs('x',i))#将i值代入表达式
  y_value_dif.append(expr_dif.subs('x',i))#将i值代入求导表达式
  y_value_dif2.append(expr_dif2.subs('x',i))#将i值代入2阶求导表达式
  y_value_dif3.append(expr_dif3.subs('x',i))#将i值代入3阶求导表达式
  y_value_dif4.append(expr_dif4.subs('x',i))#将i值代入4阶求导表达式
 draw_plot_set()#设置画图格式
 plt.plot(x_value,y_value,"b-",linewidth=1,label='f(x)='+str(expr)) #画图
 plt.plot(x_value,y_value_dif,"r-",linewidth=1,label='f(x)_prim') #画图
 plt.plot(x_value,y_value_dif2,"y-",linewidth=1,label='f(x)_prim2') #画图
 plt.plot(x_value,y_value_dif3,"g-",linewidth=1,label='f(x)_prim3') #画图
 plt.plot(x_value,y_value_dif4,"b-",linewidth=1,label='f(x)_prim4') #画图
 
 plt.legend()#显示图例
 plt.show()#显示图像
 
 
def draw_plot_set():#设置画图格式
 plt.figure()
 ax = plt.gca()
 #改变坐标轴位置
 ax.spines['right'].set_color('none')#删除原来轴
 ax.spines['top'].set_color('none')#删除原来轴
 ax.xaxis.set_ticks_position('bottom')#在0点处增加轴
 ax.spines['bottom'].set_position(('data',0))
 ax.yaxis.set_ticks_position('left')#在0点处增加轴
 ax.spines['left'].set_position(('data',0))
 #设置坐标名
 plt.ylabel('f(x)')
 plt.xlabel('x')
 
 plt.grid(True)#打开网格
 
 
 
 
if __name__ == '__main__':
 dif(-5,5,0.01)

python计算导数并绘图的实例

补充拓展:python利用sympy库对某个函数求导,numpy库使用该求导结果计算的程序

在python数据处理过程中,我们经常会遇见这样一种情况。需要对一个函数表达式求偏导,并将具体数值代入导数式。

而python中通常可用于函数求导的函数是sympy库中的diff()函数。

但他通常所求得的导数只是一个符号表达式。不能直接带入数据使用。

如下例:

import sympy as sp
import numpy as np
x,y = sp.symbols('x y')
z = sp.sin(2*sp.pi*x+2*y/5)
zx = sp.diff(z,x)
zy = sp.diff(z,y)
print(zx)
print(zy)

其输出为:

2*pi*cos(2*pi*x + 2*y/5)
2*cos(2*pi*x + 2*y/5)/5

那么该如何解决这个问题呢?

对x,y使用evalf()函数分别赋值后,用float进行类型转换后,才能利用numpy进行数值计算。

如下例:

import sympy as sp
import numpy as np
x,y = sp.symbols('x y')
z = sp.sin(2*sp.pi*x+2*y/5)
zx = sp.diff(z,x)
zy = sp.diff(z,y)
x1 = 10
y1 = 5
z_x1 = float(zx.evalf(subs={x:x1,y:y1}))
z_y1 = float(zy.evalf(subs={x:x1,y:y1}))
print(z_x1)
print(z_y1)

其输出结果:

-2.61472768902227
-0.16645873461885696

那如果我的x或y不是单一的值呢?而是一个数组。

我们可以利用一个循环来完成。

如下例:

import sympy as sp
import numpy as np
x,y = sp.symbols('x y')
z = sp.sin(2*sp.pi*x+2*y/5)
zx = sp.diff(z,x)
zy = sp.diff(z,y)
x_array = np.linspace(-5, 5, 10)
y_array = np.linspace(-5, 5, 10)
temp_x = []#先定义一个用于存储x偏导的空列表
temp_y = []#先定义一个用于存储y偏导的空列表
for i in range(10):
  z_x = float(zx.evalf(subs={x:x_array[i],y:y_array[i]}))
  temp_x.append(z_x)#将计算得到的偏导值一一添加到列表中
  z_y = float(zy.evalf(subs={x:x_array[i],y:y_array[i]}))
  temp_y.append(z_y)
zx_array = np.array(temp_x)#将列表转换为数组
zy_array = np.array(temp_y)
print(zx_array)
print(zy_array)

输出结果为:

[-2.61472769 4.11163864 6.02946289 0.89585862 -5.2854481 -5.2854481
 0.89585862 6.02946289 4.11163864 -2.61472769]
[-0.16645873 0.26175505 0.38384753 0.05703213 -0.33648208 -0.33648208
 0.05703213 0.38384753 0.26175505 -0.16645873]

由此便实现了由sympy得到求导结果,到numpy库进行数值计算。

以上这篇python计算导数并绘图的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之玩转字符串(3)
Sep 14 Python
Python解析json文件相关知识学习
Mar 01 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
Python绘制3D图形
May 03 Python
django加载本地html的方法
May 27 Python
Django网络框架之HelloDjango项目创建教程
Jun 06 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
对pytorch的函数中的group参数的作用介绍
Feb 18 Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 Python
Python实现8种常用抽样方法
Jun 27 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 #Python
Pytorch对Himmelblau函数的优化详解
Feb 29 #Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 #Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 #Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 #Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 #Python
python实现门限回归方式
Feb 29 #Python
You might like
第十五节--Zend引擎的发展
2006/11/16 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
php实现单链表的实例代码
2013/03/22 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
php解析json数据实例
2014/08/19 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
python自动识别文本编码格式代码
2019/12/26 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
如何用SQL语句进行模糊查找
2015/09/25 面试题
软件测试工程师面试问题精选
2016/10/28 面试题
2014办公室年度工作总结
2014/12/09 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers