2.牛顿法

2.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
    海森矩阵 = hessian(func(*args),args)
    当前位置 = Matrix([1 for i in args]).T
    #迭代
    while not ((当前梯度 := 梯度.subs(list(zip(args,当前位置)))).norm(2)

运行输出:

Matrix([[0, 0]])

x=0, y=0
就是要找的极小值点(二次函数用牛顿法一轮迭代就OK)

你可能感兴趣的:(2.牛顿法)