MATLAB Tutorial U(s) input G(s) Y(s) output ENSC 383- Feedback Control Summer 2010 TAs:Kaveh Kianfar, Esmaeil Tafazzoli 1 Outline Outline • • • • Starting Matlab Basics Modeling Control toolbox 2 m file M-file • When writing a program in matlab save it as m-file ( filename.m) • 2 types of M-file 1- script (has no input and output, simply execute commands) 2- function (need input, starts with keyword “function”) function [y z]=mfunc(x) y=(x*x')^.5; % norm of x z=sum(x)/length(x); %%% using 'sum' function end 3 Polynomials • Present polynomial with coefficients vector s 4 3s 3 2 s 1 x = [1 3 0 -2 1]; Poly converts roots to coefficients of a polynomial: ( s 2)( s 5)( s 6) 2,5,6 ( s 2)( s 5) P3=poly([-2 -5 -6]) rootsP3=roots(P3) P5=conv([1 2],[1 5]) 4 Polynomials • • • • • • p=poly([-2 1 5]) R=roots(p) x=-3:0.1:6; y=p(1)*x.^3+p(2)*x.^2+p(3)*x+p(4); plot(x,y) grid 40 30 20 10 0 p= -10 1 -4 -7 10 -20 -30 R= -40 -3 -2 -1 0 1 2 3 4 5 6 5.0000 -2.0000 1.0000 5 Partial Fraction Expansion numf=[1 1 3 1]; denf=[1 0 1]; [r,p,k]=residue(numf,denf) 6 Dynamic system Representation usingTransfer Function U(s) input •Roots of numerators are “zeros” of a system, •Roots of denominators are “poles” of a system. G(s) Y(s) output S-plane pole Im Re zero 7 Transfer Function in MATLAB Command “tf” by defining the Command “zpk” Using s=tf(‘s’), then for example: 8 Transfer Function in MATLAB tf2zp: converts the numerator, denominator from coefficient to roots. [Z,P,K] = TF2ZP(NUM,DEN) Ex.: [z,p,k]=tf2zp([1 1],[1 2 1]) z=-1, p=-1;-1, k=1 zp2tf: converts the numerator, denominator from roots to coefficient. [NUM,DEN] = ZP2TF(Z,P,K) 9 Interconnection between blocks • G=series(G1,G2) or alternatively: u G1(s) y G2(s) • G=parallel (G1,G2) or alternatively: u G1(s) y G2(s) 10 Interconnection between blocks • Feedback: y u - G1(s) H(s) or alternatively for Negative feedback: 11 Symbolic computation in MATLAB • Syms s t :defines s, and t as symbolic variable syms s a t 1)G4=laplace(exp(t)): 2)G5=laplace(exp(-t)): 3)G6=laplace(sin(a*t)): G4 =1/(s - 1) G5 =1/(s + 1) G6 =a/(a^2 + s^2) Hint:ilaplace(F,s,t): computes Inverse Laplace transform of F on the complex variable s and returns it as a function of the time, t. ilaplace(a/(s^2+a^2),s,t)=(a*sin(t*(a^2)^(1/2)))/(a^2)^(1/2) 12 Symbolic computation in MATLAB • Ex.:A=[1,1;0,1];syms t; Q=expm(A*t) Hint: expm(M) computes the matrix exponential of M. G=laplace(Q,t,s) gives: G= [ 1/(s - 1), 1/(s - 1)^2] [ 0, 1/(s - 1)] 13 System Response • SystemStep, impulse, other inputs • Matlab commands: lsim Simulate LTI model response to arbitrary inputs sys=tf(num,den); t=0:dt:final_t; u=f(t); [y t]=lsim(sys,u,t) • step step(sys) response Simulate LTI model response to step input special case of lsim 14 First order systems • Transient response: x(t)=x0*exp(a*t) “if a<0,it’s stable”. s-plane Im s=-a Re 15 Exp(a*t) • When “a” is a complex number: t=0:0.1:5; a=-1+4*i; % a is complex with negative real part f=exp(a*t); X=real(f); Y=imag(f); plot(X,Y) xlabel('Re') ylabel('Im') axis('square') Plot(t,f) 16 First order systems(cont’d) •When “a” is complex, with Negative real part in polar coordinates: Rho=sqrt(X.^2+Y.^2); Theta=atan2(Y,X); polar(Theta,Rho) 17 Second System Secondorder order systems • In Laplace domain: Like mass-spring-damper s=tf('s') w=1; zeta=[0.2 0.4 0.7 1 2]; for i=1:length(zeta) G=w^2/(s^2+2*zeta(i)*w*s+w^2) step(G,10) hold on end 18 Second order systems Step Response 1.4 Damping ratio is constant, wn changes. Im 1 Amplitude s-plane 1.2 Re 0.8 Damping ratio is 0.5: Overshoots are equal. 0.6 0.4 0.2 0 0 0.5 s=tf('s') zeta=0.5 w=[sqrt(12) 4 sqrt(20)]; for i=1:length(w) G=(w(i))^2/(s^2+2*zeta*w(i)*s+(w(i))^2) step(G,3) hold on end 1 1.5 2 2.5 3 Time (sec) 19 Second order systems • Undamped system(mass-spring) Damping ratio is zero: Step Response 2.5 w =1 w =2 2 1.5 Amplitude w=[1 2]; for i=1:length(w) G=tf(w(i)^2,[1 0 w(i)^2]); step(G,20) hold on end 1 0.5 0 -0.5 0 2 4 6 8 10 Time (sec) 12 14 16 18 20 20 Dynamic system representation ma F my u ky by x1 y x x2 1 x2 y mx 2 u bx2 kx1 X AX BU Y CX DU A B x x 1 1 0 0 1 u (t ) x2 k / m b / m x2 1 / m u (t ) ky m by C x y x1 [1 0] 1 0 x2 Y ( s) 1 2 U ( s) ms bs k System Transfer Function 21 MATLAB code • • • • • • • • • • • k=.2; b=.5; m=1; A=[0 1;-k/m -b/m]; B=[0;1/m]; C=[1 0]; D=0; F=ss(A,B,C,D) step(F) [num den]=ss2tf(A,B,C,D) Gs=tf(num,den) % spring stiffness coefficient % damping coefficient % mass % Represent A. % Represent column vector B. % Represent row vector C. % Represent D. % Create an LTI object and display. % system transfer function 22 Step StepResponse Response Step Response 6 5 Amplitude 4 3 2 1 0 0 5 10 15 20 25 30 Time (sec) 23 Ordinary differential equations 3 2 1 x2 function dx=lin1(t,x) dx=zeros(2,1); 0 dx(1)=-x(1); dx(2)=-2*x(2); -1 A=[-1 0;0 -2]; -2 [u,v]=eig(A) In workspace: [T,X]=ode23(@lin1,[0 10], [a(i) b(j)]); -3-3 -2 -1 0 1 2 x1 plot(X(:,1),X(:,2)) [u.v]=eig(A) Hint:For using ode command, the diff. equations u= should be written in the first order format,i.e. a second 0 1 order diff. eq. should be written as two first order diff. 1 0 equations. 3 24 Nonlinear Differential eq. of a pendulum 1.5 function dx=pendulum(t,x) dx=zeros(2,1) dx(1)=x(2); dx(2)=-0.5*x(2)-sin(x(1)); Viscose Damping term 1 x2 0.5 Gravity term 0 -0.5 [T,X]=ode23(@pendulum,[0 10], [a(i) 0]); plot(X(:,1),X(:,2)) -1 -1.5 -2 -1.5 -1 -0.5 0 x1 0.5 1 1.5 2 1 Angle 0.5 0 Angular velocity -0.5 g -1 -1.5 -2 0 2 4 6 8 10 12 14 16 18 20 25