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提取页面内url列表的方法
May 25 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
将python运行结果保存至本地文件中的示例讲解
Jul 11 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 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
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
PHP实现变色验证码实例
2014/01/06 PHP
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
smarty中js的调用方法示例
2014/10/27 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
python3实现点餐系统
2019/01/24 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
python实现二分查找算法
2020/09/18 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
工商技校毕业生自荐信
2013/11/15 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
MySQL 语句执行顺序举例解析
2022/06/05 MySQL
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers