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实现给qq邮箱发送邮件的方法
May 28 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
说一说Python logging
Apr 15 Python
python中实现精确的浮点数运算详解
Nov 02 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
python3写的简单本地文件上传服务器实例
Jun 04 Python
python实现的Iou与Giou代码
Jan 18 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
python 实现多维数组(array)排序
Feb 28 Python
python微信公众号开发简单流程实现
Mar 09 Python
500行python代码实现飞机大战
Apr 24 Python
python如何读取和存储dict()与.json格式文件
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
escape unescape的php下的实现方法
2007/04/27 PHP
php 分页原理详解
2009/08/21 PHP
php 常用类汇总 推荐收藏
2010/05/13 PHP
php设计模式 Proxy (代理模式)
2011/06/26 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
2016/08/17 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
一个超级简单的python web程序
2014/09/11 Python
解读! Python在人工智能中的作用
2017/11/14 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
flask 实现token机制的示例代码
2019/11/07 Python
Python实现点云投影到平面显示
2020/01/18 Python
python对文件的操作方法汇总
2020/02/28 Python
Python实现井字棋小游戏
2020/03/09 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
python调用百度API实现人脸识别
2020/11/17 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
物流创业计划书
2014/02/01 职场文书
父亲节活动策划方案
2014/08/24 职场文书
2014年学生工作总结
2014/11/20 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
法人代表证明书范本
2015/06/18 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js
Golang获取List列表元素的四种方式
2022/04/20 Golang