• 导数+偏导数+方向梯度+梯度下降法(python)


    主要内容:导数+偏导数+方向梯度+梯度下降法+极限(python)

    1.导数

    这里是引用

    import sympy
    from sympy.abc import x,y
    y=sympy.asin(sympy.sqrt(sympy.sin(x)))
    result=sympy.diff(y)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    2.偏导数

    这里是引用

    方式一:
    import sympy
    from sympy.abc import x,y
    f=x**2+3*x*y+y**2
    fx=sympy.diff(f,x)
    fy=sympy.diff(f,y)
    print(fx.evalf(subs={x:1,y:2}))
    print(fy.evalf(subs={x:1,y:2}))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    方式二:
    import sympy
    from sympy.abc import x,y
    f=x**2+3*x*y+y**2
    fx=sympy.diff(f,x)
    fy=sympy.diff(f,y)
    print(fx.subs({x:1,y:2}))
    print(fy.subs({x:1,y:2}))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    3.方向导数

    这里是引用

    方式一:
    import sympy
    from sympy.abc import x,y,z
    z=x*sympy.exp(2*y)
    zx=sympy.diff(z,x)
    zy=sympy.diff(z,y)
    result=zx.evalf(subs={x:1,y:0})*sympy.cos(-sympy.pi/4)+zy.evalf(subs={x:1,y:0})*sympy.sin(-sympy.pi/4)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    方式二:
    import sympy
    from sympy.abc import x,y,z
    z=x*sympy.exp(2*y)
    zx=sympy.diff(z,x)
    zy=sympy.diff(z,y)
    result=zx.subs({x:1,y:0})*sympy.cos(-sympy.pi/4)+zy.subs({x:1,y:0})*sympy.sin(-sympy.pi/4)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    4.梯度

    这里是引用

    方式一:(梯度类型一般选择方式一)
    import sympy
    from sympy.abc import x,y,z,u
    u=x*y*z+z**2+5
    ux=sympy.diff(u,x)
    uy=sympy.diff(u,y)
    uz=sympy.diff(u,z)
    gradu=[ux.subs({x:0,y:1,z:-1}),uy.subs({x:0,y:1,z:-1}),uz.subs({x:0,y:1,z:-1})] #这里subs后有个括号
    print(gradu)
    maxgradu=sympy.sqrt(gradu[0]**2+gradu[1]**2+gradu[2]**2)
    print(maxgradu)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    方式二:
    import sympy
    from sympy.abc import x,y,z,u
    u=x*y*z+z**2+5
    ux=sympy.diff(u,x)
    uy=sympy.diff(u,y)
    uz=sympy.diff(u,z)
    gradu = [ux.evalf(subs={x:0,y:1,z:-1}),uy.evalf(subs={x:0,y:1,z:-1}),uz.evalf(subs={x:0,y:1,z:-1})]
    maxgradu = sympy.sqrt(gradu[0]**2+gradu[1]**2+gradu[2]**2)
    print(gradu)
    print(maxgradu)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    5.梯度下降法求最小值

    这里是引用

    方式一:直接计算,无图像
    #先定义这个函数
    def Fun(x,y):
        return x-y+2*x**2+2*x*y+y**2
    #需要朝着哪个方向滚,计算梯度
    def PxFun(x,y):
        return 1+4*x+2*y
    def PyFun(x,y):
        return -1+2*x+2*y
    #滚多远,需要知道步长(学习率)
    step=0.0008#如果大于1,越来越大;等于1,来回摆渡不下降;在01之前,若太小,迭代次数越多
    x=0
    y=0
    new_x=x
    new_y=y
    Over=False
    #准备好了哪个方向+步长,开始滚
    while Over==False:
        new_x-=step*PxFun(x,y)
        new_y-=step*PyFun(x,y)
    #滚到什么程度结束
        if Fun(x,y)-Fun(new_x,new_y)<7e-9:
            Over=True
        x=new_x
        y=new_y
    print(x,y)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

    方式二:有图像
    import matplotlib.pyplot as plt  #  导入matplotlib 库
    from mpl_toolkits.mplot3d import Axes3D # 导入Axes3D
    import numpy as np  #  导入numpy 库
    def  Fun(x,y):
        return x-y+2*x*x+2*x*y+y**2      # 定义函数表达式
    def  PxFun(x,y):
        return 1+4*x+2*y     # 定义沿x方向偏导数
    def  PyFun(x,y):
        return -1+2*x+2*y   # 定义沿y方向偏导数
    
    fig=plt.figure()
    ax=Axes3D(fig)
    X,Y=np.mgrid[-2:2:40j,-2:2:40j]
    Z=Fun(X,Y)
    ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap="rainbow")
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_zlabel('z')
    
    step = 0.0008;  
    x = 0;  
    y = 0 ;  
    tag_x = [x];     
    tag_y = [y];     
    tag_z = [Fun(x,y)]
    new_x = x ;   
    new_y = y;   
    Over = False
    while Over == False:
        new_x -= step*PxFun(x,y);  new_y -= step*PyFun(x,y)
        if   Fun(x,y)-Fun(new_x,new_y) < 7e-9:
             Over = True
        x = new_x;    y = new_y;  
        tag_x.append(x); 
        tag_y.append(y); 
        tag_z.append(Fun(x,y))
    ax.plot(tag_x,tag_y,tag_z,'r')
    plt.title('(x,y)~('+str(x)+","+str(y)+')')
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    在这里插入图片描述

    import matplotlib.pyplot as plt  #  导入matplotlib 库
    from mpl_toolkits.mplot3d import Axes3D # 导入Axes3D
    import numpy as np  #  导入numpy 库
    def  Fun(x,y):
        return x-y+2*x*x+2*x*y+y**2      # 定义函数表达式
    def  PxFun(x,y):
        return 1+4*x+2*y     # 定义沿x方向偏导数
    def  PyFun(x,y):
        return -1+2*x+2*y   # 定义沿y方向偏导数
    
    fig=plt.figure()
    ax=Axes3D(fig)
    X,Y=np.mgrid[-2:2:40j,-2:2:40j]
    Z=Fun(X,Y)
    ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap="rainbow")
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_zlabel('z')
    
    step = 0.0008;  
    x = 0;  
    y = 0 ;  
    tag_x = [x];     
    tag_y = [y];     
    tag_z = [Fun(x,y)]
    new_x = x ;   
    new_y = y;   
    Over = False
    while Over == False:
        new_x -= step*PxFun(x,y);  new_y -= step*PyFun(x,y)
        if   Fun(x,y)-Fun(new_x,new_y) < 7e-9:
             Over = True
        x = new_x;    y = new_y;  
        tag_x.append(x); 
        tag_y.append(y); 
        tag_z.append(Fun(x,y))
    ax.plot(tag_x,tag_y,tag_z,'r')
    plt.title('(x,y)~('+str(x)+","+str(y)+')')
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在这里插入图片描述

    6.求极限(实验部分的补充)

    1. 这里是引用

    import sympy
    from sympy import oo     #这里不是sympy.abc
    #from sympy.abc import x
    x=sympy.Symbol('x')
    f=sympy.sin(x)/x
    result=sympy.limit(f,x,oo)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    2.在这里插入图片描述

    import sympy
    from sympy.abc import x
    f=(x**2-1)/(x-1)
    result=sympy.limit(f,x,1)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    实验部分的练习题:

    1.
    在这里插入图片描述

    import sympy
    from sympy.abc import x
    f=sympy.sin(sympy.ln(x))
    result=sympy.limit(f,x,1)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    2.
    在这里插入图片描述

    import sympy
    from sympy.abc import x
    f=(x**(1/3)-2)/(x-8)
    result=sympy.limit(f,x,8)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    3.求导数
    在这里插入图片描述

    import sympy
    from sympy.abc import x,y
    y=x**4-2*x**3+5*sympy.sin(x)+sympy.ln(3)
    result=sympy.diff(y)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    4.
    在这里插入图片描述

    import sympy
    from sympy.abc import x,y,z
    z=x**2+y**2
    zx=sympy.diff(z,x)
    zy=sympy.diff(z,y)
    print(zx.evalf(subs={x:1,y:2}))
    print(zy.evalf(subs={x:1,y:2}))
    gradu=[zx.subs({x:1,y:2}),zy.subs({x:1,y:2})]
    print(gradu)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    (理论课无习题)

  • 相关阅读:
    一句话画出动漫效果
    [每日两题系列]刷算法题咯~~
    封装react-antd-table组件参数以及方法如rowSelection、pageNum、pageSize、分页方法等等
    神经网络 torch.nn---nn.LSTM()
    刷题DAY22 | LeetCode 235-二叉搜索树的最近公共祖先 701-二叉搜索树中的插入操作 450-删除二叉搜索树中的节点
    条码软件中如何设置纵向条码
    机器学习(二十一):类不平衡处理之权重法
    在单链表中删除所有值为x的结点
    腾讯联手警方重拳出击 《绝地求生》外挂首案告破
    基于JAVA旅游足迹记录系统计算机毕业设计源码+数据库+lw文档+系统+部署
  • 原文地址:https://blog.csdn.net/qq_45499204/article/details/132997332