Сформулируйте остаток для Левенберга-Маркварт - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу минимизировать функцию стоимости с помощью формы,

cost

с помощью метода Левенберга-Маркварт с функцией scipy.optimize.least_squares.Но я не вижу, как сформулировать это с точки зрения остатков, чтобы я мог использовать такой метод.В противном случае я получаю сообщение об ошибке «Метод« lm »не работает, когда число остатков меньше, чем количество переменных».

Моя функция стоимости определяется следующим образом:

def canonical_cost(qv, t, A, B, C, delta, epsilon, lam):
    assert(type(qv) is np.ndarray and len(qv) == 4)
    # assert(type(t) is np.ndarray and len(t) == 3)

    q = Quaternion(*qv)
    qv, tv = qv.reshape(-1, 1), np.vstack(([0], t.reshape(-1, 1)))

    f1 = qv.T @ (A + B) @ qv
    f2 = tv.T @ C @ tv + delta @ tv + epsilon @ (q.Q.T @ q.W) @ tv
    qnorm = (1 - qv.T @ qv)**2
    return np.squeeze(f1 + f2 + lam*qnorm)

И я пытаюсь оптимизировать,

def cost(x):
    qv, t = x[:4], x[4:]
    return canonical_cost(qv, t, A, B, C, delta, epsilon, lam)

result = opt.least_squares(cost, initial_conditions, method='lm',
                               **kwargs)

Спасибо

1 Ответ

0 голосов
/ 04 апреля 2019

Насколько я понимаю, алгоритм LM выполняет сумму квадратов остаточного вектора и пытается минимизировать это значение.Мы должны вернуть вектор соответствующим образом, чтобы сумма квадратов элементов в этом векторе была минимальной.И требование, чтобы размер этого остаточного вектора был больше, чем число переменных, имеет смысл, потому что это в основном подразумевает, что число

...