% 3) echo on, clc, % wersja 12.04.2013 % najpierw uruchom m-plik SScz01.m % SScz01 %------------------------------------- % model w przestrzeni stanu %------------------------------------- % dane - macierze - forma kanonicna sterowalna - zmiennych fazowych A = [0,1,0; 0,0,1; -12,-18.4,-8.2] % macierz stanu B = [0; 0; 1] % macierz wejścia C = [8 0 2] % macierz wyjścia D = [0] % macierz przejścia pause %------------------------------------- sys = ss(A,B,C,D) % model przestrzeni stanu pause %------------------------------------- % funkcja eig() - wartości własne eigA = eig(A) pause %------------------------------------- % funkcja ss2zp() [zss,bss,wss] = ss2zp(A,B,C,D) pause %------------------------------------- % funkcja tfdata() [lG,mG] = tfdata(sysG,'v') pause %------------------------------------- [zG,bG,wG] = tf2zp(lG,mG) pause %------------------------------------- % 5) % odpowiedzi na step() pause %t = [0:0.01:12]; [y,t,x] = step(sys); [yc,tc,xc] = step(sysc); yG = step(sysG,t); %------------------------------------- disp('!!! Przebiegi czasowej odpowiedzi y(t) i zmiennych stanu x(t) !!!') disp('!!! Naciśnij ENTER !!!') pause %------------------------------------- figure subplot(2,2,1), plot(t,y), grid, title('y(t)-ABCD') %, axis([0,max(t),0,0.4]) subplot(2,2,3), plot(t,x), grid, title('x(t)-ABCD') %, axis([0,max(t),0,1.1]) subplot(2,2,2), plot(tc,yc), grid, title('y(t)-AcBcCcDc')%, axis([0,max(t),0,0.4]) subplot(2,2,4), plot(tc,xc), grid, title('x(t)-AcBcCcDc')%, axis([0,max(t),0,1.1]) figure plot(t,y,tc,yc,'x',t,yG,'.'), grid %, axis([0,max(t),0,0.4]) legend('step()-y-ABCD','step()-yc-AcBcCcDc','step()-yG-G(s)') pause, close all %------------------------------------- % niezerowe warunki początkowe -> x0 = [0.5; 0; 1] pause tu=[0:0.1:max(t)]'; x0 = [0.5; 0; 1]; u = ones(length(tu),1); %u = 2*ones(20,1); u(21:201,1) = 0.5*ones(181,1); [yu,xu] = lsim(A,B,C,D,u',tu,x0); %plot(t,u,t,xu) figure subplot(2,2,1), plot(t,y), grid, title('y(t) x0=[0;0;0]') %, axis([0,max(t),0,0.4]) subplot(2,2,3), plot(t,x), grid, title('x(t) x0=[0;0;0]') %, axis([0,max(t),0,1.1]) subplot(2,2,2), plot(tu,yu), grid, title('yu(t) x0=[0.5;0;1]')%, axis([0,max(t),0,0.4]) subplot(2,2,4), plot(tu,xu), grid, title('xu(t) x0=[0.5;0;1]')%, axis([0,max(t),0,1.1]) figure plot(t,y,'b',tu,yu,'r'), grid %, axis([0,max(t),0,0.4]) legend('step() - y','step() - yu') pause, close all %------------------------------------- % 6) % postać kanoniczna: "modal" i "companion" % "modal" - macierz Am zawiera tylko elementy rzeczywiste % "companion" - forma kanoniczna obserwowalna % funcja canon() [Am,Bm,Cm,Dm] = canon(A,B,C,D,'modal') %[Amx,Bmx,Cmx,Dmx] = canon(Ac,Bc,Cc,Dc,'modal') pause %------------------------------------- [Amc,Bmc,Cmc,Dmc] = canon(A,B,C,D,'companion') %[Amcx,Bmcx,Cmcx,Dmcx] = canon(Ac,Bc,Cc,Dc,'companion') % Ac' - odpowiada Amc - tu tak jest, ale dla Acx=inv(P1)*Amc*P1 % Acx'=Amc, ale A'=Amc pause %------------------------------------- % macierz transformacyjna T = inv(P) % nowe współrzędne stanu z = inv(P)*x = T*x [Am,Bm,Cm,Dm,Tm] = canon(A,B,C,D,'modal') %[Amx,Bmx,Cmx,Dmx,Tmx] = canon(Ac,Bc,Cc,Dc,'modal') %[sysm,Tm] = canon(sys,'modal') [Amc,Bmc,Cmc,Dmc,Tmc] = canon(A,B,C,D,'companion') %[Amcx,Bmcx,Cmcx,Dmcx,Tmcx] = canon(Ac,Bc,Cc,Dc,'companion') pause %------------------------------------- % porównanie wartości własnych [eig(Ac), eig(A), eig(Am), eig(Amc)] pause %------------------------------------- % 7) % transformacja do nowego układu współrzędnych stanu P = inv(Tm); Az = inv(P)*A*P; Bz = inv(P)*B; Cz = C*P; Dz = D; pause %------------------------------------- Pmc = inv(Tmc); Azmc = inv(Pmc)*A*Pmc; Bzmc = inv(Pmc)*B; Czmc = C*Pmc; Dzmc = D; pause %------------------------------------- % porównanie wartości własnych [eig(A), eig(Am), eig(Amc), eig(Az), eig(Azmc)] pause %------------------------------------- % transformacja tożsamościowa (modalna) - diagonalizacja A % Ad = macierz.wekt.wł.A^(-1)*A*mac.wek.wł.A -> macierz A będzie diagonalna % Bd = inv(macierz.wekt.wł.A)*B % Cd = C*macierz.wekt.wł.A % Dd = D pause %------------------------------------- % M macierz wektorów własnych % Ad macierz wartosci własnych (diagonalna) [M Ad] = eig(A) pause %------------------------------------- Bd = inv(M)*B % transformowana macierz wejścia Cd = C*M % transformowana macierz wyjścia Dd = D % transformowana macierz przejścia pause %------------------------------------- % eigAd = eig(Ad) [eig(Az), eig(Azmc), eig(Ad), eig(inv(M)*A*M)] pause %------------------------------------- % funkcja ss2tf() [numGm,denGm] = ss2tf(Am,Bm,Cm,Dm); [numGmc,denGmc] = ss2tf(Amc,Bmc,Cmc,Dmc); [numGd,denGd] = ss2tf(Ad,Bd,Cd,Dd); %------------------------------------- printsys(numGm,denGm) printsys(numGmc,denGmc) printsys(numGd,denGd) pause %------------------------------------- % funkcja roundaf() - zaokrąglenie numGm = roundaf(numGm); denGm = roundaf(denGm); numGmc = roundaf(numGmc); denGmc = roundaf(denGmc); numGd = roundaf(numGd); denGd = roundaf(denGd); printsys(numGm,denGm) printsys(numGmc,denGmc) printsys(numGd,denGd) pause %------------------------------------- % odwrócenie zmiennych - przejście między Ac i A, % Amc->AmcP1 - zamiana kolumn % AmcP1=inv(P1)*Amc*P1 P1=[0 0 1; 0 1 0; 1 0 0] AcP1=inv(P1)*Ac*P1 BcP1=inv(P1)*Bc CcP1=Cc*P1 DcP1=Dc eigAcP1=eig(AcP1) pause %------------------------------------- % 8) % sterowalność Ster = ctrb(A,B) rzad_Mc = rank(Ster) pause %------------------------------------- % obserwowalność Obser = obsv(A,C) rzad_Mo = rank(Obser) pause %-------------------------------------