主要内容

findop

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

说明

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

示例

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

示例

op = findop(___,options) 使用附加优化算法 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 specifications were successfully met.
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% 范围内改变参数 Ab,并创建一个 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 specifications were successfully met.
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)

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

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;

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

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% 的范围内改变参数 Ab 的值。

    [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 指定为单个 operspec 对象,并且 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 Model States Included in Operating Point Object

注意

如果模块有多个命名的连续状态,则 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 对象形式返回。如果 opOperatingPoint 对象数组,则 opreport 是对应的 OperatingReport 对象数组。

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

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

属性描述
Model

opModel 属性值

Inputs

opInputs 属性值

Outputs

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

States

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

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

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

字段描述
iterations

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

funcCount

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

lssteplength

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

stepsize

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

algorithm

使用的优化算法

firstorderopt

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

constrviolation

约束函数的最大值

message

退出消息

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

详细信息

全部折叠

提示

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

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

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

算法

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

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

  • BufferReuse = 'off'

  • BlockReductionOpt = 'off'

  • SaveFormat = 'StructureWithTime'

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

替代功能

App

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

版本历史记录

在 R2006a 之前推出

全部展开