27 lines
906 B
Matlab
27 lines
906 B
Matlab
function [fy,C]=fpidfuns(x)
|
|
% fpidfuns - general objective function for optimum fractional-order PID
|
|
|
|
% Copyright (c) Dingyu Xue, Northeastern University, China
|
|
% Last modified 28 March, 2017
|
|
% Last modified 18 May, 2022
|
|
global G t key1 key2 C
|
|
s=fotf('s'); t=t(:);
|
|
switch key1
|
|
case {'fpid',1}, C=x(1)+x(2)*s^(-x(4))+x(3)*s^(x(5));
|
|
case {'fpi',2}, C=x(1)+x(2)*s^(-x(3));
|
|
case {'fpd',3}, C=x(1)+x(2)*s^x(3);
|
|
case {'fpidx',4}, C=x(1)+x(2)/s+x(3)*s^x(4);
|
|
case {'pid','PID',5}, C=x(1)+x(2)/s+x(3)*s;
|
|
end
|
|
dt=t(2)-t(1); e=step(feedback(1,G*C),t); e=e(:).';
|
|
switch key2
|
|
case {'itae','ITAE',1}, fy=dt*abs(e)*t;
|
|
case {'ise','ISE',2}, fy=dt*sum(e.^2);
|
|
case {'iae','IAE',3}, fy=dt*sum(abs(e));
|
|
case {'itse','ITSE',4}, fy=dt*e.^2*t;
|
|
otherwise
|
|
error('Available criteria are itae, ise, iae, itse.')
|
|
end
|
|
disp([x(:).' fy])
|
|
end
|