求问,求帮助

function u_k= fcn(A,B,Q,R,F,x_k)

n=size(A,1); % A 是 n x n 矩阵, 得到 n=15

p=size(B,2); % B 是 n x p 矩阵, 得到 p=4

dt = 0.001;

I=eye(n);

A1 = I+A*dt; %离散化

B1 = dt*B;

N = 10; %预测区间

[E,H]=MPC_Matrices(A1,B1,Q,R,F,N,n,p); %求得E H矩阵

% 计算

u_k = Prediction(x_k,E,H,N,p); %求得此步得uk

function [E,H]=MPC_Matrices(A,B,Q,R,F,N,n,p) %算出E和H矩阵

C=zeros((N+1)*n,N*p); % 初始化 C 矩阵, 这一步令它有 (N+1)n x NP 个 0

%M1 = eye(n);

M1 = zeros((N + 1) * n, n);

M1(1:n, :) = eye(n);

temp =eye(n);

for i =1:N

rows = i*n+(1:n);

C(rows,:)=[temp*B,C(rows-n,1:end-p)]; %temp=A^(i-1)*B, tempt*B并上上一行去除最后一个元素到第n行

temp =A*temp;

M1((i + 1) * n + 1 - n:(i + 1) * n, :) = temp;

end

M = M1;

% 定义Q_ba和R_ba

Q_ba = kron(eye(N),Q);

Q_ba = blkdiag(Q_ba,F);

R_ba = kron(eye(N),R);

% 计算G, E, H

G=M'*Q_ba*M; % G: n x n

E=M'*Q_ba*C; % E: n x NP

H=C'*Q_ba*C+R_ba; % NP x NP

end

function u_k= Prediction(x_k,E,H,N,p) %二次规划求得最优的u_k

opts = optimoptions('quadprog','Algorithm','active-set','Display','iter');

x0 = zeros(N*p,1);

max = 5000;

ub = kron(ones(N*p,1),max);

lb = kron(ones(N*p,1),-max);

U_k = quadprog(H,E'*x_k,[],[],[],[],lb,ub,x0,opts);

u_k = U_k(1:p,1); % 取第一个结果

end

end

运行仿真时出错,仿真终止

原因:

  • Index exceeds array dimensions. Index value 82 exceeds valid range [1-81]. Error in quadprog.p
  • 'Active_sim_Baseline2/MPC controller/MPC controller' (line 43) 中出现错误
  • 'Active_sim_Baseline2/MPC controller/MPC controller' (line 11) 中出现错误 

      组件:Simulink | 类别:Block 错误

      会出现这样的错误,请问有没有大佬会的,我看维度好像是没有问题

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值