实验室代码
(输入的函数必须是在任意自变量处可导的)
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
就是要找的极小值点(近似)