主要内容

validateFcns

分析预测模型和自定义的函数nlmpcnlmpcMultistage对象的潜在问题

自从R2018b

描述

validateFunctions测试的预测模型、自定义成本,自定义约束,和雅可比矩阵函数的非线性MPC控制器等潜在问题的信息是否丢失,是否输入和输出参数的任何用户提供的功能是不兼容的对象设置或用户提供的分析梯度/雅可比矩阵函数是否数值准确。当你第一次设计非线性MPC控制器,或者当你做出重大的改变现有的控制器,这是最佳实践来验证控制器的功能。

非线性MPC

例子

validateFcns (nlmpcobj,x,mv)测试函数的非线性MPC控制器nlmpcobj对潜在的问题。国家指定的功能测试使用和操纵变量值,xmv,分别。这些值可以表示名义条件或任意操作点。使用这种语法如果控制器没有测量扰动和参数。

例子

validateFcns (nlmpcobj,x,mv,医学博士)指定测量干扰值。如果你的控制器测量干扰频道,您必须指定医学博士。这些值可以表示名义条件或任意操作点。

例子

validateFcns (nlmpcobj,x,mv,医学博士,参数)指定参数值。如果你的控制器参数,您必须指定参数

validateFcns (nlmpcobj,x,mv,医学博士,参数,裁判)指定输出引用的名义条件或任意操作点。

validateFcns (nlmpcobj,x,mv,医学博士,参数,裁判,mvtarget)指定被控变量的目标在名义条件或任意操作点。

多级非线性MPC

validateFcns (nlmpcMSobj,x,mv)多级非线性MPC控制器的功能测试nlmpcMSobj对潜在的问题。功能测试使用指定的国家和操纵变量值,xmv,分别。这些值可以表示名义条件或任意操作点。使用这种语法如果控制器没有测量扰动和参数。

例子

validateFcns (nlmpcMSobj,x,mv,simdata)指定额外的simdata结构。如果参数所需的功能状态和阶段,您需要提供simdata

例子

全部折叠

创建非线性MPC控制器与六个州,六个输出,和四个输入。

nx = 6;纽约= 6;ν= 4;nlobj = nlmpc (nx、纽约、ν);
零权重应用于一个或多个ov因为有MVs比ov少。

指定控制器样品时间和视野。

t = 0.4;p = 30;c = 4;nlobj。Ts= Ts; nlobj.PredictionHorizon = p; nlobj.ControlHorizon = c;

指定预测模型状态函数和雅可比矩阵的状态函数。对于这个示例,使用模型的飞行机器人。

nlobj.Model。StateFcn =“FlyingRobotStateFcn”;nlobj.Jacobian。StateFcn =“FlyingRobotStateJacobianFcn”;

指定一个自定义代价函数控制器,取代了标准的成本函数。

nlobj.Optimization。CustomCostFcn = @ (X, U, e,数据)Ts *金额(金额(U (1: p)));nlobj.Optimization。ReplaceStandardCost = true;

指定一个自定义的约束函数控制器。

nlobj.Optimization。CustomEqConFcn = @ (X, U,数据)X(最终:)”;

验证预测模型和自定义函数在初始状态(x0)和初始输入(情况)的机器人。

x0 =(-10; -10;π/ 2,0,0,0);情况= 0(ν,1);validateFcns (nlobj x0,情况);
Model.StateFcnis OK. Jacobian.StateFcn is OK. No output function specified. Assuming "y = x" in the prediction model. Optimization.CustomCostFcn is OK. Optimization.CustomEqConFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.

创建一个非线性MPC控制器有四个州,两个输出,和一个输入。

nx = 4;纽约= 2;ν= 1;nlobj = nlmpc (nx、纽约、ν);
零权重应用于一个或多个ov因为有MVs比ov少。

指定控制器的样品时间和视野。

t = 0.1;nlobj。Ts= Ts; nlobj.PredictionHorizon = 10; nlobj.ControlHorizon = 5;

指定控制器的状态函数,在这个文件中pendulumDT0.m。离散时间模型集成了连续时间模型中定义pendulumCT0.m使用多步向前欧拉方法。

nlobj.Model。StateFcn =“pendulumDT0”;nlobj.Model。IsContinuousTime = false;

离散时间状态函数使用一个可选参数,样品时间Ts,将连续时间模型。因此,您必须指定数量的可选参数1

nlobj.Model。NumberOfParameters = 1;

指定的输出函数控制器。在本例中,第一个和第三个国家定义为输出。尽管这个输出函数不使用可选的样品时间参数,您必须指定参数作为输入参数(Ts)。

nlobj.Model。OutputFcn =@(x,u,Ts) [x(1); x(3)];

验证预测模型的功能为名义上的国家x0和名义上的投入情况。由于预测模型使用一个自定义参数,您必须通过这个参数validateFcns

x0 =[0.1; 0.2; 0.3 -π/ 2,);情况= 0.4;validateFcns (nlobj x0,情况,[],{Ts});
Model.StateFcnis OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.

创建一个非线性MPC控制器三个州,一个输出,和四个输入。前两个输入测量干扰,第三个输入是操纵变量,和第四输入是一个无边无际的干扰。

nlobj = nlmpc (3、1、“MV”3,“医学博士”(1 - 2),“UD”4);

视图控制器状态、输出和输入维度和指标,使用控制器的属性。

nlobj.Dimensions
ans =结构体字段:NumberOfStates: 3 NumberOfOutputs: 1 NumberOfInputs: 4 MVIndex: 3 MDIndex: [1 - 2] UDIndex: 4

指定控制器样品时间和视野。

nlobj。Ts= 0.5; nlobj.PredictionHorizon = 6; nlobj.ControlHorizon = 3;

指定预测模型状态函数,该文件exocstrStateFcnCT.m

nlobj.Model。StateFcn =“exocstrStateFcnCT”;

指定预测模型的输出功能,在文件中exocstrOutputFcn.m

nlobj.Model。OutputFcn =“exocstrOutputFcn”;

验证预测模型的功能使用初始操作点作为名义条件测试和设置无限的扰动状态,x0 (3),0。自模型测量干扰,必须通过他们validateFcns

x0 = (311.2639;8.5698;0);情况= [10;298.15;298.15);validateFcns (x0, nlobj情况(3),情况(1:2)');
Model.StateFcnis OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.

输入参数

全部折叠

非线性MPC控制器,指定为一个nlmpc对象。

多级非线性MPC控制器,指定为一个nlmpcMultistage对象。

状态值,指定为一个向量的长度Nx,在那里Nx等于nlmpcobj.Dimensions.NumberOfStates,或nlmpcMSobj.Dimensions.NumberOfStates。名义条件或状态值可以表示任意操作点。

被操纵的变量值,指定为一个向量的长度Nmv,在那里Nmv等于的长度nlmpcobj.Dimensions.MVIndexnlmpcMSobj.Dimensions.MVIndex。被控变量值可以表示名义条件或任意操作点。

测量扰动值,指定为一个向量的长度N医学博士,在那里N医学博士等于的长度nlmpcobj.Dimensions.MDIndex。测量扰动值能代表名义条件或任意操作点。

如果你的控制器测量干扰频道,您必须指定医学博士。如果你的控制器没有测量干扰频道,指定医学博士作为[]

所使用的参数值预测模型、自定义代价函数,和自定义约束,指定为一个单元阵列的长度Np,在那里Np等于nlmpcobj.Model.NumberOfParametersnlmpcMSobj.Model.NumberOfParameters。参数的顺序必须与订单中指定的模型函数,和每一个参数必须是一个数字参数正确的尺寸。

如果你的控制器参数,您必须指定参数。如果你的控制器没有参数,指定参数作为[]

参考输出值,指定为一个向量的长度Ny,在那里纽约等于nlmpcobj.Dimensions.NumberOfOutputsnlmpcMSobj.Model.NumberOfOutputs裁判传递给定制成本和约束功能。输出引用值可以表示名义条件或任意操作点。

如果你不指定裁判,控制器通过零的向量自定义功能。

被控变量的目标,指定为一个向量的长度Nmv,在那里Nmv等于的长度nlmpcobj.Dimensions.MVIndexnlmpcMSobj.Dimensions.MVIndex。操纵变量目标值可以代表名义条件或任意操作点。

mvtarget传递给定制成本和约束功能。如果你不指定mvtarget,控制器通过零的向量自定义功能。

运行时仿真数据,最初创建的getSimulationData,指定为结构字段详细描述nlmpcmove。为validateFcns,只有以下字段是相关的。

测量扰动值,指定为一个行向量的长度N医学博士或数组N医学博士列,N医学博士是测量扰动的数量。如果你的多级MPC对象有任何干扰测量通道定义,您必须指定MeasuredDisturbance。如果你的控制器没有测量干扰,这个领域不存在返回的结构getSimulationData

态函数参数值,指定为一个向量的长度等于价值Model.ParameterLength多级控制器对象的属性。如果Model.StateFcn需要一个参数向量,你必须在运行时使用这个字段提供值。如果您的态函数没有参数,这个领域不存在返回的结构getSimulationData

阶段函数参数值,指定为一个向量长度等于中的所有值的总和(我).ParameterLength阶段多级控制器对象的属性。如果任何成本或约束函数中定义阶段房地产需求参数向量,在运行时必须提供所有参数向量(堆叠在一列)使用这个字段。如果你阶段功能需要任何参数,这个领域不存在返回的结构getSimulationData

提示

  • 当你提供自己的雅可比矩阵分析功能,它是特别重要的,这些函数返回有效的雅可比矩阵值。如果validateFunctions检测大型用户定义的雅可比矩阵函数返回的值之间的差异和有限差分近似,验证雅可比矩阵的代码实现。

算法

为每个控制器功能,validateFunctions检查是否该函数:

  • 存在于MATLAB®路径

  • 所需数量的输入参数吗

  • 可以成功地执行没有错误吗

  • 返回输出参数与正确的大小和尺寸

  • 返回有效的数值数据;也就是说,它不返回

雅可比矩阵的函数,validateFunctions检查返回值是否与有限差分近似雅可比矩阵的值。这些使用数值摄动有限差分计算值。

版本历史

介绍了R2018b