主要内容

findop

R2026b

查找来自设定(配平)或仿真的稳态工作点

描述

op = findop(mdl,opspec) 返回符合 opspec 中设定的模型的工作点。通常,您会在稳态工作点对模型进行配平。Simulink® 模型必须处于打开状态。如果 opspec 是由工作点设定组成的数组,则 findop 返回由对应工作点组成的数组。

示例

op = findop(mdl,opspec,param) 针对在 param 中指定的参数值变化对模型进行批量配平。

示例

op = findop(___,options) 使用附加优化算法选项来查找模型的工作点。

示例

[op,opreport] = findop(___) 返回针对上述任一语法的工作点搜索报告 opreport。

示例

op = findop(mdl,tsnapshot) 使用模型初始条件仿真模型,并在 tsnapshot 中指定的仿真快照时间处提取工作点。

示例

op = findop(mdl,tsnapshot,param) 使用在 param 中指定的参数值变化批量仿真模型,并在仿真快照时间处提取工作点。

示例

示例

全部折叠

打开 Simulink 模型。

mdl = 'watertank';
open_system(mdl)

配平模型,找到水箱水位为 10 的稳态工作点。

创建默认工作点设定对象。

opspec = operspec(mdl);

为第一个模型状态配置设定。第一个状态必须处于稳态,且下界为 0。为状态值提供初始估计值 2。

opspec.States(1).SteadyState = 1;
opspec.States(1).x = 2;
opspec.States(1).Min = 0;

将第二个模型状态配置为某个已知状态且值为 10。

opspec.States(2).Known = 1;
opspec.States(2).x = 10;

找到符合这些设定的工作点。

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 
----------

打开 Simulink 模型。

mdl = 'watertank';
open_system(mdl)

在其标称值的 10% 范围内改变参数 A 和 b,并创建一个 3×4 参数网格。

[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
                         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;

为模型创建一个默认工作点设定。

opspec = operspec(mdl);

使用指定的工作点设定和参数网格配平模型。

opt = findopOptions('DisplayReport','off');
op = findop(mdl,opspec,params,opt);

op 是一个由对应于指定参数网格点的工作点对象组成的 3×4 数组。

打开 Simulink 模型。

mdl = 'watertank';
open_system(mdl)

创建一个默认工作点设定对象。

opspec = operspec(mdl);

创建一个选项集,将优化器类型设置为梯度下降并隐藏搜索报告显示。

opt = findopOptions('OptimizerType','graddescent','DisplayReport','off');

使用指定的选项集配平模型。

op = findop(mdl,opspec,opt);

打开 Simulink 模型。

mdl = 'watertank';
open_system(mdl)

创建默认工作点设定对象。

opspec = operspec(mdl);

为第一个模型状态配置设定。

opspec.States(1).SteadyState = 1;
opspec.States(1).x = 2;
opspec.States(1).Min = 0;

为第二个模型状态配置设定。

opspec.States(2).Known = 1;
opspec.States(2).x = 10;

找到满足这些设定的工作点,并返回工作点搜索报告。创建一个选项集以隐藏搜索报告显示。

opt = findopOptions('DisplayReport',false);
[op,opreport] = findop(mdl,opspec,opt);

opreport 描述在工作点搜索结束时优化算法与设定的匹配程度。

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 是每个状态的时间导数。由于所有 dx 值都为零,说明工作点处于稳态。

打开 Simulink 模型。

mdl = 'magball';
open_system(mdl)

仿真模型,并提取在 10 和 20 个时间单位处的工作点。

op = findop(mdl,[10,20]);

op 是一个由工作点组成的列向量,其中的每个元素对应一个快照时间。

显示第一个工作点。

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 
----------

打开 Simulink 模型。

mdl = 'watertank';
open_system(mdl)

指定参数值。参数网格为 5×4 数组。

[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;

仿真模型,并提取在 0、5 和 10 个时间单位处的工作点。

op = findop(mdl,[0 5 10],params);

findop 针对每个参数值组合仿真模型,并在指定的仿真时间处提取工作点。

op 是一个由工作点对象组成的 3×5×4 数组。

size(op)
ans =

     3     5     4

输入参数

全部折叠

Simulink 模型名称,指定为字符向量或字符串。该模型必须位于当前工作文件夹或 MATLAB® 路径中。

工作点设定,指定为使用 operspec 函数创建的 OperatingSpec 对象或 OperatingSpec 对象数组。

如果 opspec 是数组,则 findop 返回使用单个模型编译的对应工作点的数组。

用于配平的参数采样,指定为以下项之一:

  • 结构体 - 通过将参数指定为包含以下字段的结构体来改变单个参数的值。

    • Name - 参数名称,指定为字符向量或字符串。您可以在模型工作区、MATLAB 工作区或数据字典中指定任何是变量的模型参数。如果模型使用的变量不是标量变量,请将参数名称指定为解析成数值标量值的表达式。例如,使用向量 V 的第一个元素作为参数。

      parameters.Name = 'V(1)';
    • Value - 参数采样值,指定为双精度数组。

    例如,在 10% 的范围内改变参数 A 的值。

    parameters.Name = 'A';
    parameters.Value = linspace(0.9*A,1.1*A,3);
  • 结构体数组 - 改变多个参数的值。例如,在 10% 的范围内改变参数 A 和 b 的值。

    [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;

当您指定参数值变化时,findop 会针对每个参数值组合批量配平模型,并返回由对应工作点组成的数组。如果 param 仅指定可调参数,则软件使用单次编译来批量配平模型。

如果将 opspec 指定为单个工作点设定对象,并且 param 中的参数值生成的状态与 opspec 中的已知状态冲突,则 findop 会使用 opspec 中的设定配平模型。要在从参数值派生的状态值处配平模型,请将 opspec 指定为由对应 operspec 对象组成的数组。有关示例,请参阅针对参数变化批量配平 Simulink 模型。

工作点搜索选项,指定为 findopOptions 选项集。

提取模型工作点的仿真快照时间,对于单个快照,指定为标量;对于多个快照,指定为向量。findop 将对模型进行仿真,并在每个快照时间处计算模型状态的工作点。

输出参量

全部折叠

工作点,以 OperatingPoint 对象或 OperatingPoint 对象数组形式返回。op 的维度取决于指定的参数变化以及工作点设定或仿真快照时间。

参数变化为其查找工作点的目标生成的 op 维度
无参数变化单一工作点设定,由 opspec 指定单一工作点对象
单一快照时间,由 tsnapshot 指定
由工作点设定组成的 N1×...×Nm 数组,由 opspec 指定N1×...×Nm
Ns 快照,由 tsnapshot 指定长度为 Ns 的列向量
N1×...×Nm 参数网格,由 param 指定单一工作点设定,由 opspec 指定N1×...×Nm
单一快照时间,由 tsnapshot 指定
由工作点设定组成的 N1×...×Nm 数组,由 opspec 指定
Ns 快照,由 tsnapshot 指定Ns×N1×...×Nm。

例如,假设:

  • opspec 是单个工作点设定对象,param 指定一个 3×4×2 参数网格。在本例中,op 是一个由工作点组成的 3×4×2 数组。

  • tsnapshot 是标量,param 指定一个 5×6 参数网格。在本例中,op 是一个由工作点组成的 1×5×6 数组。

  • tsnapshot 是一个包含三个元素的行向量,param 指定一个 5×6 参数网格。在本例中,op 是一个由工作点组成的 3×5×6 数组。

每个工作点对象具有以下属性:

属性描述
ModelSimulink 模型名称,以字符向量形式返回。
States

状态工作点,以状态对象向量的形式返回。States 中的每个条目表示一个 Simulink 模块的支持的状态。

有关工作点对象的支持状态的列表,请参阅工作点对象中包含的 Simulink 模型状态。

注意

如果模块有多个命名的连续状态,则 States 包含的每个结构体对应于一个命名状态。

每个状态对象都有以下字段:

字段描述
Nx(只读)

模块中的状态数

Block

模块路径,以字符向量形式返回。

StateName

状态名称

x

所有支持的模块状态的值,以长度为 Nx 的向量形式返回。

Ts

每个支持的模块状态的采样时间和偏移量,以向量形式返回。对于连续时间系统,Ts 为零。

SampleType

状态时间速率,返回为下列值之一:

  • 'CSTATE' - 连续时间状态

  • 'DSTATE' - 离散时间状态

inReferencedModel

指示模块是否在参考模型内的标志,返回为下列值之一:

  • 1 - 模块在参考模型内。

  • 0 - 模块在当前模型文件中。

Description

模块状态描述,以字符向量形式返回。

Inputs

在工作点处的输入电平,以输入对象的向量形式返回。Inputs 中的每个条目表示模型中一个根级输入端口模块的输入电平。

每个输入对象都有以下字段:

字段描述
Nu(只读)

输入端口模块信号的数量

Block

输入端口模块名称

PortDimensions

输入端口接受的信号的维度

u

在工作点处的 Inport 模块输入电平,以长度为 Nu 的向量形式返回。

Description

输入端口模块输入描述,以字符向量形式返回。

Time

计算模型中的任何时变函数的时间,以向量形式返回。

Version

对象版本号

您可以使用圆点表示法或 set 函数来编辑 op 的属性。

工作点搜索报告,以 OperatingReport 对象形式返回。如果 op 是 OperatingPoint 对象数组,则 opreport 是对应的 OperatingReport 对象数组。

即使使用分号隐藏输出,此报告也会自动显示。要隐藏报告,请将 options 中的 DisplayReport 字段设置为 "off"。

每个工作点搜索报告都具有以下属性:

属性描述
Model

op 的 Model 属性值

Inputs

op 的 Inputs 属性值

Outputs

计算出的工作点处的输出值。此对象包含与 opspec 的 Outputs 属性相同的字段,外加 yspec,后者是所需的输出值。

States

op 的 States 属性值,外加 dx,后者包含状态导数值。对于离散时间状态,dx 是下一个状态值与当前状态值之差;即 x(k+1) – x(k)。

Timeop 的 Time 属性值
TerminationString优化终止条件,以字符向量形式返回。
OptimizationOutput

优化算法搜索结果,以包含以下字段的结构体形式返回:

字段描述
iterations

优化过程中执行的迭代次数

funcCount

优化过程中执行的函数计算次数

lssteplength

相对于搜索方向的线搜索步长(仅适用于活动集优化算法)

stepsize

最终迭代时状态向量中的位移(活动集和内点优化算法)

algorithm

使用的优化算法

firstorderopt

信赖域反射优化算法的一阶优化的度量;对于其他算法,则为 []

constrviolation

约束函数的最大值

message

退出消息

有关优化算法的详细信息,请参阅 Optimization Toolbox™ 文档。

详细信息

全部折叠

提示

  • 您可以使用 initopspec 在仿真快照处或之前计算的工作点处初始化工作点搜索。

  • 使用 linearize 在工作点 op 处线性化模型。

  • 要从工作点对象中提取状态值和输入值,请分别使用 getstatestruct 和 getinputstruct。

算法

默认情况下,findop 使用优化器 graddescent-elim。要使用不同的优化器,请使用 findopOptions 更改 options 中 OptimizerType 的值。

findop 自动设置这些 Simulink 模型属性以进行优化:

  • BufferReuse = "off"

  • BlockReductionOpt = 'off"

  • SaveFormat = "StructureWithTime"

优化完成后,Simulink 会还原原始模型属性。

替代功能

App

作为 findop 命令的替代方法,您可以通过以下方式之一找到工作点。

版本历史记录

在 R2006a 之前推出

全部展开