Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Runs Simulink models programmatically for data exploration, parameter sweeps, and custom analysis using sim() with SimulationInput/SimulationOutput. Use when calling sim(), parsim, setExternalInput, setModelParameter, setVariable, or accessing logsout — any task producing simulation results for analysis (not pass/fail tests).
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -20% | 0% |
Use this skill to generate simulation results for analysis. For persistent, reusable pass/fail behavioral testing (especially of individual subsystems), use testing-simulink-models instead.
testing-simulink-modelstesting-simulink-models (requires Simulink Test; auto-creates a harness, compiles only the subsystem — much faster than sim() which always compiles the entire model)Always simulate using Simulink.SimulationInput and Simulink.SimulationOutput:
matlabin = Simulink.SimulationInput('MyModel'); in = in.setModelParameter('StopTime', '10'); out = sim(in);
Use SimulationInput methods to configure the simulation:
matlab% Model-level parameters (StopTime, SolverType, SimulationMode, etc.) in = in.setModelParameter('StopTime', '10', 'SolverType', 'Fixed-step'); % Block parameters — resolve path from blk_X ID (never type block names manually) blkPath = Simulink.ID.getFullName('MyModel:5'); in = in.setBlockParameter(blkPath, 'Gain', '5'); % MATLAB workspace variables used by the model in = in.setVariable('Kp', 1.2);
Pass input signals through Inport blocks using a Simulink.SimulationData.Dataset. Elements are matched to Inport blocks by index position — the first element maps to the Inport with port number 1, the second to port number 2, and so on.
matlabdt = 0.01; N = 1000; t = dt*(0:N)'; u = sin(2*pi*t); ts = timeseries(u, t); ds = Simulink.SimulationData.Dataset; ds{1} = ts; in = in.setExternalInput(ds); out = sim(in);
You can also use timetable as an input format:
matlabsecs = seconds(t); tt = timetable(secs, u); ds = Simulink.SimulationData.Dataset; ds{1} = tt; in = in.setExternalInput(ds);
First, discover what kinds of logged data the model produces using who, then inspect signal names within logsout:
matlabin = Simulink.SimulationInput('MyModel'); out = sim(in); % See what logging properties exist (logsout, yout, tout, etc.) who(out) % List individual signal names within logsout disp(out.logsout.getElementNames);
Logged signals are available through out.logsout. Access them directly by name:
matlab% Plot a logged signal plot(out.logsout.get('signalName').Values) % Get time and data separately sig = out.logsout.get('signalName').Values; plot(sig.Time, sig.Data)
When running many simulations, create an array of Simulink.SimulationInput objects:
matlabin = repmat(Simulink.SimulationInput('MyModel'),N,1); for k = 1:N in(k) = Simulink.SimulationInput('MyModel'); in(k) = in(k).setVariable('gain', gains(k)); end out = sim(in);
To enable fast restart for iterative sweeps (compiles the model only once):
matlabout = sim(in, 'UseFastRestart', 'on');
To run multiple simulations in parallel, use parsim instead of looping over sim:
matlabfor k = 1:N in(k) = Simulink.SimulationInput('MyModel'); in(k) = in(k).setVariable('gain', gains(k)); end out = parsim(in);
parsim also supports 'UseFastRestart','on' for faster batch runs.
set_param, load_system, or open_system to drive simulation — SimulationInput replaces all of these.SimulationOutput access in try-catch or isfield — sim either returns a valid object or throws. SimulationOutput has no isfield method.out.logsout.get('name').Values.in/out as variable names for SimulationInput/SimulationOutput.setExternalInput with a Dataset — don't pass comma-separated lists of variables.Copyright 2026 The MathWorks, Inc.
Other measured skills in the registry, with their headline benchmark lift.