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];

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

 Réponse acceptée

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

3 commentaires

The error still persist with this code you gave me. thanks
Did you make the adjustment he suggested? I copied your code in, changed it to be like Alex has posted and it ran fine for me.
thanks. it is working perfectly.hoping for more help from you guys

Connectez-vous pour commenter.

Plus de réponses (2)

Bob Thompson
Bob Thompson le 10 Juin 2019
Modifié(e) : Bob Thompson le 10 Juin 2019
You are recieving the error because you are trying to use K as an index value, but K is not always a positive integer.
for K =3:0.2:5
solution(K,:) = [K a m ts];
Values of K include 3, 3.2, 3.4, 3.6, ...
Matlab cannot define an element as being in position 3.2, or any other value which isn't a positive integer.
As a side note, you should really not change the value of yoru loop index within the loop itself. It is generally considered bad practice, and is very prone to errors.

Catégories

En savoir plus sur Programming dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by