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

Function tiny_set_tv_linear_constraints

src/tinympc/tiny_api.cpp:254–304  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

252}
253
254int tiny_set_tv_linear_constraints(TinySolver* solver,
255 tinyMatrix tv_Alin_x, tinyMatrix tv_blin_x,
256 tinyMatrix tv_Alin_u, tinyMatrix tv_blin_u) {
257 if (!solver) {
258 std::cout << "Error in tiny_set_linear_constraints: solver is nullptr" << std::endl;
259 return 1;
260 }
261
262 // Make sure all linear constraint matrix sizes are self-consistent
263 int num_tv_state_linear = tv_Alin_x.rows() / solver->work->N;
264 int num_tv_input_linear = tv_Alin_u.rows() / (solver->work->N-1);
265 int status = 0;
266
267 // Check state constraint dimensions
268 if (num_tv_state_linear > 0) {
269 status |= check_dimension("State time-varying linear constraint matrix (tv_Alin_x)", "rows",
270 tv_Alin_x.rows(), num_tv_state_linear * solver->work->N);
271 status |= check_dimension("State time-varying linear constraint matrix (tv_Alin_x)", "columns",
272 tv_Alin_x.cols(), solver->work->nx);
273 status |= check_dimension("State time-varying linear constraint vector (tv_blin_x)", "rows",
274 tv_blin_x.rows(), num_tv_state_linear);
275 status |= check_dimension("State time-varying linear constraint vector (tv_blin_x)", "columns",
276 tv_blin_x.cols(), solver->work->N);
277 }
278
279 // Check input constraint dimensions
280 if (num_tv_input_linear > 0) {
281 status |= check_dimension("Input time-varying linear constraint matrix (tv_Alin_u)", "rows",
282 tv_Alin_u.rows(), num_tv_input_linear * (solver->work->N-1));
283 status |= check_dimension("Input time-varying linear constraint matrix (tv_Alin_u)", "columns",
284 tv_Alin_u.cols(), solver->work->nu);
285 status |= check_dimension("Input time-varying linear constraint vector (tv_blin_u)", "rows",
286 tv_blin_u.rows(), num_tv_input_linear);
287 status |= check_dimension("Input time-varying linear constraint vector (tv_blin_u)", "columns",
288 tv_blin_u.cols(), solver->work->N-1);
289 }
290
291 if (status) {
292 return status;
293 }
294
295 solver->work->numtvStateLinear = num_tv_state_linear;
296 solver->work->numtvInputLinear = num_tv_input_linear;
297
298 solver->work->tv_Alin_x = tv_Alin_x;
299 solver->work->tv_blin_x = tv_blin_x;
300 solver->work->tv_Alin_u = tv_Alin_u;
301 solver->work->tv_blin_u = tv_blin_u;
302
303 return 0;
304}
305
306
307int tiny_precompute_and_set_cache(TinyCache *cache,

Callers 1

mainFunction · 0.85

Calls 3

check_dimensionFunction · 0.85
rowsMethod · 0.45
colsMethod · 0.45

Tested by

no test coverage detected