85759 (612564), страница 2
Текст из файла (страница 2)
G1=inv(G);
%построение градиента
gr1=(Xr5(K(1)+h,K(2),K(3),K(4),K(5), T)-a)/h;
gr2=(Xr5(K(1),K(2)+h,K(3),K(4),K(5), T)-a)/h;
gr3=(Xr5(K(1),K(2),K(3)+h,K(4),K(5), T)-a)/h;
gr4=(Xr5(K(1),K(2),K(3),K(4)+h,K(5), T)-a)/h;
gr5=(Xr5(K(1),K(2),K(3),K(4),K(5)+h, T)-a)/h;
grad=[gr1 gr2 gr3 gr4 gr5]';
if(Xr5(K(1),K(2),K(3),K(4),K(5),T)>Xr5(K0(1),K0(2),K0(3),K0(4),K0(5),T))
L=lambdamin(K0,G10,grad0);
end
K0=K;
G10=G1;
grad0=grad;
K=K0+L*G1*grad;
J=Xr5(K(1),K(2),K(3),K(4),K(5),T);
end
disp(K0);
disp(J0);
Метод Золотого Сечения
function L=lambdamin(K,G1,grad)
Xzs=(-1+sqrt(5))/2; %золотое сечение
a=0;
b=1;
while (abs(b-a) >0.01)
x1=a+(b-a)*Xzs;
x2=b-(b-a)*Xzs;
F1=K-x1*G1*grad;
F2=K-x2*G1*grad;
if ((x1 < x2)&&(Xr5(F1(1),F1(2),F1(3),F1(4),F1(5),2) <= Xr5(F2(1),F2(2),F2(3),F2(4),F2(5),2)))
b=x2;
end
if ((x1 > x2)&&(Xr5(F1(1),F1(2),F1(3),F1(4),F1(5),2) <= Xr5(F2(1),F2(2),F2(3),F2(4),F2(5),2)))
a=x2;
end
if ((x1 Xr5(F2(1),F2(2),F2(3),F2(4),F2(5),2)))
a=x1;
end
if ((x1 > x2)&&(Xr5(F1(1),F1(2),F1(3),F1(4),F1(5),2) > Xr5(F2(1),F2(2),F2(3),F2(4),F2(5),2)))
b=x1;
end
end
L=abs((x2-x1)/2);
Построение эталонного и реального выходного сигнала, поиск значения функционала.
function J=Xr5(Kp,Kd,Ki,Kp2,Kd2,t)
%коэффициенты ДУ
a4=1;
a3=(7.4+5*Kd*Kp2+5*Kp*Kd2+10*Kd*Kd2)/(1+5*Kd*Kd2);
a2=(14+5*Kp*Kp2+10*Kp2*Kd+10*Kd2*Kp+5*Ki*Kd2)/(1+5*Kd*Kd2);
a1=(10*Kp*Kp2+10*Ki*Kd2+5*Kp2*Ki)/(1+5*Kd*Kd2);
a0=(10*Ki*Kp2)/(1+5*Kd*Kd2);
b3=5*Kd/(1+5*Kd*Kd2);
b2=(5*Kp+10*Kd)/(1+5*Kd*Kd2);
b1=(10*Kp+5*Ki)/(1+5*Kd*Kd2);
b0=10*Ki/(1+5*Kd*Kd2);
%шаг
h=0.01;
%начальные условия
X(1,1:4)=[0 0 0 0];
%матрица А (X'=AX+BY)
A=[0 1 0 0;
0 0 1 0;
0 0 0 1;
-a0 -a1 -a2 -a3];
%матрица B
B=[b3 b2 b1 b0]';
Y=[0 0 0 1]';
n=1;
k=1;
while(k<=10)
F(n,1:4)=(A*(X(n,1:4))'+B.*Y)';
X(n+1,1:4)=(X(n,1:4)'+h/10*(F(n,1:4))')';% Метод Эйлера
n=n+1;
k=k+1;
end
X(2,1:4)=X(n,1:4);
n=2;
I=[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1];
while (n<=t/h)
F(n,1:4)=(A*(X(n,1:4))'+B.*Y)';
X(n+1,1:4)=(((I-5*h/12*A)^-1)*(X(n,1:4)'+h/12*(5*B.*Y+8*(F(n,1:4))'-(F(n-1,1:4))')))';
n=n+1;
end
i=1;
while(i<=n)
Xr(i)=X(i,1);
i=i+1;
end
%Найдем J0____________
i=0;
while(i<=t/h)
Xe(i+1)=1-exp((log(0.05)/2)*i*h);
i=i+1;
end
%нашли эталон
J=0;
i=1;
while(i<=t/h)
J=J+(Xr(i)-Xe(i))^2;
i=i+1;
end
%t=0:0.01:t;
%plot(t,Xr,t,Xe),grid on















