با سلام
دوستان اگه کسی بلده لطفا کمک کنه چون واقعا کارم گیره!
یه سیستم داریم که به این شکل هست که یه PID داره یه تابع 2/(1+0.8s) یعنی همون 2 تقسیم بر 1 بعلاوه 0.8*s
و بعد از این بلوکها یه تاخیر به شکل exp(-s)
و بعد یه فیدبک واحد منفی میخوره سیستممون .
میخوایم ضرایب pid رو با مینیمم کردن تابع هدفی که به شکل انتگرال اندازه خطا به توان 2 هست رو پیدا کنیم.
کد زیر رو هم نوشتم اما درست جواب نمیده.
لطفا هر کی بلده کمک کنه ممنون.
function J=saeed(PID)
Kp=PID(1);
Ki=PID(2);
Kd=PID(3);
K=2;T=0.8;L=1;
numG1=[Kd Kp Ki]; %PID function
denG1=[0 1 0]; %PID function
numG2=[0 K];
denG2=[T 1];
numG3=[1 -6 12]; %Pade (Time delay function)
denG3=[1 6 12]; %Pade (Time delay function)
[numG4,denG4]=series(numG1,denG1,numG2,denG2);
[numG5,denG5]=series(numG4,denG4,numG3,denG3);
[numT,denT]=cloop(numG5,denG5,-1);
p=roots(denT);
m=find(p>=0);
n=length(m);
landa=1000;
J2=n.*landa; % J2
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
% [numEprim,denEprim]=series(denG5,numG5,numT,denT);
%
% numU=[0 1];
% denU=[1 0];
%
% [numE,denE]=series(numU,denU,numEprim,denEprim);
% w=-1000:0.001:1000;
syms w
i=sqrt(-1);
P=poly2sym(numG4,i*w)/poly2sym(denG4,i*w);
F=P*(cos(w)-i*sin(w));%exp(-i*w);
U=1/(i*w);
Error=U*(1/(1+F));
% Error=poly2sym(numE,i*w)/poly2sym(denE,i*w);
w=-100:0.1:100;
EE=(abs(Error)).^2;
PS=trapz(EE);
J1=(1./(2.*pi)).*PS;
% for i=1:1:101
% Error(i)=(1-y(i));
% end
% [y,x,t]=step(numT,denT,100);
%
% t=0:0.1:100;
% for i=1:1:101
% E(i)=(1-y(i));
% end
% J1=sum(abs(E).^2);
J=J1+J2;
end