Simulating simulink models
Skill matlab/simulink-agentic-toolkit/skills-catalog/model-based-design-core/simulating-simulink-models
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).From its SKILL.md
npx -y skills add matlab/simulink-agentic-toolkit --skill simulating-simulink-modelsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its file declares
Copied from the file, not written here
The file declares its own license as MathWorks BSD-3-Clause. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.7 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
Simulating Simulink Models with the sim Command
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.
When to Use
- Running a Simulink model from a MATLAB script
- Configuring simulation parameters (StopTime, solver, etc.) programmatically
- Passing input signals to root-level Inport blocks
- Accessing logged signal data after simulation
- Running parameter sweeps or batch simulations
When NOT to Use
- Writing declarative Gherkin-based tests → use
testing-simulink-models - Testing an individual subsystem or component → use
testing-simulink-models(requires Simulink Test; auto-creates a harness, compiles only the subsystem — much faster thansim()which always compiles the entire model)
Minimal working pattern
Always simulate using Simulink.SimulationInput and Simulink.SimulationOutput:
in = Simulink.SimulationInput('MyModel');
in = in.setModelParameter('StopTime', '10');
out = sim(in);
Setting parameters
Use SimulationInput methods to configure the simulation:
% 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);
Input signals
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.
dt = 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:
secs = seconds(t);
tt = timetable(secs, u);
ds = Simulink.SimulationData.Dataset;
ds{1} = tt;
in = in.setExternalInput(ds);
Discovering logged data
First, discover what kinds of logged data the model produces using who, then inspect signal names within logsout:
in = 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);
Accessing logged data
Logged signals are available through out.logsout. Access them directly by name:
% 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)
Multiple simulations
When running many simulations, create an array of Simulink.SimulationInput objects:
in = 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):
out = sim(in, 'UseFastRestart', 'on');
Parallel simulation (parsim)
To run multiple simulations in parallel, use parsim instead of looping over sim:
for 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.
Guardrails
- Never use
set_param,load_system, oropen_systemto drive simulation —SimulationInputreplaces all of these. - Never wrap
SimulationOutputaccess intry-catchorisfield—simeither returns a valid object or throws.SimulationOutputhas noisfieldmethod. - Never create unnecessary intermediate variables for logged data — access directly via
out.logsout.get('name').Values. - Always use
in/outas variable names forSimulationInput/SimulationOutput. - Always use
setExternalInputwith aDataset— don't pass comma-separated lists of variables.
Copyright 2026 The MathWorks, Inc.
What ships with it: 1 file
515 B alongside SKILL.md
- manifest.yaml515 B