假设我们已经知道梯度法——最速下降法的原理。
现给出一个算例:
如果人工直接求解:
现给出Python求解过程:
import numpy as np
from sympy import *
import math
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
# 定义符号
x1, x2, t = symbols('x1, x2, t')
def func():
# 自定义一个函数
return pow(x1, 2) + 2 * pow(x2, 2) - 2 * x1 * x2 - 2 * x2
def grad(data):
# 求梯度向量,data=[data1, data2]
f = func()
grad_vec = [diff(f, x1), diff(f, x2)] # 求偏导数,梯度向量
grad = []
for item in grad_vec:
grad.append(item.subs(x1, data[0]).subs(x2, data