summaryrefslogtreecommitdiffstats
path: root/templates/simulate.m
blob: 6be40c35cb6799489358d1f05e46ebcbfcd7b836 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright (c) 2023, Amon Lahr, Simon Muntwiler, Antoine Leeman & Fabian Flürenbrock Institute for Dynamic Systems and Control, ETH Zurich.
%
% All rights reserved.
%
% Please see the LICENSE file that has been included as part of this package.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [Xt,Ut,ctrl_info] = simulate(x0, ctrl, params)
    % YOUR CODE HERE
    % Hint: you can access the control command with ctrl.eval(x(:,i))

    Xt = zeros(params.model.nx, params.model.HorizonLength+1);
    Ut = zeros(params.model.nu, params.model.HorizonLength);
    ctrl_info = repmat(struct('ctrl_feas',true), 1, params.model.HorizonLength);

    Xt(:,1) = x0;
    for k=1:params.model.HorizonLength
        [u, ~] = ctrl.eval(Xt(:,k));
        Ut(:,k) = u;
        Xt(:,k+1) = params.model.A * Xt(:,k) + params.model.B * Ut(:,k);
    end
end