Я хочу минимизировать функцию стоимости с помощью формы,
с помощью метода Левенберга-Маркварт с функцией 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)
Спасибо