python实现之导数
导数(Derivative),也叫导函数值。又名微商,是微积分中的重要基础概念。当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x0)或df(x0)/dx。
不是所有的函数都有导数,一个函数也不一定在所有的点上都有导数。若某函数在某一点导数存在,则称其在这一点可导,否则称为不可导。然而,可导的函数一定连续;不连续的函数一定不可导。
切线指的是一条刚好触碰到曲线上某一点的直线。更准确地说,当切线经过曲线上的某点(即切点)时,切线的方向与曲线上该点的方向是相同的。平面几何中,将和圆只有一个公共交点的直线叫做圆的切线。
法线(normal line),是指始终垂直于某平面的直线。在几何学中,法线指平面上垂直于曲线在某点的切线的一条线。法线也应用于光学的平面镜反射上。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# _ooOoo_
# o8888888o
# 88" . "88
# ( | - _ - | )
# O\ = /O
# ____/`---'\____
# .' \\| |// `.
# / \\|||:|||// \
# / _|||||-:- |||||- \
# | | \\\ - /// | |
# | \_| ''\---/'' | _/ |
# \ .-\__ `-` ___/-. /
# ___`. .' /--.--\ `. . __
# ."" '< `.___\_<|>_/___.' >'"".
# | | : `- \`.;`\ _ /`;.`/ - ` : | |
# \ \ `-. \_ __\ /__ _/ .-` / /
# ==`-.____`-.___\_____/___.-`____.-'==
# `=---='
'''
@Project :pythonalgorithms
@File :derivatives.py
@Author :不胜人生一场醉@Date :2021/8/1 0:17
'''
import matplotlib.pyplot as plt
import numpy as np
import math
import sympy
import mpl_toolkits.axisartist as axisartist # 导入坐标轴加工模块if __name__ == '__main__':quadraticderivativeplot()exponentialderivativeplot()arccscderivativeplot()
# 导数(Derivative),也叫导函数值。又名微商,是微积分中的重要基础概念。
# 当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x0)或df(x0)/dx。
# 不是所有的函数都有导数,一个函数也不一定在所有的点上都有导数。
# 若某函数在某一点导数存在,则称其在这一点可导,否则称为不可导。然而,可导的函数一定连续;不连续的函数一定不可导。
def quadraticderivativeplot():plt.figure(figsize=(5, 12))ax = plt.gca() # 通过gca:get current axis得到当前轴plt.rcParams['font.sans-serif'] = ['SimHei'] # 绘图中文plt.rcParams['axes.unicode_minus'] = False # 绘图负号x = np.linspace(-2, 2, 200)y = x ** 2label = '函数=x**2的曲线'plt.plot(x, y, label=label)yd = 2 * xlabel = '导数线=2*x的曲线'plt.plot(x, yd, label=label)a = 1ad = a ** 2plt.plot(a, ad, 'og', label='x=1的某个点')# y=ax+b,已知a=2,x=1,y=1,求bb = ad - 2 * a# 准备画切线的数据al = np.linspace(-2, 2, 200)yl = 2 * al + blabel = 'x=1的切线'plt.plot(al, yl, label=label)# 准备画法线的数据,切线斜率=法线斜率的负数b = ad + 2 * aal = np.linspace(-2, 2, 200)yl = -2 * al + blabel = 'x=1的法线'plt.plot(al, yl, label=label)# 求导函数x = sympy.Symbol('x')f1 = x ** 2# 参数是函数与变量f1_ = sympy.diff(f1, x)print(f1_)# 设置图片的右边框和上边框为不显示ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')# 挪动x,y轴的位置,也就是图片下边框和左边框的位置# data表示通过值来设置x轴的位置,将x轴绑定在y=0的位置ax.spines['bottom'].set_position(('data', 0))# axes表示以百分比的形式设置轴的位置,即将y轴绑定在x轴50%的位置# ax.spines['left'].set_position(('axes', 0.5))ax.spines['left'].set_position(('data', 0))plt.title("二次函数、导数曲线及某点的法线、切线")plt.legend(loc='upper right')plt.show()
# 指数函数的导数
# 指数函数 y=a**x
# 指数函数的导数为 y=a**x*ln(a)
def exponentialderivativeplot():plt.figure(figsize=(5, 12))ax = plt.gca() # 通过gca:get current axis得到当前轴plt.rcParams['font.sans-serif'] = ['SimHei'] # 绘图中文plt.rcParams['axes.unicode_minus'] = False # 绘图负号a = 2x = np.linspace(-2, 2, 200)y = np.power(a, x)yd = np.power(a, x) * np.log(a)label = '函数=a**x的曲线'plt.plot(x, y, label=label)label = '导数线=a**x的曲线'plt.plot(x, yd, label=label)xpoint = 1ypoint = np.power(a, xpoint)plt.plot(xpoint, ypoint, 'og', label='x=1的某个点')# 斜率slope=导数,求截距interceptslope = math.pow(a, xpoint) * math.log(a, np.e)# y=ax+b,已知a,x,y,求bintercept = ypoint - slope * xpoint# 准备画切线的数据yl = x * slope + intercept# print(slope,intercept,yl)label = 'x=1的切线'plt.plot(x, yl, label=label)# 准备画法线的数据,切线斜率=法线斜率的负数# y=ax+b,已知x,y,-a,求bintercept = ypoint + slope * xpointyl = -x * slope + interceptlabel = 'x=1的法线'plt.plot(x, yl, label=label)# # 求导函数# x = sympy.Symbol('x')# f1 = x**2# # 参数是函数与变量# f1_ = sympy.diff(f1, x)# print(f1_)# 设置图片的右边框和上边框为不显示ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')# 挪动x,y轴的位置,也就是图片下边框和左边框的位置# data表示通过值来设置x轴的位置,将x轴绑定在y=0的位置ax.spines['bottom'].set_position(('data', 0))# axes表示以百分比的形式设置轴的位置,即将y轴绑定在x轴50%的位置# ax.spines['left'].set_position(('axes', 0.5))ax.spines['left'].set_position(('data', 0))plt.title("指数函数、导数曲线及某点的法线、切线")plt.legend(loc='upper right')plt.show()
# 常用导数公式表如下:#
# c'=0(c为常数)
# (x^a)'=ax^(a-1),a为常数且a≠0
# (a^x)'=a^xlna
# (e^x)'=e^x#
# (logax)'=1/(xlna),a>0且 a≠1
# (lnx)'=1/x
# (sinx)'=cosx
# (cosx)'=-sinx
# (tanx)'=(secx)^2
# (secx)'=secxtanx
# (cotx)'=-(cscx)^2
# (cscx)'=-csxcotx
# (arcsinx)'=1/√(1-x^2)
# (arccosx)'=-1/√(1-x^2)
# (arctanx)'=1/(1+x^2)
# (arccotx)'=-1/(1+x^2)
# arcsinx函数的导数
# arcsinx函数
# arcsinx函数的导数为 1/√(1-x^2)
def arccscderivativeplot():plt.figure(figsize=(10, 5))ax = plt.gca() # 通过gca:get current axis得到当前轴plt.rcParams['font.sans-serif'] = ['SimHei'] # 绘图中文plt.rcParams['axes.unicode_minus'] = False # 绘图负号x = np.append(np.linspace(0.01, np.pi / 2 - 0.01, 120),np.linspace(np.pi / 2 + 0.01, np.pi - 0.01, 120))y = 1 / np.cos(x)# 正割函数 sec(x)=1/cos(x)# 反正割函数 颠倒x,y值即可label = '函数为np.arcsecx(x)的曲线'plt.plot(y, x, label=label)x = np.linspace(-0.99, 0.99, 120)yd = 1 / np.sqrt(1 - np.power(x, 2))label = '导数线为np.arcsecx(x)的曲线'plt.plot(x, yd, label=label)# 设置图片的右边框和上边框为不显示ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')# 挪动x,y轴的位置,也就是图片下边框和左边框的位置# data表示通过值来设置x轴的位置,将x轴绑定在y=0的位置ax.spines['bottom'].set_position(('data', 0))# axes表示以百分比的形式设置轴的位置,即将y轴绑定在x轴50%的位置# ax.spines['left'].set_position(('axes', 0.5))ax.spines['left'].set_position(('data', 0))plt.title("arcsin函数、导数曲线")plt.legend(loc='upper right')plt.show()
python实现之导数相关推荐
- python离散求导数_Python求离散序列导数的示例
有一组4096长度的数据,需要找到一阶导数从正到负的点,和三阶导数从负到正的点,截取了一小段. 394.0 388.0 389.0 388.0 388.0 392.0 393.0 395.0 395. ...
- python编程求导数_Python求导数的方法
本文实例讲述了Python求导数的方法.分享给大家供大家参考.具体实现方法如下: def func(coeff): sum='' for key in coeff: sum=sum+'+'+str(k ...
- python如何求导数(derivative)、求偏导(partial derivative)?(sympy库symbols()函数、diff()函数、subs()函数)
可以使用Sympy库 SymPy是一个符号计算的Python库.它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁.易于理解和扩展.它完全由Python写成,不依赖于外部库. SymPy支持符 ...
- python编程求导数_面向对象编程 —— java实现函数求导
首先声明一点,本文主要介绍的是面向对象(OO)的思想,顺便谈下函数式编程,而不是教你如何准确地.科学地用java求出函数在一点的导数. 一.引子 defd(f) :defcalc(x) : dx= 0 ...
- python编程求导数_SciPy函数求导数
17. SciPy求函数的导数 在SciPy里提供了很多的方法函数可以实现对某函数进行求导和求积分的操作. SciPy的求导相对简单也容易理解.已知函数$f(x)$求其在$x_0$的导数即$f'(x_ ...
- Python求函数导数并绘制切线
下面我们通过Python来求函数y = 0.01x**2 + 0.1*x的导数,并绘制函数图像以及函数在某一点的切线. 首先,我们给出导数的数学定义式: 其次,我们先来写一写函数导数的实现代码.一般来 ...
- python编程求导数_Python分享导数的方法
#coding:utf-8#一阶导def fun1(X, WINDOW = 5):result = []for k in range(WINDOW, len(X)-WINDOW):mid = (X[k ...
- python往redis导数_Python:教你一招,将500W+的数据快速写入redis(文内赋赠教程)...
Python:教你一招,将500W+的数据快速写入redis(文内赋赠教程) 作者:PHPYuan 时间:2019-03-14 03:40:44 最近遇到一个问题:用python写500W+的数据到r ...
- Python求离散序列导数
有一组4096长度的数据,需要找到一阶导数从正到负的点,和三阶导数从负到正的点,截取了一小段. 394.0 388.0 389.0 388.0 388.0 392.0 393.0 395.0 395. ...
最新文章
- 面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)...
- 【原】Linux find 命令整理
- fcm模糊聚类matlab实例_一文学会使用MATLAB将仿真、试验数据可视化附带源程序
- 转帖:免费申请样片的公司大全!!
- Android TextView,EditText要求固定行数自动调整TextSize
- vb软件使用时间限制_GTD时间管理软件Wunderlist使用心得总结
- 【图像融合】自适应参考图像的可见光与热红外彩色图像融合算法
- 运动目标跟踪(十六)--OAB,SemiT,BSBT跟踪
- 5.1 RNN 情感识别、tensorflow实现——python实战
- 在Mac上使用鼠标键来控制指针的方法
- 在python中使用sort_详解python中sort排序使用
- Jasper报表导出pdf中文不显示——Font simsun is not available to the JVM. See the Javadoc for more det,已解决
- 模板引擎 - Thymeleaf
- 文件夹内批量修改文件名称
- UVALive 7456 Least Crucial Node
- GD32F103ZET6奋斗者开发板W5500通信——01 基础移植
- C语言实现SM4加解密算法
- Java位语句_卫语句 - 宿小帅的个人空间 - OSCHINA - 中文开源技术交流社区
- Android 耳机驱动知识
- Java毕设项目——人事管理系统(java+SSM+Maven+Mysql+Jsp)