findop
Find steady-state operating point from specifications (trimming) or simulation
Syntax
Description
returns the operating point of the model that meets the specifications in
op = findop(mdl,opspec)opspec. Typically, you trim the model at a steady-state operating
point. The Simulink® model must be open. If opspec is an array of
operating point specifications, findop returns an array of
corresponding operating points.
Examples
Open the Simulink model.
mdl = 'watertank';
open_system(mdl)

Trim the model to find a steady-state operating point where the water tank level is 10.
Create default operating point specification object.
opspec = operspec(mdl);
Configure specifications for the first model state. The first state must be at steady state with a lower bound of 0. Provide an initial guess of 2 for the state value.
opspec.States(1).SteadyState = 1; opspec.States(1).x = 2; opspec.States(1).Min = 0;
Configure the second model state as a known state with a value of 10.
opspec.States(2).Known = 1; opspec.States(2).x = 10;
Find the operating point that meets these specifications.
op = findop(mdl,opspec);
Operating point search report:
---------------------------------
opreport =
Operating point search report for the Model watertank.
(Time-Varying Components Evaluated at time t=0)
Operating point search completed successfully using optimization.
States:
----------
Min x Max dxMin dx dxMax
______ ______ ______ ______ ______ ______
(1.) watertank/PID Controller/Integrator/Continuous/Integrator
0 1.2649 Inf 0 0 0
(2.) watertank/Water-Tank System/H
10 10 10 0 0 0
Inputs: None
----------
Outputs: None
----------
Open the Simulink model.
mdl = 'watertank';
open_system(mdl)

Vary parameters A and b within 10% of their nominal values, and create a 3-by-4 parameter grid.
[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
linspace(0.9*b,1.1*b,4));
Create a parameter structure array, specifying the name and grid points for each parameter.
params(1).Name = 'A'; params(1).Value = A_grid; params(2).Name = 'b'; params(2).Value = b_grid;
Create a default operating point specification for the model.
opspec = operspec(mdl);
Trim the model using the specified operating point specification and parameter grid.
opt = findopOptions('DisplayReport','off'); op = findop(mdl,opspec,params,opt);
op is a 3-by-4 array of operating point objects that correspond to the specified parameter grid points.
Open the Simulink model.
mdl = 'watertank';
open_system(mdl)

Create a default operating point specification object.
opspec = operspec(mdl);
Create an option set that sets the optimizer type to gradient descent and suppresses the search report display.
opt = findopOptions('OptimizerType','graddescent','DisplayReport','off');
Trim the model using the specified option set.
op = findop(mdl,opspec,opt);
Open the Simulink model.
mdl = 'watertank';
open_system(mdl)

Create default operating point specification object.
opspec = operspec(mdl);
Configure specifications for the first model state.
opspec.States(1).SteadyState = 1; opspec.States(1).x = 2; opspec.States(1).Min = 0;
Configure specifications for the second model state.
opspec.States(2).Known = 1; opspec.States(2).x = 10;
Find the operating point that meets these specifications, and return the operating point search report. Create an option set to suppress the search report display.
opt = findopOptions('DisplayReport',false);
[op,opreport] = findop(mdl,opspec,opt);
opreport describes how closely the optimization algorithm met the specifications at the end of the operating point search.
opreport
opreport =
Operating point search report for the Model watertank.
(Time-Varying Components Evaluated at time t=0)
Operating point search completed successfully using optimization.
States:
----------
Min x Max dxMin dx dxMax
______ ______ ______ ______ ______ ______
(1.) watertank/PID Controller/Integrator/Continuous/Integrator
0 1.2649 Inf 0 0 0
(2.) watertank/Water-Tank System/H
10 10 10 0 0 0
Inputs: None
----------
Outputs: None
----------
dx is the time derivative for each state. Since all dx values are zero, the operating point is at steady state.
Open the Simulink model.
mdl = 'magball';
open_system(mdl)

Simulate the model, and extract operating points at 10 and 20 time units.
op = findop(mdl,[10,20]);
op is a column vector of operating points, with one element for each snapshot time.
Display the first operating point.
op(1)
ans =
Operating point for the Model magball.
(Time-Varying Components Evaluated at time t=10)
States:
----------
x
__________
(1.) magball/Controller/PID Controller/Filter/Cont. Filter/Filter
5.4732e-07
(2.) magball/Controller/PID Controller/Integrator/Continuous/Integrator
14.0071
(3.) magball/Magnetic Ball Plant/Current
7.0036
(4.) magball/Magnetic Ball Plant/dhdt
8.443e-08
(5.) magball/Magnetic Ball Plant/height
0.05
Inputs: None
----------
Open Simulink model.
mdl = 'watertank';
open_system(mdl)

Specify parameter values. The parameter grids are 5-by-4 arrays.
[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,5),... linspace(0.9*b,1.1*b,4)); params(1).Name = 'A'; params(1).Value = A_grid; params(2).Name = 'b'; params(2).Value = b_grid;
Simulate the model and extract operating points at 0, 5, and 10 time units.
op = findop(mdl,[0 5 10],params);
findop simulates the model for each parameter value combination, and extracts operating points at the specified simulation times.
op is a 3-by-5-by-4 array of operating point objects.
size(op)
ans =
3 5 4
Input Arguments
Simulink model name, specified as a character vector or string. The model must be in the current working folder or on the MATLAB® path.
Operating point specifications, specified as an OperatingSpec object or an
array of OperatingSpec objects created using the operspec function.
If opspec is an array, findop returns
an array of corresponding operating points using a single model compilation.
Parameter samples for trimming, specified as one of the following:
Structure — Vary the value of a single parameter by specifying parameters as a structure with the following fields.
Name— Parameter name, specified as a character vector or string. You can specify any model parameter that is a variable in the model workspace, the MATLAB workspace, or a data dictionary. If the variable used by the model is not a scalar variable, specify the parameter name as an expression that resolves to a numeric scalar value. For example, use the first element of vectorVas a parameter.parameters.Name = 'V(1)';Value— Parameter sample values, specified as a double array.
For example, vary the value of parameter
Ain the 10% range.parameters.Name = 'A'; parameters.Value = linspace(0.9*A,1.1*A,3);Structure array — Vary the value of multiple parameters. For example, vary the values of parameters
Aandbin the 10% range.[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),... linspace(0.9*b,1.1*b,3)); parameters(1).Name = 'A'; parameters(1).Value = A_grid; parameters(2).Name = 'b'; parameters(2).Value = b_grid;
When you specify parameter value variations, findop batch
trims the model for each parameter value combination, and returns
an array of corresponding operating points. If param specifies
tunable parameters only, then the software batch trims the model using
a single compilation.
If you specify opspec as a single operating point specification object
and the parameter values in param produce states that
conflict with known states in opspec,
findop trims the model using the specifications in
opspec. To trim the model at state values derived
from the parameter values, specify opspec as an array
of corresponding operspec objects. For an example, see
Batch Trim Simulink Model for Parameter Variation.
Operating point search options, specified as a findopOptions option
set.
Simulation snapshot times at which to extract the operating
point of the model, specified as a scalar for a single snapshot or
a vector for multiple snapshots. findop simulates
the model and computes an operating point for the state of the model
at each snapshot time.
Output Arguments
Operating point, returned as an OperatingPoint object or an array of
OperatingPoint objects. The dimensions of
op depend on the specified parameter variations and
either the operating-point specifications or the simulation snapshot
time.
| Parameter Variation | Find operating point for... | Resulting op
Dimensions |
|---|---|---|
| No parameter variation | Single operating-point specification, specified by
opspec | single operating-point object |
Single snapshot time, specified by
tsnapshot | ||
N1-by-...-by-Nm
array of operating-point specifications, specified by
opspec | N1-by-...-by-Nm | |
Ns snapshots,
specified by tsnapshot | Column vector of length Ns | |
N1-by-...-by-Nm
parameter grid, specified by
param | Single operating-point specification, specified by
opspec | N1-by-...-by-Nm |
Single snapshot time, specified by
tsnapshot | ||
N1-by-...-by-Nm
array of operating-point specifications, specified by
opspec | ||
Ns snapshots,
specified by tsnapshot | Ns-by-N1-by-...-by-Nm. |
For example, suppose:
opspecis a single operating-point specification object andparamspecifies a 3-by-4-by-2 parameter grid. In this case,opis a 3-by-4-by-2 array of operating points.tsnapshotis a scalar andparamspecifies a 5-by-6 parameter grid. In this case,opis a 1-by-5-by-6 array of operating points.tsnapshotis a row vector with three elements andparamspecifies a 5-by-6 parameter grid. In this case,opis a 3-by-5-by-6 array of operating points.
Each operating-point object has the following properties:
| Property | Description | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Model | Simulink model name, returned as a character vector. | ||||||||||||||||||
States | State operating point, returned as a vector of state objects. Each entry in For a list of supported states for operating point objects, see Simulink Model States Included in Operating Point Object. Note If the block has multiple named continuous states, Each state object has the following fields:
| ||||||||||||||||||
Inputs | Input level at the operating point, returned as a vector of input objects. Each entry
in Each input object has the following fields:
| ||||||||||||||||||
Time | Times at which any time-varying functions in the model are evaluated, returned as a vector. | ||||||||||||||||||
Version | Object version number |
You can edit the properties of op using
dot notation or the set function.
Operating point search report, returned as an OperatingReport object. If
op is an array of OperatingPoint
objects, then opreport is an array of corresponding
OperatingReport objects.
This report displays automatically, even when you suppress the output using a semicolon. To
hide the report, set the DisplayReport field in
options to "off".
Each operating point search report has the following properties:
| Property | Description | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Model |
| ||||||||||||||||||
Inputs |
| ||||||||||||||||||
Outputs | Output values at the computed operating point. This object contains the same fields as
the | ||||||||||||||||||
States |
| ||||||||||||||||||
Time | Time property value of op | ||||||||||||||||||
TerminationString | Optimization termination condition, returned as a character vector. | ||||||||||||||||||
OptimizationOutput |
Optimization algorithm search results, returned as a structure with the following fields:
For more information about the optimization algorithm, see the Optimization Toolbox™ documentation. |
More About
A steady-state operating point of a model, also called an equilibrium or trim condition, includes state variables that do not change with time.
A model can have several steady-state operating points. For example, a hanging damped pendulum has two steady-state operating points at which the pendulum position does not change with time. A stable steady-state operating point occurs when a pendulum hangs straight down. When the pendulum position deviates slightly, the pendulum always returns to equilibrium. In other words, small changes in the operating point do not cause the system to leave the region of good approximation around the equilibrium value.
An unstable steady-state operating point occurs when a pendulum points upward. As long as the pendulum points exactly upward, it remains in equilibrium. However, when the pendulum deviates slightly from this position, it swings downward and the operating point leaves the region around the equilibrium value.
When using optimization search to compute operating points for nonlinear systems, your initial guesses for the states and input levels must be near the desired operating point to ensure convergence.
When linearizing a model with multiple steady-state operating points, it is important to have the right operating point. For example, linearizing a pendulum model around the stable steady-state operating point produces a stable linear model, whereas linearizing around the unstable steady-state operating point produces an unstable linear model.
Tips
You can initialize an operating point search at a simulation snapshot or a previously computed operating point using
initopspec.Linearize the model at the operating point
opusinglinearize.To extract state and input values from an operating point object, use
getstatestructandgetinputstruct, respectively.
Algorithms
By default, findop uses the optimizer
graddescent-elim. To use a different optimizer, change the value
of OptimizerType in options using findopOptions.
findop automatically sets these Simulink model
properties for optimization:
BufferReuse = "off"BlockReductionOpt = 'off"SaveFormat = "StructureWithTime"
After the optimization completes, Simulink restores the original model properties.
Alternative Functionality
App
As an alternative to the findop command, you can find
operating points in one of the following ways.
Compute operating points using the Steady State Manager. For an example, see Compute Operating Points from Specifications Using Steady State Manager.
If you are computing an operating point for linearization, you can find the operating point and linearize the model using the Model Linearizer. For an example, see Compute Operating Points from Specifications Using Model Linearizer.
Version History
Introduced before R2006aYou can now find a steady-state operating point of switched systems that are periodically driven or self-oscillating, such as power electronics circuits driven by a PWM signal. This feature is helpful when you want to find a steady-state operating point for such systems without simulating through initial transients to a steady-state condition.
To find a periodic operating point:
Create an operating point specification object using the
operspecfunction.Select a periodic signal in the model to monitor. You can monitor only one periodic signal in your model. If the signal is not a root-level output port, dd an output specification for it using the
addoutputspecfunction.Specify the known period of the signal.
Specify a convergence tolerance for the periodic signal values.
Calculate the operating point using the
findopfunction.
This approach typically converges to a steady-state operating point faster and allows you to automatically confirm that the periodic signal is in a steady state within a specified tolerance.
For more information, see these examples.
The input and output PortWidth properties of operating points
and operating point search reports will be removed in a future release. Use the new
Nu and Ny properties instead.
To update your code, change instances of PortWidth to either
Nu or Ny as shown in the following
table.
| Not Recommended | Recommended |
|---|---|
[op,report] = findop("scdplane",10);
numOut = op.Outputs(1).PortWidth;
numIn = report.Inputs(1).PortWidth; |
[op,report] = findop("scdplane",10);
numOut = op.Outputs(1).Ny;
numIn = report.Inputs(1).Nu; |
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)