perform a Monte Carlo analysis of a MapleSim model - MapleSim Help

Online Help

All Products    Maple    MapleSim


Home : Support : Online Help : MapleSim : MapleSim Application Programming Interface : API Commands : Analysis : MapleSim/Analysis/MonteCarlo

MapleSim[Analysis][MonteCarlo] - perform a Monte Carlo analysis of a MapleSim model

Calling Sequence

MonteCarlo(C, params, options)

Parameters

C

-

module; output of GetCompiledProc

params

-

set or list of equations; model parameters to vary

options

-

(optional) equation(s) of the form option = value; specify options for MonteCarlo

Description

• 

The MonteCarlo command performs a Monte Carlo analysis of a MapleSim model. A MapleSim model is repeatedly simulated with selected model parameters varied using specified random variables.

• 

The C parameter is a module, the output of GetCompiledProc. See the Advanced Usage section in the Examples for further details.

• 

The params parameter specifies the model parameters that are varied. It is either a set or list of equations. The left side of each equation is the name of the parameter, the right side is a random variable.

• 

By default, the result is a list of records, one for each simulation. If the include_nominal option is set to true, the first record corresponds to the output of the model with nominal parameter values.  Each record has the following fields:

– 

params: the set of equations specifying the value of each parameter;

– 

data: the Matrix whose first column is the time samples of a simulation and whose remaining columns are the values of the outputs of C.

– 

errors : a string corresponding to an error that occurred during the simulation; the empty string indicates no error occurred. This field is present only if the C module was generated with the witherror option to GetCompiledProc.

Examples

withMapleSim:-Analysis:

withStatistics:

Assign model the filename of the MapleSim model we want to analyze.

modelcatkernelopts'toolboxdir'=MapleSim,/data/examples/RLCcircuit.msim:

Use MapleSim[LinkModel] to link to the MapleSim model.

AMapleSim:-LinkModelfilename=model:

Inspect the available parameters.

A:-GetParametersallparams

C=1,L=1,R1_T_ref=600320,R1_alpha=0,R=1,S1_amplitude=1,S1_freqHz=1,S1_offset=0,S1_phase=0

(1)

Use the GetCompiledProc export of A to assign the module that will be passed to MonteCarlo. Assign nominal values for the two model parameters of interest.

C1A:-GetCompiledProcparams=L=4,C=5:

Assign a simple procedure that generates a random variable uniformly distributed around a nominal value.

rvnom,tol→RandomVariableUniformDistributionnom1tol,nom1+tol:

Call MonteCarlo, using C1 and assigning random variables for the L and C model parameters. The C_opts option specifies that the final time of the simulation is 0.5 seconds. The include_nominal option means the first simulation corresponds to the given nominal values of the model parameters. The num_sims option specifies that 100 randomized simulations are made.

resultsMonteCarloC1,L=rv4,0.1,C=rv5,0.1,C_opts=tf=1,ds=0.01,include_nominal,num_sims=100:

Verify that the values of the parameters for the first simulation are the nominal values. The subexpression results[1] accesses the first element of the list results. That element is a record.  The full expression results[1]:-params specifies the params field of that record.  The params field, as seen below, is a set of equations that express the sampled values of the parameters.

results1:-params

C=5.,L=4.

(2)

Display the data for the final two sample times for the first (nominal) simulation. The notation results[1] accesses the first record stored in the list results; results[1]:-data references the data field (a Matrix) in that record; the [-2..-1,..] indices extract a sub-block of the Matrix (the last two rows, all columns), see rtable_indexing.

results[1]:-data[-2..-1,..];

0.9900000000000010.006408918431351971.0.00647314869227591

(3)

The first column is the time, the remaining column(s) corresponds to the output(s) of C1:

C1:-GetOutputs

Voutt

(4)

Plot the output versus time for all records. To do that, generate a set of two-column matrices, the first column being the time, the second being the output of interest. The seq command is used to sequentially access the Matrices in results. The expression rec:-data[..,[1,2]] corresponds to the appropriate sub-block of the Matrix in the data field; in this case, all rows (..) and the first and second columns, ([1,2]). Because each Matrix is already two-columns, we could have used the simpler notation rec:-data, however, if the system has more than one output (probe), we would then use the notation rec:-data[..,[1,k]], where k is the column of interest.

plot({seq(rec:-data[..,[1,2]], rec=results)});

Generate a histogram of the final output point by creating a Vector of the data and passing it to Statistics[Histogram]. The expression rec:-data[-1,2] evaluates to the final row (-1), second column, of the data Matrix of a record in the results list.

X := Vector([seq(rec:-data[-1,2], rec=results)]):

HistogramX

Assigning an Objective Procedure

• 

The module returned by GetCompiledProc has a SetObjective export that uses a provided procedure to manipulate the output. Here we pass it a procedure to square the output (column two of the matrix).

C1:-SetObjective( proc(M)
                  local i;
                      for i to upperbound(M,1) do
                          M[i,2] := M[i,2]^2;
                      end do;
                      M;
                  end proc):

• 

Run a MonteCarlo analysis with the squared output.

results2MonteCarloC1,L=rv4,0.1,C=rv5,0.1,C_opts=tf=1,ds=0.01,include_nominal:

plot({seq(rec:-data[..,[1,2]], rec=results2)});

• 

The objective procedure is not limited to modifying the matrix of simulation data, it can also compute a value from the matrix and return that. Here we assign a procedure that returns the peak of the squared result.

C1:-SetObjective(proc(M) max(map(x->x^2, M[..,2])) end proc):

• 

Run a MonteCarlo analysis; use the ret_record option to return a record.

results3MonteCarloC1,L=rv4,0.1,C=rv5,0.1,C_opts=tf=1,ds=0.01,include_nominal,ret_record:

• 

Compute the range over which the peak value varied.

evalf[2]min..maxresults3:-data

0.0031..0.0043

(5)

See Also

MapleSim, MapleSim[Analysis][ParameterSweep], MapleSim[LinkModel]


Download Help Document

Was this information helpful?



Please add your Comment (Optional)
E-mail Address (Optional)
What is ? This question helps us to combat spam