1.梯度下降法

1.jpg

实验室代码

(输入的函数必须是在任意自变量处可导的)

from sympy import *
from sympy.abc import *

def 梯度下降法(func,*args,l=0.1,s=0.001):
    #计算理论梯度,并随机初始化向量x,即“当前位置”(这里为简化代码假设向量的各个分量全为1)
    梯度 = Matrix([diff(func(*args),i,1) for i in args]).T
    当前位置 = Matrix([1 for i in args]).T
    #迭代
    while not (当前梯度 := 梯度.subs(list(zip(args,当前位置)))).norm(2)<s:
        当前位置 = 当前位置-l*当前梯度
    return 当前位置

def gf(x,y):
    return x**2+x*y+y**2

梯度下降法(gf,x,y)

运行输出:

Matrix([[0.000191581231380566, 0.000191581231380566]])

x=0.000191581231380566, y=0.000191581231380566
就是要找的极小值点(近似)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容