Python: градиент матричной функции - PullRequest
0 голосов
/ 27 мая 2018

Я хочу вычислить градиент следующей функции h (x) = 0,5 xT * A * x + bT + x.

На данный момент я устанавливаю A как матрицу (2,2).

def function(x):
    return 0.5 * np.dot(np.dot(np.transpose(x), A), x) + np.dot(np.transpose(b), x)

где

A = A = np.zeros((2, 2))
n = A.shape[0]
A[range(n), range(n)] = 1

a (2,2) Матрица с главнойдиагональ 1 и

b = np.ones(2) 

Для данной точки x = (1,1) numpy.gradient возвращает пустой список.

x = np.ones(2)  
result = np.gradient(function(x))

Однако я не должен получить что-то подобное: grad (f ((1,1)) = (x1 + 1, x2 + 1) = (2, 2).

Цените любую помощь.

1 Ответ

0 голосов
/ 28 мая 2018

Похоже, вы хотите выполнить символическое или автоматическое дифференцирование, чего не делает np.gradient.sympy - пакет для символической математики, а autograd - пакет для автоматической дифференциации для numpy.Например, чтобы сделать это с autograd:

import autograd.numpy as np
from autograd import grad

def function(x):
    return 0.5 * np.dot(np.dot(np.transpose(x), A), x) + np.dot(np.transpose(b), x)

A = A = np.zeros((2, 2))
n = A.shape[0]
A[range(n), range(n)] = 1
b = np.ones(2)
x = np.ones(2)
grad(function)(x)

Выходы:

array([2., 2.])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...