Error using plot Data must be a single matrix Y or a list of pairs X,Y

1 view (last 30 days)
I am trying to plot the manipulated and controlled variables in Dynamic Matrix Control for a system. The code is given as below:
% %%____________L2-F2 on PI,X2,P2 on DMC________
%%Global Variables
global P100 F200 k X2SETPOINT P2SETPOINT L2SETPOINT TimeToChange F2 F3 F1 X1 T1 T200;
%----TIME TO IMPLEMENT CHANGE
Decoupling = 0; %1 = On, 0 = Off
TimeToChange = 30;
%%Set Points
spL2=1;spX2=25;spP2=50.5;
%%Set Point Change
dspL2=0;dspP2=0;dspX2=0;
ChangedX2Setpoint = spX2+dspX2;
ChangedP2Setpoint = spP2+dspP2;
ChangedL2Setpoint = spL2+dspL2;
%%Disturbance Tests
dF3=0;dF1=0;dX1=0;dT1=0;dT200=0;
% Initial Values
F3Initial = 50.0; % kg.min^-1
F1Initial = 10; % kg.min^-1
X1Initial = 5.0; % %
T1Initial = 40; % deg.C
T200Initial = 25; %deg.C
% Final values
F3Final = 50.0+dF3;%+5 % kg.min^-1
F1Final = 10+dF1;%+ 1; % kg.min^-1
X1Final = 5.0+dX1;% + 0.5; % %
T1Final = 40+dT1; % deg.C
T200Final = 25+dT200;%+ 2.5; %deg.C
t0 = 0;
tf=1000;
dt = 1;
span= t0:dt:tf;
vh = 100; uh = 35;
k=0;
%Steady State Values (MV)
P100 = 194.7;
F200 = 208;
%Tuning Paramaters
wwP2 = 1; qqP2 =50; wwX2 = 1; qqX2 = 10;
%Define Diagonal Matrices
WWP2P100 = wwP2*eye(vh); QQP2P100 = qqP2*eye(uh); WWX2F200 = wwX2*eye(vh); QQX2F200 = qqX2*eye(uh);
WWP2F200 = wwP2*eye(vh); QQP2F200 = qqP2*eye(uh); WWX2P100 = wwX2*eye(vh); QQX2P100 = qqX2*eye(uh);
%Generate Gain Matrices
%K11 and K22
KdmcP2P100=inv(AP2P100'*WWP2P100*AP2P100 + QQP2P100)*AP2P100'*WWP2P100;
KdmcX2F200=inv(AX2F200'*WWX2F200*AX2F200 + QQX2F200)*AX2F200'*WWX2F200;
%K12 and K21
KdmcP2F200=inv(AP2F200'*WWP2F200*AP2F200 + QQP2F200)*AP2F200'*WWP2F200;
KdmcX2P100=inv(AX2P100'*WWX2P100*AX2P100 + QQX2P100)*AX2P100'*WWX2P100;
%------------------------------------------------------------------------------------
%------------------------------------------------------------------------------------
%------------------------------------------------------------------------------------
SetpointP2 = spP2;
SetpointMatrixP2=SetpointP2*(ones(vh,1));
dmvP2=zeros(step,1);
dMVP2=KdmcP2P100*SetpointMatrixP2;
%Projection Vector
P11=zeros(vh,1);
P12=zeros(vh,1);
mvP2=zeros(step,1);
%Moves a zero to the first element of dmvp2 and mvp2
dmvP2(1,1)=dMVP2(1,1);
mvP2(1,1) = dmvP2(1,1);
SetpointX2 = spX2;
SetpointMatrixX2=SetpointX2*(ones(vh,1)); % E is SP matrix
dmvX2=zeros(step,1); % delta MV
dMVX2=KdmcX2F200*SetpointMatrixX2; % does this just give us correct size matrix???
%---
X2SETPOINT = SetpointX2;
P2SETPOINT = SetpointP2;
L2SETPOINT = spL2;
%Projection Vector
P22=zeros(vh,1);
P21=zeros(vh,1);
mvX2=zeros(step,1);
dmvX2(1,1)=dMVX2(1,1);
mvX2(1,1) = dmvX2(1,1);
%------------------------------------------------------------------------------------
%------------------------------------------------------------------------------------
%------------------------------------------------------------------------------------
p1001=[];
p1001(1,1)=P100; % Sets P100ss as the first value of P100 matrix
timep2=[];
timex2=[];
F2001=[];
F2001(1,1)=F200; % Sets F200ss as the first value of F200 matrix
%F2_1=[];
%F2_1(1,1)=2; % Sets F2ss as the first value of F2 matrix
CV = zeros(vh,36);
cv=zeros(vh,36);
cv(1,:)=[1 25.0 50.5 10 2 50 8 8 5 40 194.7 208 25 84.6 80.6 119.9 339 9.3 307.9 46.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
%Initial Disturbances
F3 = F3Initial; % kg.min^-1
F1 = F1Initial; % kg.min^-1
X1 = X1Initial; % %
T1 = T1Initial; % deg.C
T200 = T200Initial; %deg.C
%Initial Arrays
F1Array = zeros(step);
F3Array = zeros(step);
F2Array = zeros(step);
X1Array = zeros(step);
T1Array = zeros(step);
L2SETPOINTArray = [];
X2SETPOINTArray = [];
P2SETPOINTArray = [];
T200Array = zeros(step);
F1Array(1) = F1;
F3Array(1) = F3;
% F2Array(1) = F2;
X1Array(1) = X1;
T1Array(1) = T1;
L2SETPOINTArray(1) = L2SETPOINT;
X2SETPOINTArray(1) = X2SETPOINT;
P2SETPOINTArray(1) = P2SETPOINT;
T200Array(1) = T200;
abl=zeros(1,step);
tsp=zeros(1,step);
tsx=zeros(1,step);
tsl1=zeros(1,step);
tabp=zeros(1,step);
tabx=zeros(1,step);
tabl=zeros(1,step);
sp=zeros(1,step);
sx=zeros(1,step);
sl=zeros(1,step);
abp=zeros(1,step);
abx=zeros(1,step);
tsl=zeros(1,step);
kArray = 1:1:step;
for k=2:1:step
if k <= step
if k == TimeToChange
SetpointP2 = ChangedP2Setpoint;
SetpointMatrixP2=SetpointP2*(ones(vh,1));
SetpointX2 = ChangedX2Setpoint;
SetpointMatrixX2=SetpointX2*(ones(vh,1));
L2SETPOINT = ChangedL2Setpoint;
X2SETPOINT = SetpointX2;
P2SETPOINT = SetpointP2;
%Changed Disturbances
F3 = F3Final; % kg.min^-1
F1 = F1Final; % kg.min^-1
X1 = X1Final; % %
T1 = T1Final; % deg.C
T200 = T200Final; %deg.C
end
F1Array(k) = F1;
F3Array(k) = F3;
%F2Array(k) = F2;
X1Array(k) = X1;
T1Array(k) = T1;
L2SETPOINTArray(k) = L2SETPOINT;
X2SETPOINTArray(k) = X2SETPOINT;
P2SETPOINTArray(k) = P2SETPOINT;
T200Array(k) = T200;
s11=hP2P100*dmvP2;
P11(1,1)=s11(1,1);
s12=hP2F200*dmvP2;
P12(1,1)=s12(1,1);
%------------------------------------------------
s22=hX2F200*dmvX2;
P22(1,1)=s22(1,1);
s21=hX2P100*dmvX2;
P21(1,1)=s21(1,1);
%------------------------------------------------
for j = 2: 1 :vh
P11(j,1) = P11((j-1),1) + s11(j,1);
P12(j,1) = P12((j-1),1) + s12(j,1);
P22(j,1) = P22((j-1),1) + s22(j,1);
P21(j,1) = P21((j-1),1) + s21(j,1);
end
%DMC Controller Implementation for P2 and X2
P1=(P11+P12);
P2=(P22+P21);
ER_1=SetpointMatrixP2 - P1 - cv(k-1,3)*ones(vh,1);
ER_2=SetpointMatrixX2 - P2 - cv(k-1,2)*ones(vh,1);
if Decoupling == 1
dMVP2=KdmcP2P100*ER_1-KdmcP2F200*ER_2;
dMVx2=KdmcX2F200*ER_2-KdmcX2P100*ER_1;
else
dMVP2=KdmcP2P100*ER_1;
dMVx2=KdmcX2F200*ER_2;
end
%------------------------------------------------
for i= step:-1:2
dmvP2(i,1) = dmvP2(i-1,1);
dmvX2(i,1) = dmvX2(i-1,1);
end
dmvP2(1,1)=dMVP2(1,1);
mvP2(k) = sum(dmvP2);
dmvX2(1,1)=dMVx2(1,1);
mvX2(k) = sum(dmvX2);
%------------------------------------------------
P100 = dMVP2(1,1) + p1001(k-1);
F200 = dMVx2(1,1) + F2001(k-1);
% Manipulated Variable Constraints
if P100 > 400
P100 = 400;
elseif P100 < 0
P100 = 0;
end
if F200 > 416
F200 = 416;
elseif F200 < 0
F200 = 0;
end
%Controller Actions
p1001(k,1)=P100; % P100
%F2_1(k,1)=2-1.5*(1-cv(k-1,1)); % F2
F2001(k,1)=F200;
span= 1:1:vh;
DMCsim0=[cv(k-1,1),cv(k-1,2),cv(k-1,3),10,2,50,8,8,5,40,cv(k-1,11),cv(k-1,12),25,84.6,80.6,119.9,339,9.3,307.9,46.1,cv(k-1,21),0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]';
[t,CV]=ode45('Evap_DMC',span,DMCsim0);
timep2(k,1)=t(2);
cv(k,1)=CV(2,1);
cv(k,2)=CV(2,2);
cv(k,3)=CV(2,3);
cv(k,4)=CV(2,4);
cv(k,11)=P100;
cv(k,12)=F200;
cv(k,21)=CV(2,21);
%cv(k,4)=F2_1(k,1);
iel=cv(:,21);
L2=cv(:,1);
X2F=cv(:,2);
P2F=cv(:,3);
end
end
kl=-28.647;
taul=1.67;
LE=L2SETPOINT-L2;
XE=X2SETPOINT-X2F;
PE=P2SETPOINT-P2F;
TT=1:1:step;
for b=1:1:step
mv1(b) = 2 + kl*(LE(b)+iel(b)/taul);%CONTROLLER FOR L2
if b<30
F2(b)=2;
elseif mv1(b)<0
F2(b)=0;
else
F2(b)=mv1(b);
end
abl(b)=abs(LE(b));
abx(b)=abs(XE(b));
abp(b)=abs(PE(b));
sl(b)=LE(b).^2;
sx(b)=XE(b).^2;
sp(b)=PE(b).^2;
tabl(b)=TT(b)*abl(b);
tabx(b)=TT(b)*abx(b);
tabp(b)=TT(b)*abp(b);
tsl(b)=sl(b).*TT(b);
tsx(b)=sx(b).*TT(b);
tsp(b)=sp(b).*TT(b);
end
iael=sum(abl);
iaex=sum(abx);
iaep=sum(abp);
isel=sum(sl);
isex=sum(sx);
isep=sum(sp);
tiael=sum(tabl);
tiaex=sum(tabx);
tiaep=sum(tabp);
tisel=sum(tsl);
tisex=sum(tsx);
tisep=sum(tsp);
iaeall=[iael iaex iaep];
iseall=[isel isex isep];
tiaelall=[tiael tiaex tiaep];
tiseall=[tisel tisex tisep];
L2Array = cv(:,1);
X2Array = cv(:,2);
P2Array = cv(:,3);
P100Array = cv(:,11);
F200Array = cv(:,12);
st1=299;
kArray1 = 1:1:st1;
%PLOTS
figure(1);
f11=subplot(3,2,1);
plot(kArray,X2Array,'LineWidth',2,'b');
xlabel('Time');ylabel('X2');
end
When I execute the code, it gives error on line 314 where I change the linewidth. How can I resolve this issue?
Thanks
  1 Comment
Ameer Hamza
Ameer Hamza on 19 May 2018
See this guide to format your code correctly. Also if your code is large, it is better to attach a m file or just put the line giving the error. Also, tell us the complete error message.

Sign in to comment.

Answers (0)

Categories

Find more on Word games in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!