getSimulationData
描述
使用这个函数创建一个默认的数据结构来模拟的多级MPC控制器nlmpcmove
函数。
对生成的数据结构的信息mpcmoveCodeGeneration
,请参阅getCodeGenerationData
。
创建一个初始模拟数据结构的使用simdata
= getSimulationData (nlmpcMSobj
)nlmpcmove
。
例子
模拟多级非线性MPC控制器使用初始猜测
这个例子展示了如何创建和模拟一个简单的多级MPC控制器闭环使用初始猜测,用MATLAB®函数nlmpcmove
。
创建多级MPC控制器
创建一个多级MPC对象的七个步骤,一个国家,一个操纵变量。
msobj = nlmpcMultistage (7, 1, 1);
定义您的状态和成本函数作为单独的文件在当前文件夹在文件夹在MATLAB路径建议,作为本地函数不支持C / c++的生成部署代码。金宝app但是,对于这个示例,状态,成本,和州雅可比矩阵函数被定义为本地函数结束时的例子。
指定的状态转换函数预测模型。
msobj.Model。StateFcn = @mystatefcn;
作为一项最佳实践,解决使用雅克比当他们是可用的,否则必须数值计算。你也可以自动生成一个雅可比矩阵函数使用generateJacobianFunction
。
指定状态转换函数的雅可比矩阵。
msobj.Model。StateJacFcn = @mystatejac;
指定除第一次调用外的所有阶段的成本函数
为i = 2:8 msobj.Stages(我)。CostFcn = @mycostfcn;结束
定义初始条件,创建数据结构,并验证功能
初始化植物状态和输入。
x = 3;mv = 0;
创建初始模拟数据结构。
simdata = getSimulationData (msobj)
simdata =结构体字段:InitialGuess: []
验证函数和数据结构。
validateFcns (msobj x, mv, simdata);
Model.StateFcn是OK. Model.StateJacFcn is OK. "CostFcn" of the following stages [2 3 4 5 6 7 8] are OK. Analysis of user-provided model, cost, and constraint functions complete.
在闭环模拟控制器
模拟控制回路5步骤。
为k = 1:5 (mv, simdata) = nlmpcmove (msobj x, mv, simdata);%计算和更新simdata移动[~,xhist] =数值(@ (t, xode) mystatefcn (xode mv) [0 msobj.Ts], x);%模拟植物样品的时间x = xhist(结束);%更新植物状态结束
自更新初始猜测提供作为输入参数内simdata
结构,nlmpcmove
不需要重新计算他们在每个时间步,节省了计算时间,提高了性能。更新初始猜测在每一个时间步是一个最佳实践。
显示最后的状态和操作变量值。
disp ([“x =最终值”num2str (x)))
x = -0.039868的最终值
disp ([“mv =最终值”num2str (mv)))
最终值的mv = -0.067044
金宝app支持功能
状态转换函数。
函数xdot = mystatefcn (x, u) xdot = u-sin (x);结束
雅可比矩阵的状态转换函数。
函数[A, B] = mystatejac (x, ~) = cos (x);B = 1;结束
阶段成本函数。
函数j = mycostfcn (s, x, u) j = abs (u) / s + s * x ^ 2;结束
输入参数
nlmpcMSobj
- - - - - -非线性多级MPC控制器
nlmpcMultistage
对象
多级非线性MPC控制器,指定为一个nlmpcMultistage
对象。
输出参数
simdata
——运行时仿真数据结构
结构
运行时仿真数据,指定为以下字段的结构。
MeasuredDisturbance
——测量扰动值
[]
(默认)| |行向量数组
测量扰动值,指定为一个行向量的长度N医学博士或数组N医学博士列,N医学博士是测量扰动的数量。如果你的多级MPC对象有任何干扰测量通道定义,您必须指定MeasuredDisturbance
。如果你的控制器没有测量干扰,你可以省略结构或指定它作为这个领域[]
。
使用相同的扰动值预测地平线,指定一个行向量。
不同的扰动值预测地平线k时间k+p,指定数组p+ 1行。在这里,k当前时间和吗p是预测地平线。每行包含一个预测地平线的扰动值的步骤。如果你指定不到p行,nlmpcmove
使用最后一行中的值来预测地平线的其余步骤。
如果您定义测量扰动输入对象,你必须提供他们通过simdata
在运行时。
MVMin
——被控变量下界
[]
(默认)| |矩阵行向量
操纵变量下界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVMin(:,我)
取代了ManipulatedVariables .Min(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
如果simdata
不包含MVMin
场,然后操纵变量下界输入对象(如果存在)在运行时不会改变。
MVMax
——操纵变量上界
[]
(默认)| |矩阵行向量
操纵变量上界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVMax(:,我)
取代了ManipulatedVariables .Max(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
如果simdata
不包含MVMax
场,然后操纵变量上界输入对象(如果存在)在运行时不会改变。
MVRateMin
——被控变量率下界
[]
(默认)| |矩阵行向量
MVRateMax
——被控变量率上界
[]
(默认)| |矩阵行向量
StateMin
——国家下界
[]
(默认)| |矩阵行向量
州下界,指定为一个行向量的长度Nx或一个矩阵Nx列,Nx的状态数。StateMin(:,我)
取代了州.Min(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k+ 1,k+p,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
如果simdata
不包含StateMin
字段,那么国家下界输入对象(如果存在)在运行时不会改变。
StateMax
——国家上界
[]
(默认)| |矩阵行向量
州上界,指定为一个行向量的长度Nx或一个矩阵Nx列,Nx的状态数。StateMax(:,我)
取代了州.Max(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k+ 1,k+p,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
如果simdata
不包含StateMax
字段,那么国家上界输入对象(如果存在)在运行时不会改变。
StateFcnParameters
——状态函数参数值
[]
(默认)|向量
态函数参数值,指定为一个向量的长度等于价值Model.ParameterLength
多级控制器对象的属性。如果Model.StateFcn
需要一个参数向量,您必须提供其值在运行时使用这个字段,否则你可以省略这一领域或设置它[]
。
StageFcnParameters
——阶段函数参数值
[]
(默认)|向量
阶段函数参数值,指定为一个向量长度等于中的所有值的总和(我).ParameterLength阶段
多级控制器对象的属性。如果任何成本或约束函数中定义阶段
房地产需求参数向量,在运行时必须提供所有参数向量(堆叠在一列)使用这个字段,否则你可以省略这一领域或设置它[]
。
你必须栈参数向量列向量的所有阶段StageFcnParameters
如下。
阶段1(参数向量;参数向量为第二阶段;…参数向量阶段p + 1;]
TerminalState
——终端状态
[]
(默认)|向量
终端状态,指定为一个列向量和尽可能多的元素的数量。终端状态所需的状态在最后预测步骤。指定所需的终端状态通过这个领域在运行时,您必须指定的有限值TerminalState
场的模型
的属性nlmpcMSobj
。指定正
你不需要的国家限制终端价值。在运行时,nlmpcmove
忽略任何值TerminalState
领域的simdata
对应于正
值nlmpcMSobj
。如果你不指定任何终值条件nlmpcMSobj
,这个领域不是中创建simdata
。
如果simdata
不包含TerminalState
场,那么终端状态约束输入对象(如果存在)在运行时不会改变。
InitialGuess
——决策变量的初始猜测
[]
(默认)|向量
决策变量的初始猜测,指定为一个行向量的长度等于长度之和为每个阶段的所有决策变量向量。
你一定是堆栈的初始猜测所有阶段的列向量InitialGuess
如下。
阶段1(状态向量的估计;被控变量向量猜第一阶段;被控变量向量率猜第一阶段;%如果使用松弛变量向量猜第一阶段;%如果状态向量估计用于第二阶段;被控变量向量猜第二阶段;被控变量向量率猜第二阶段;%如果猜松弛变量向量用于第二阶段;%如果使用…状态向量估计阶段p + 1; manipulated variable vector guess for stage p+1; manipulated variable vector rate guess for stage p+1; % if used slack variable vector guess for stage p+1; % if used ]
如果InitialGuess
是[]
,然后nlmpcmove
计算的初始猜测x
和lastmv
参数。
一般来说,在闭环仿真,您没有指定InitialGuess
你自己。相反,当调用nlmpcmove
,返回simdata
输出参数,其中包含计算初始猜测下一个控制间隔。然后您可以通过simdata
作为输入参数nlmpcmove
在接下来的控制区间。这些步骤是一个最佳实践,即使你不指定任何其他运行时选项。
版本历史
介绍了R2021a
Abrir比如
这种版本modificada德埃斯特比如。害怕Desea abrir埃斯特比如con sus modificaciones吗?
第一de MATLAB
Ha事实clic en联合国围绕此时一个埃斯特第一de MATLAB:
Ejecute el第一introduciendolo en la ventana de第一de MATLAB。洛杉矶navegadores网络没有admiten第一de MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。