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 回表示 (過去 30 日間)
古いコメントを表示
polycarp onyebuchi
2019 年 6 月 10 日
コメント済み: polycarp onyebuchi
2019 年 6 月 10 日
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 件のコメント
採用された回答
Alex Mcaulley
2019 年 6 月 10 日
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 件のコメント
Bob Thompson
2019 年 6 月 10 日
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.
その他の回答 (2 件)
Bob Thompson
2019 年 6 月 10 日
編集済み: Bob Thompson
2019 年 6 月 10 日
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.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!