How to change the reference ?

조회 수: 4(최근 30일)
Alan Robertson
Alan Robertson 2020년 3월 5일
댓글: Alan Robertson 2020년 3월 6일
we have this system by its state representation :
the formulation of the quardatic command is described by the following equations:
exemple :
we would like to apply the quardatic command so that the output y(k) = x1(k) follows a certain reference.
For reference = 5 , this is the code :
clear, clc
Ac=[0 1;0 0]; Bc=[0;1]; Cc=[1 0]; Dc=0;
[A,B,C,D]=c2dm(Ac,Bc,Cc,Dc,0.1) %Converting to discrete mode
N=600;
ref=5; %The reference
Q=[1 2;2 1] ; R=0.1;
P=Q;
x_ref=[ref;0];
for k=N:-1:0
F=R+B'*P*B; %Equation 1
K=inv(F)*B'*P*A; %Equation 2
M=P-P*B*inv(F)*B'*P; %Equation 3
P=A'*M*A+Q; %Equation 4
end
u=0 ; x=[0;0];
for i=1:N
x=A*x+B*u;
u=-K*(x-x_ref); %Equation 5
y(i)=C*x;
end
plot(1:N,ref*ones(1,N),'r',1:N,y)
I get the following figure:
And now i would like to use the same code by modifying the reference signal, so as to obtain nearly these 2 curves:
y= red curve , reference= black curve
The goal is that the signal y (i) follows a non-fixed reference:
ref = 8 in [0.200]
ref = 5 in [200,400]
ref = 12 in [400,600]
This is the reference to follow :
if anyone can help me, i will be very grateful
  댓글 수: 2
Alan Robertson
Alan Robertson 2020년 3월 5일
I hope it's better now.
I apologize because I do not master it as it should be, and that is why I ask your help. thank you for your understanding

댓글을 달려면 로그인하십시오.

채택된 답변

Raj
Raj 2020년 3월 6일
편집: Raj 2020년 3월 6일
I don't think this is right:
ref = 8 in [0.200]
ref = 5 in [200,400]
ref = 12 in [400,600]
You cannot have 2 references at same time instant. So I am assuming you meant
ref = 8 in [0.200]
ref = 5 in [201,400]
ref = 12 in [401,600]
Now coming to the solution, the easiest way is to simply shift the reference inside 'for' loop like this:
clear, clc
Ac=[0 1;0 0]; Bc=[0;1]; Cc=[1 0]; Dc=0;
[A,B,C,D]=c2dm(Ac,Bc,Cc,Dc,0.1) %Converting to discrete mode
N=600;
Q=[1 2;2 1] ; R=0.1;
P=Q;
for k=N:-1:0
F=R+B'*P*B; %Equation 1
K=inv(F)*B'*P*A; %Equation 2
M=P-P*B*inv(F)*B'*P; %Equation 3
P=A'*M*A+Q; %Equation 4
end
u=0 ; x=[0;0];
for i=1:N
if i<=200
ref=8; %The reference
elseif i>200 && i<=400
ref=5;
else
ref=12;
end
x_ref=[ref;0];
x=A*x+B*u;
u=-K*(x-x_ref);
y(i)=C*x;
end
plot([0 200 201 400 401 600],[8 8 5 5 13 13],'r',1:N,y)
  댓글 수: 1
Alan Robertson
Alan Robertson 2020년 3월 6일
Thanks a lot for your answer ! Indeed I made a mistake, I wanted to say: ref = 8 in [0.200] ref = 5 in [201,400] ref = 12 in [401,600] thanks again

댓글을 달려면 로그인하십시오.

추가 답변(0개)

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by