主要内容

为非线性MPC指定预测模型

预测模型的非线性MPC控制器由以下用户定义函数:

  • 态函数——预测植物状态如何随时间而变化

  • 输出函数,计算装置输出的状态和输入变量

您可以指定连续时间和离散时间预测模型。

模拟控制器之前,这是最佳实践来验证您的自定义功能,包括状态函数,输出函数和雅克比时使用validateFcns命令。

态函数

您可以指定一个连续时间和离散时间状态函数。为:

  • 连续时间预测模型,状态函数导数的函数。

    d x / d t = f ( x , u )

  • 离散时间预测模型,状态函数是状态更新功能。

    x ( k + 1 ) = f ( x ( k ) , u ( k ) )

由于非线性MPC控制器是一个离散时间控制器,如果你的态函数是连续时间时,控制器自动可使用隐式梯形积分法模型。该方法可以处理适度硬模型,其预测精度取决于控制器样品时间;也就是说,大样本的时间可能会导致不准确的预测。

如果默认的离散化方法不提供令人满意的预测对于您的应用程序,您可以指定自己的离散时间预测模型,使用不同的方法。这样做,您可以把一个连续时间状态函数从给定的初始条件,xk下一个状态,xk + 1。这样做数值时,避免需要迭代的方法,比如一些variable-step-size方法,因为这些方法引入降解解算器性能的数值噪声。显式欧拉方法和多步足够小步大小通常是最好的方法先试一试。例如,看到的摆起控制使用非线性模型预测控制的钟摆

你可以指定你的态函数在下列方式之一。

  • 一个函数的名称在当前工作目录或MATLAB®路径,指定为一个字符串或字符向量

    模型。StateFcn =“myStateFunction”;
  • 处理函数在当前工作目录中或MATLAB路径

    模型。StateFcn = @myStateFunction;
  • 匿名函数

    模型。StateFcn = @ (x, u, params) myStateFunction (x, u, params)

你的状态函数必须有下列形式之一的签名。

  • 如果你的控制器不使用可选参数:

    函数z = myStateFunction (x, u)
  • 如果您的控制器使用参数。在这里,参数个数是一个以逗号分隔的参数:

    函数z = myStateFunction (x, u, params)

此表描述了这个函数的输入和输出,地点:

  • Nx是州的数量等于Dimensions.NumberOfStates控制器的属性。

  • Nu是输入的数量,包括所有操纵变量,测量干扰,和无边无际的干扰,等于Dimensions.NumberOfInputs控制器的属性。

论点 输入/输出 描述
x 输入 当前状态,指定为一个列向量的长度Nx
u 输入 当前的输入,指定为一个列向量的长度Nu
参数个数 输入

可选参数,指定为一个以逗号分隔(例如p1, p2, p3)。相同的参数被传递到预测模型中,自定义代价函数和自定义的约束功能的控制器。

如果你的模型使用可选参数,您必须指定使用的参数的数量Model.NumberOfParameters控制器的属性。

z 输出 态函数输出,返回一个列向量的长度Nx。对于一个连续时间的预测模型,z包含国家衍生品,dx / dt离散时间预测模型,z包含下一个州,x (k + 1)

状态函数的一个例子,考虑到连续时间模型与状态方程如下:

x ˙ 1 = x 4 x ˙ 2 = x 5 x ˙ 3 = x 6 x ˙ 4 = ( u 1 u 2 + u 3 u 4 ) 因为 ( x 3 ) x ˙ 5 = ( u 1 u 2 + u 3 u 4 ) ( x 3 ) x ˙ 6 = 0.2 ( u 1 u 2 u 3 + u 4 )

您可以指定状态函数如下:

z = 0 (6,1);z (1) = x (4);z (2) = x (5);z (3) = x (6);z (4) = (u (1) - (2) + u (3) - (4)) * cos (x (3));z (5) = (u (1) - (2) + u (3) - (4)) * sin (x (3));z (6) = 0.2 * (u (1) - (2) - u (3) + (4));

态函数雅克比

为了提高计算效率,最佳实践是指定一个对你的态函数分析雅可比矩阵。如果你不指定一个雅可比矩阵,控制器使用数值摄动计算雅可比矩阵。对你的态函数,指定一个雅可比矩阵设置Jacobian.StateFcn控制器的属性之一。

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    Jacobian.StateFcn=“myStateJacobian”;
  • 处理函数在当前工作目录中或MATLAB路径

    Jacobian.StateFcn=@myStateJacobian;
  • 匿名函数

    Jacobian.StateFcn=@(x,u,params) myStateJacobian(x,u,params)

州雅可比矩阵函数必须有以下签名。

  • 如果你的控制器不使用可选参数:

    函数[A, Bmv] = myStateJacobian (x, u)
  • 如果您的控制器使用参数。在这里参数个数是一个以逗号分隔的参数:

    函数[一个,Bmv] = myStateJacobian (x, u, params)

州雅可比矩阵函数的输入参数是一样的国家输入的函数。此表描述了雅可比矩阵的输出函数,地点:

  • Nx是州的数量等于Dimensions.NumberOfStates控制器的属性

  • Nu是输入的数量,包括所有操纵变量,测量干扰,和无边无际的干扰,等于Dimensions.NumberOfInputs控制器的属性

论点 描述
一个 雅可比矩阵的态函数输出,z关于x,作为一个返回Nx——- - - - - -Nx数组, 一个 ( , j ) = z ( ) / x ( j )
Bmv 雅可比矩阵的态函数输出的操纵变量,作为指定Nx——- - - - - -Nmv数组, Bmv ( , j ) = z ( ) / u ( V ( j ) ) MV(j)是jMV指数Dimensions.MVIndex控制器的财产。Bmv只包含梯度对操纵变量u,因为测量和不可测量的干扰不是决策变量。

再次考虑,状态函数与状态方程如下:

x ˙ 1 = x 4 x ˙ 2 = x 5 x ˙ 3 = x 6 x ˙ 4 = ( u 1 u 2 + u 3 u 4 ) 因为 ( x 3 ) x ˙ 5 = ( u 1 u 2 + u 3 u 4 ) ( x 3 ) x ˙ 6 = 0.2 ( u 1 u 2 u 3 + u 4 )

找到雅克比,计算状态方程的偏导数,对美国和操纵变量,假设所有四个输入操纵变量。

一个= 0 (6,6);(4)= 1;(2、5)= 1;(3、6)= 1;(4,3)= (u (1) - (2) + u (3) - (4)) * sin (x (3));(5,3)= (u (1) - (2) + u (3) - (4)) * cos (x (3));B = 0 (4);B (4) = cos (x (3)) * (1 1 1);:B(5日)= sin (x (3)) * (1 1 1);:B(6日)= 0.2 * (1 1 1);

输出函数

预测模型的输出函数相关的状态和输入输出电流控制间隔。如果州的数量和输出的预测模型是相同的,你可以省略OutputFcn,这意味着所有国家是可测量的;也就是说,每个输出对应于一个状态。

请注意

OutputFcn不能直接引线在任何时间从任何操纵变量输出;换句话说,非线性MPC总是假定Dmv = 0

您可以指定您的输出函数以以下方式之一。

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    模型。输出Fcn =“myOutputFunction”;
  • 处理函数在当前工作目录中或MATLAB路径

    模型。输出Fcn = @myOutputFunction;
  • 匿名函数

    模型。输出Fcn = @(x,u,params) myOutputFunction(x,u,params)

你的输出函数必须有下列形式之一的签名。

  • 如果你的控制器不使用可选参数:

    函数y = myOutputFunction (x, u)
  • 如果您的控制器使用参数。在这里,参数个数是一个以逗号分隔的参数:

    函数y = myOutputFunction (x, u, params)

此表描述了这个函数的输入和输出,地点:

  • Nx是州的数量等于Dimensions.NumberOfStates控制器的属性。

  • Nu是输入的数量,包括所有操纵变量,测量干扰,和无边无际的干扰,等于Dimensions.NumberOfInputs的控制器。

  • NY是输出的数量等于Dimensions.NumberOfOutputs控制器的属性。

论点 输入/输出 描述
x 输入 当前状态,指定为一个列向量的长度Nx
u 输入 当前的输入,指定为一个列向量的长度Nu
参数个数 输入

可选参数,指定为一个以逗号分隔(例如p1, p2, p3)。相同的参数被传递到预测模型中,自定义代价函数和自定义的约束功能的控制器。

如果你的模型使用可选参数,您必须指定参数的数量Model.NumberOfParameters

y 输出 电流输出,返回一个列向量的长度Ny

作为一个输出函数的一个例子,考虑以下输出方程。记得,你的输出函数不能直接引线从任何被控变量在任何时间任何输出。

y 1 = x 1 y 2 = x 2 + 0.2 x 3 y 3 = x 3 x 4

您可以指定输出函数如下:

y = 0 (6,1);y = x (1) (1);y (2) = (2) + 0.2 * x (3);y (3) = x (3) * (4);

输出函数雅克比

为了提高计算效率,最佳实践是指定一个分析雅可比矩阵的输出函数。如果你不指定一个雅可比矩阵,控制器使用数值摄动计算雅可比矩阵。指定输出函数的雅可比矩阵,设置Jacobian.OutputFcn控制器的属性之一。

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    Jacobian.OutputFcn=“myOutputJacobian”;
  • 处理函数在当前工作目录中或MATLAB路径

    Jacobian.OutputFcn=@myOutputJacobian;
  • 匿名函数

    Jacobian.OutputFcn=@(x,u,params) myOutputJacobian(x,u,params)

你的雅可比矩阵输出函数必须有以下签名。

  • 如果你的控制器不使用可选参数:

    函数C = myOutputJacobian (x, u)
  • 如果您的控制器使用参数。在这里,参数个数是一个以逗号分隔的参数:

    函数C = myOutputJacobian (x, u, params)

雅可比矩阵的输出函数的输入参数是一样的输入输出的功能。此表描述了雅可比矩阵函数的输出。因为输出函数不能直接从任何操纵变量输出引线,只输出雅可比矩阵函数返回的输出函数的梯度的模型。

论点 描述
C 雅可比矩阵的输出函数,作为一个返回Ny——- - - - - -Nx数组, C ( , j ) = y ( ) / x ( j )

再次考虑,以下输出方程的模型:

y 1 = x 1 y 2 = x 2 + 0.2 x 3 y 3 = x 3 x 4

找到雅克比,计算输出的偏微分方程的状态。因为输出函数不能直接引线从任何被控变量在任何时间任何输出,你不计算雅可比矩阵对操纵变量。

C = 0 (3、4);C (1, 1) = 1;C (2, 2) = 1;C (2、3) = 0.2;C (3) = x (4);C (3、4) = x (3);

指定可选的模型参数

你可以指定可选参数非线性MPC预测模型,成本函数和自定义约束。为此,通过一个以逗号分隔的参数参数(例如您的自定义函数p1, p2, p3)。这些参数必须是数值。同时,你必须指定模型参数使用的数量Model.NumberOfParameters控制器的属性。

相同的参数被传递到预测模型中,自定义代价函数,定义约束函数和各自的雅克比。例如,即使状态函数只使用参数p1,约束函数仅使用参数p2,成本函数只使用参数p3,您还必须定义三个参数。所有这些参数传递到所有这些功能,你必须选择正确的参数在每个函数使用。

例如,指定的样品时间离散时间状态函数作为一个参数,看看摆起控制使用非线性模型预测控制的钟摆

增加预测模型与无边无际的干扰

你可以增加你的预测模型包括不可测量的干扰。例如,如果你的工厂没有一个积分器和你想拒绝一个无边无际的干扰,增强你的计划与扰动模型。这样做允许外部状态估计量检测的干扰,从而使非线性MPC控制器足够的信息拒绝它。

在仿真过程中,控制器通过一个0到无边无际的扰动输入通道,由于信号是无限的和默认假定为零均值。

增加你的预测模型时,您必须指定一个或多个输入信号无节制的干扰在创建控制器使用nlmpc。例如,创建一个控制器,前两个输入都是被操纵的变量和第三个输入是一个无边无际的干扰(UD)。

nlobj = nlmpc (nx、纽约、“MV”(1 - 2),“UD”3);

指定无边无际的扰动模型的状态和输出函数的预测模型。这无边无际的扰动模型可以任意模型,准确地捕捉扰动的影响在你的工厂。例如:

  • 如果你期望一个梯状UD植物输出,然后指定UD模型作为积分器状态函数,并将积分器状态添加到植物输出在输出函数。

  • 如果你期望ramp-like UD工厂输入,然后指定UD模型作为一个积分器和积分器的输出添加到输入信号状态函数。

任何州时添加指定无边无际的扰动模型预测模型中包含状态向量。的值在这无边无际的扰动模型状态反映在模拟干扰行为。这种状态向量对应x输入参数的函数和状态X输入参数来定制成本和约束功能。

为例,可以改进预测模型对随机状输出扰动,明白了非线性模型预测控制的放热化学反应堆

另请参阅

相关的话题