假设系统的模型为x(k+1)=Ax(k)+Bu(k)(离散形式状态空间方程)
即下一时刻的状态量由本时刻的状态量和输入量决定

其中u(k+i|k)表示在k时刻预测k+i时刻的输入
为做简化,设误差E即为状态x:

此时的J是关于x和u的二元函数,为了得到二次规划的标准形式,我们至少需要消去变量x或u之一,由于控制器由输入u决定,故我们决定消去变量x。
其中Q为误差加权矩阵,R为输入加权矩阵,F为终端误差加权矩阵。

由于x(k|k)即为k时刻下预测k时刻的状态,也就是当前状态作为的初始条件,这是一个已知量。那么根据模型函数就可以进行以下递推:

写作矩阵形式即:

注意这里右边黑色的xk是k时刻的初始状态向量,而左边绿色的Xk量矩阵则是k时刻下预测的N区间内的状态变量值矩阵。
回到J,我们将误差加权和展开结合终端误差得到以下矩阵形式:

同理我们也将输入加权和展开,则J可以写作:

其中bar{R}为R的一个对角阵。
我们看到第二项和第三项,由于J为一个数(1*1矩阵),由矩阵相加原则,第二项和第三项也必然为一个数,而一个数的转置即为它本身,故事实上第二项与第三项相等。

勘误:这里的结果应该是2倍的第二项或第三项,即:

同时,我们把第四项和第五项合并得到合成参数矩阵H,最终J的格式即为红框内的式子。
对比二次规划型可以看出,此时的J就是一个标准的二次规划型。
我们利用MATLAB的Quadprog()函数来求这个二次规划的最优解minJ对应的uk的值。

由于J的第一项为无关常量项,因而二次规划只需针对后两项,故事实上要得到最优的uk可以不求取矩阵G的值

为了更加明晰矩阵的运算,我们用公式编辑器结合一个例子再重复一遍以上操作:
假设输入量个数为p,状态量个数为n,预测区间为N

这里要注意的是,x(k|k)和u(k|k)也是一个矩阵,规模分别为n1和p1
在我们给出的例子中,p=2,n=1,N=3故有:

X[k]/U[k]是当前时间步k下对未来位于预测区间N内各状态量/输入量的预测
其中对X[k]的预测始终比U[k]多一步(一般地,可以多任意步)

矩阵M和C格式如下:

这里要注意的是,之前C矩阵中的0事实上也是一个零矩阵而非一个数
0

在我们给出的例子中:

对应J的形式即为:

其中G,E,H均为与M,C,Q,R,F相关的相,则整个J都能被求解。

在上述例子中,我们让误差E=x,而所有控制系统的控制目标均为误差等于0,故上述例子中的x的目标即为0。更一般的,我们希望x的目标为Xdesire(简写为Xd),则此时E=Xd-x。
那么把它推广到一般形式应该怎么做呢?其实很简单,我们只需要把控制的主体改为误差就可以了,即状态变量x本身就是误差E(之前的特例中是值相等,此时我们把其看做意义相等),原来的控制目标是让x=0,而我们只要将x换成E,用同样的控制逻辑控制E=0,那此时的x自然就是Xd了。

底盘MPC状态方程: