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];
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
polycarp onyebuchi
am 10 Jun. 2019
Kommentiert: polycarp onyebuchi
am 10 Jun. 2019
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
0 Kommentare
Akzeptierte Antwort
Alex Mcaulley
am 10 Jun. 2019
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 Kommentare
Bob Thompson
am 10 Jun. 2019
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.
Weitere Antworten (2)
Bob Thompson
am 10 Jun. 2019
Bearbeitet: Bob Thompson
am 10 Jun. 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.
Siehe auch
Kategorien
Mehr zu Startup and Shutdown finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!