MCPcopy Create free account
hub / github.com/TinyMPC/TinyMPC / format_matrices

Function format_matrices

src/tinympc/rho_benchmark.cpp:44–144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42}
43
44void format_matrices(
45 RhoAdapter* adapter,
46 const tinyMatrix& x_prev,
47 const tinyMatrix& u_prev,
48 const tinyMatrix& v_prev,
49 const tinyMatrix& z_prev,
50 const tinyMatrix& g_prev,
51 const tinyMatrix& y_prev,
52 TinyCache* cache,
53 TinyWorkspace* work,
54 int N
55) {
56 if (!adapter->matrices_initialized) {
57 initialize_format_matrices(adapter, x_prev.rows(), u_prev.rows(), N);
58 }
59
60 int nx = adapter->format_nx;
61 int nu = adapter->format_nu;
62
63 // Fill x_decision
64 int x_idx = 0;
65 for (int i = 0; i < N; i++) {
66 adapter->x_decision.block(x_idx, 0, nx, 1) = x_prev.col(i);
67 x_idx += nx;
68 if (i < N-1) {
69 adapter->x_decision.block(x_idx, 0, nu, 1) = u_prev.col(i);
70 x_idx += nu;
71 }
72 }
73
74 // Clear A matrix for reuse
75 adapter->A_matrix.setZero();
76
77 // Fill A matrix with dynamics and input constraints
78 for (int i = 0; i < N-1; i++) {
79 // Input constraints
80 int row_start = i * nu;
81 int col_start = i * (nx+nu) + nx;
82 adapter->A_matrix.block(row_start, col_start, nu, nu) = tinyMatrix::Identity(nu, nu);
83
84 // Dynamics constraints
85 row_start = (N-1) * nu + i * nx;
86 col_start = i * (nx+nu);
87 adapter->A_matrix.block(row_start, col_start, nx, nx) = work->Adyn;
88 adapter->A_matrix.block(row_start, col_start+nx, nx, nu) = work->Bdyn;
89
90 int next_state_idx = col_start + nx + nu;
91 if (next_state_idx < adapter->A_matrix.cols()) {
92 adapter->A_matrix.block(row_start, next_state_idx, nx, nx) = -tinyMatrix::Identity(nx, nx);
93 }
94 }
95
96 // Fill z and y vectors
97 for (int i = 0; i < N-1; i++) {
98 adapter->z_vector.block(i*nu, 0, nu, 1) = z_prev.col(i);
99 adapter->z_vector.block((N-1)*nu+i*nx, 0, nx, 1) = v_prev.col(i+1);
100
101 adapter->y_vector.block(i*nu, 0, nu, 1) = y_prev.col(i);

Callers 1

benchmark_rho_adaptationFunction · 0.85

Calls 6

asDiagonalMethod · 0.80
rowsMethod · 0.45
colMethod · 0.45
setZeroMethod · 0.45
colsMethod · 0.45

Tested by

no test coverage detected