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实现全局变量的两个解决方法
Jul 03 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
scrapy-redis的安装部署步骤讲解
Feb 27 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 Python
python各层级目录下import方法代码实例
Jan 20 Python
Python序列化pickle模块使用详解
Mar 05 Python
pandas之分组groupby()的使用整理与总结
Jun 18 Python
python regex库实例用法总结
Jan 03 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
Python+pyaudio实现音频控制示例详解
Jul 23 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
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
Python 文件操作的详解及实例
2017/09/18 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python中pika模块问题的深入探究
2018/10/13 Python
python对html过滤处理的方法
2018/10/21 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
详解python破解zip文件密码的方法
2020/01/13 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
英国大码女性时装零售商:Evans
2018/08/29 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
测绘工程本科生求职信
2013/10/10 职场文书
管理专员自荐信
2014/01/26 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
运动会开幕式主持词
2014/03/28 职场文书
我爱读书演讲稿
2014/05/07 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
2014年资料员工作总结
2014/11/18 职场文书