Где ошибка? Результатом работы должно быть число
Надо решить уравнение динамической системы, которая описывается следующим образом (случай дискретного времени)
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)
Так на выходе получается число.