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启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
Apr 09 Python
Python中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
python中while和for的区别总结
Jun 28 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
python绘制规则网络图形实例
Dec 09 Python
Python json转字典字符方法实例解析
Apr 13 Python
pytorch学习教程之自定义数据集
Nov 10 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
Python 发送SMTP邮件的简单教程
Jun 24 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 获取百度的热词数据的代码
2012/02/18 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
通过隐藏option实现select的联动效果
2009/11/10 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
全面了解js中的script标签
2016/07/04 Javascript
js实现自定义路由
2017/02/04 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
layui实现文件或图片上传记录
2018/08/28 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
Python功能键的读取方法
2015/05/28 Python
详解python单例模式与metaclass
2016/01/15 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
医院办公室主任职责
2013/12/29 职场文书
亲子拓展活动方案
2014/02/20 职场文书
工商管理自荐书
2014/07/06 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android