MATLAB: Index in position 1 is invalid. Array indices must be positive integers or logical values. Error in pid_optimized1 (line 17) solution(K,:) = [K a m ts];

someone help please

Hi all
I am trying to run this code but I am getting an error 'Index in position 1 is invalid. Array indices must be positive integers or logical values.
Error in pid_optimized1 (line 17)
solution(K,:) = [K a m ts];'
Can someone help me to run this code.
The code is given by
clear all
clc
%Required to optimize a plant with a transfer function 4/s^3+6s^2+8s+4 with
%a PID controller whose transfer function is given by K(s+a)^2/s.
t = 0:0.01:8;
K = 0;
for K =3:0.2:5
for a =0.1:0.1:3
num =[4*K 8*K*a 4*K*a^2];
den = [1 6 8+4*K 4+8*K*a 4*K*a^2];
y = step(num,den,t);
s = 801;while y(s)>0.98&&y(s)<1.02;s = s-1;end
ts = (s-1)*0.01;%ts = settling time;
m = max(y);
if m<1.15 && m>1.10; if ts<3.00
K = K+1;
solution(K,:) = [K a m ts]; %this sorts the solution of K a m ts in a column array
end
end
end
end

Best Answer

  • You are using K as a logical indexer, but K take non positive integers values, throwing, then, an error. I gues that the solution is:
    t = 0:0.01:8;
    k = 0;
    for K =3:0.2:5
    for a = 0.1:0.1:3
    num = [4*K 8*K*a 4*K*a^2];
    den = [1 6 8+4*K 4+8*K*a 4*K*a^2];
    y = step(num,den,t);
    s = 801;while y(s)>0.98&&y(s)<1.02;s = s-1;end
    ts = (s-1)*0.01;%ts = settling time;
    m = max(y);
    if m < 1.15 && m > 1.10
    if ts<3.00
    k = k + 1;
    solution(k,:) = [K a m ts]; %this sorts the solution of K a m ts in a column array
    end
    end
    end
    end