Perform forward stochastic reachability analysis of a linear system with
  additive stochastic disturbance, initialized to a random vector
  ============================================================================
 
  Forward stochastic reachability analysis quantifies the stochasticity of the
  state at a future time instant, as well as the probability of the state lying
  in a pre-specified set at a future time instant. This function implements
  ideas from
 
  A. Vinod, B. HomChaudhuri, and M. Oishi, "Forward Stochastic Reachability
  Analysis for Uncontrolled Linear Systems using Fourier Transforms", In
  Proceedings of the 20th International Conference on Hybrid Systems:
  Computation and Control (HSCC), 2017.
 
  While the Fourier transform-based results apply for arbitrary 
  distributions, SReachFwd considers only Gaussian-perturbed LTI systems. 
  In this case, the approach coincides with Kalman filter updates, and it 
  is grid-free, recursion-free, and sampling-free. 
 
  SReachFwd also exploits the functionality of random vector to provide
  forward stochastic reachability analysis of linear systems perturbed by
  non-Gaussian disturbance. In this case, we use Monte-Carlo simulations to
  estimate the mean, covariance, and the probability of lying in a set.
 
  See also examples/cwhSReachFwd.m.
 
  ============================================================================
  
  varargout = SReachFwd(prob_str, sys, initial_state, target_time, varargin)
  
  Inputs:
  -------
    prob_str      - String specifying the problem of interest
                        1. 'state-stoch' : Provide mean and covariance at state
                                           at the spjecified time
                        2. 'state-prob'  : Compute the probability that the
                                           state will lie in a polytope at the
                                           specified time
                        3. 'concat-stoch': Provide mean and covariance of the
                                           concatenated state vector up to a
                                           specified time
                        4. 'concat-prob' : Compute the probability that the
                                           concatenated state vector up to a
                                           specified time lies in the given
                                           target tube
    sys           - System description as a LtiSystem/LtvSystem object
    initial_state - Initial state as a deterministic n-dimensional vector
                    or a RandomVector object
    target_time   - Time of interest (non-negative scalar) | If target_time = 0,
                    then the stochasticity of the initial state is analyzed.
    target_set/tube  
                  - [Required only for state/concat-prob] Polyhedron/Tube object
                    over which the probability must be computed
    desired_accuracy 
                  - [Optional for state/concat-prob] Maximum absolute deviation
                    from the true probability estimate [Default: 1e-2]
 
  Outputs:
  --------
    rv            - ['state/concat-stoch'] Random vector describing the
                    state / concatenated state vector | It is a vector of
                    dimension (target_time + 1) * sys.state_dim to include the
                    initial state
    prob          - ['state/concat-prob'] Probability of occurence
 
  Notes:
  ------
  * Assumes IID disturbance.
  * The outputs are either (mean_vec, cov_mat) or (prob), depending on the
    method_str
  * For concat-prob, target_time can be any value between 0 and N where
    target_tube has a length of N+1 (N+1 target sets to include the
    constraints on the initial state).
  * For XXX-prob, the random vector is provided as the second output.
  * Prob{ w \in \theta Polytope(A,b) } is computed using
    RandomVector/getProbPolyhedron. Note that this is an underapproximation of
    the true probability
  * Requires the desired_accuracy to be at least 1e-2.
 
  ============================================================================
 
  This function is part of the Stochastic Reachability Toolbox.
  License for the use of this function is given in
       https://sreachtools.github.io/license/