Где ошибка? Результатом работы должно быть число

Надо решить уравнение динамической системы, которая описывается следующим образом (случай дискретного времени) x = A * x + B * U.
Цель состоит в том, чтобы минимизировать функцию стоимости res для следующей задачи оптимизации: res= min(x.T * Q *x + U.T * R * U)

В результате должны получить число. А у меня выходит матрица.

Помогите, где ошибка?

import numpy as np
    
T = 5
n = 3
m = 2
    
x0 = np.random.rand(n, 1)
A = np.random.rand(n, n)
B = np.random.rand(n, m)
Q = np.random.rand(n, n)
R = np.random.rand(m, m)
H = np.random.rand(n, n)
    
u = np.random.rand(T * m)
    
def Obj(u):
    U = u.reshape((T, m))
    res = 0
    x = x0
    for t in range(T - 1):
        x = A @ x + B @ U[t, :]
        res += x.T @ Q @ x + U[t, :].T @ R @ U[t, :]
        x = A @ x + B @ U[T - 1, :]
        res += x.T @ H @ x
    
    return res
    
result = Obj(u)
    
print("Result:", result)

Ответы (1 шт):

Автор решения: CrazyElf

Может быть для этого x0 должно быть вектором, а не матрицей размерности (n,1)?

x0 = np.random.rand(n)

Так на выходе получается число.

→ Ссылка