clear all; close all;
a=[1 -1.6065 0.6065]; b=[0.1065 0.0902]; d=3; Am=[1 -1.3205 0.4966];
na=length(a)-1; nb=length(b)-1; nam=length(Am)-1;
??? Undefined command/function 'diophantine'.
nf1=nb+d+2-(na+1)+1; ng=2;
[F,G]=diophantine(conv(a,[1 -1]),b,d,1,Am);
F1=conv(F,[1 -1]); R=sum(G);
L=400;
uk=zeros(d+nb,1);
yk=zeros(na,1);
yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4,1)];
e=2*ones(L,1);
for k=1:L
time(k)=k;
y(k)=-a(2:na+1)*yk+b*uk(d:d+nb)+e(k);
u(k)=(-F1(2:nf1+1)*uk(1:nf1)+R*yr(k)-G*[y(k);yk(1:ng)])/F1(1);¿
for i=d+nb:-1:2
uk(i)=uk(i-1);
end
uk(1)=u(k);
for i=na:-1:2
yk(i)=yk(i-1);
end
yk(1)=y(k);
end
subplot(2,1,1);
plot(time,yr(1:L),'r:',time,y);
xlabel('t'); ylabel('y_r(t)、y(t)');
legend('y_r(t)','y(t)');
subplot(2,1,2);
plot(time,u);
xlabel('t'); ylabel('u(t)');
function [F1,G]=diophantine(A,B,d,A0,Am)
dB=[zeros(1,d) B];
na=length(A)-1; nd=length(dB)-1;
T1=conv(A0,Am); nt=length(T1); T=[T1';zeros(na+nd-nt,1)];
AB=zeros(na+nd);
for i=1:na+1
for j=1:nd
AB(i+j-1,j)=A(i);
end
end
for i=1:nd+1
for j=1:na
AB(i+j-1,j+nd)=dB(i);
end
end
L=(AB)\T;
F1=[ L(1:nd)]';
G=[ L(nd+1:na+nd)]';
??? Undefined command/function 'diophantine'在最后