sympy 自定义基本初等函数(幂函数,指数函数,三角函数,对数函数,反三角函数)求导,求偏导、多次求导

目录

1.自定义函数求一阶导数、二阶倒数,并带入数值

2.指数函数求导

3.三角函数求导

4.对数函数求导

5.反三角函数求导

6.对函数求偏导


        求导在优化编程、数学建模等方面被广泛的应用,我最近使用python编程,希望能够找出一个能对任何函数求导的方法,我搜遍了全网,零零散散,为此我写下这篇文章,主要解决了交互式输入函数求导,基本初等函数求导,包括幂函数、指数函数、三角函数,对数函数,反三角函数。

1.自定义函数求一阶导数、二阶倒数,并带入数值

        为了增强对求导的灵活性,编写了一段代码,以便可以手动输入函数。求出求导式,和带数值。

 导入相关的包

from sympy import *
import matplotlib.pyplot as plt
import pylab
import numpy as np

以最常见的一元多次数函数求导为例作为输入的函数,求一次导数,二次倒数带值

2x^3+5x^2+x+5

x = symbols('x')
fun = eval(input("请输入函数"))
print("一阶求导")
fun_1 = diff(fun,x)
print(fun_1)
fun_2 = diff(fun_1,x)
print("二阶求导")
print(fun_2)
number_1 = float(input("请输入x的取值"))
print("一阶导数代数运算后的结果为:{:.5f}".format(fun_1.subs(x,number_1)))
print("二阶导数代数运算后的结果为:{:.5f}".format(fun_2.subs(x,number_1)))

即需要输入:2*x**3+5*x**2+x+5

我们这里将x的数值设为i 2,运行得如下图。

对于这个方法,优势在于可以修改输入函数的类型。

2.指数函数求导

我们这里求导的海曙改为

2^x+1

输入2**x+1即可,求解一次导数

带入数值0

from sympy import *

x = symbols('x')
fun = eval(input("请输入函数"))
print("一阶求导")
fun_1 = diff(fun,x)
print(fun_1)
number_1 = float(input("请输入x的取值"))
print("一阶导数代数运算后的结果为:{:.5f}".format(fun_1.subs(x,number_1)))

得到结果如下

3.三角函数求导

我们这里求导的海曙改为

xsin(x)

输入x*sin(x)即可,求解一次导数

带入数值3

from sympy import *

x = symbols('x')
fun = eval(input("请输入函数"))
print("一阶求导")
fun_1 = diff(fun,x)
print(fun_1)
number_1 = float(input("请输入x的取值"))
print("一阶导数代数运算后的结果为:{:.5f}".format(fun_1.subs(x,number_1)))

运行结果如下图。

我们对其进行绘图

from sympy import *
import matplotlib.pyplot as plt
import pylab
import numpy as np

x_arr = []
y = []
y_1 = []
for ele in np.arange(-10,10,0.1):
    x_arr.append(ele)
    y.append(fun.subs(x,ele).evalf())
    y_1.append(fun_1.subs(x,ele).evalf())
plt.plot(x_arr,y)
plt.plot(x_arr,y_1)
pylab.xlim(-10, 10)
plt.show()

得到如下图象

4.对数函数求导

通用使用手打的方式输入函数,主打就是一个自由

对数函数的输入,我们使用sympy带的函数包,由于我们将sympy已经全部导入了

直接使用log(a,b)就等同于

log_ab

from sympy import *

x = symbols('x')
fun = eval(input("请输入函数"))
print("一阶求导")
fun_1 = diff(fun,x)
print(fun_1)
number_1 = float(input("请输入x的取值"))
print("一阶导数代数运算后的结果为:{:.5f}".format(fun_1.subs(x,number_1)))

我们求导   log_2x + 1

输入log(x,2)+1即可

x取值为1

得到结果如上午所示

5.反三角函数求导

我们假设求导函数为arcsinx

手敲 asin(x)

取x为0

from sympy import *

x = symbols('x')
fun = eval(input("请输入函数"))
print("一阶求导")
fun_1 = diff(fun,x)
print(fun_1)
number_1 = float(input("请输入x的取值"))
print("一阶导数代数运算后的结果为:{:.5f}".format(fun_1.subs(x,number_1)))

运行结果为

6.对函数求偏导

求导函数为

3x_1^3 +x_1*x_2^2 + x_1^2*x_2+5x_1 +4x^2

输入

3*x1**3+x1*x2**2 +x1**2*x2 +5*x1 +4*x2

x1,x2的取值分别为2,1

from sympy import *

x1 = symbols('x1')
x2 = symbols('x2')
fun = eval(input("请输入函数"))
print("对x1求偏导")
fun_1 = diff(fun,x1)
print(fun_1)
print("再对x2求偏导")
fun_2 = diff(fun_1,x2)
print(fun_2)
number_1 = float(input("请输入x1的取值"))
number_2 = float(input("请输入x2的取值"))
print("一阶导数代数运算后的结果为:{:.5f}".format(fun_2.subs({x1:number_1,x2:number_2})))

运行结果为

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值