home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21eb.zip / octave / SCRIPTS.ZIP / scripts.fat / control / analdemo.m < prev    next >
Text File  |  1999-04-29  |  8KB  |  238 lines

  1. # Copyright (C) 1996 A. Scottedward Hodel 
  2. #
  3. # This file is part of Octave. 
  4. #
  5. # Octave is free software; you can redistribute it and/or modify it 
  6. # under the terms of the GNU General Public License as published by the 
  7. # Free Software Foundation; either version 2, or (at your option) any 
  8. # later version. 
  9. # Octave is distributed in the hope that it will be useful, but WITHOUT 
  10. # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
  11. # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
  12. # for more details.
  13. # You should have received a copy of the GNU General Public License 
  14. # along with Octave; see the file COPYING.  If not, write to the Free 
  15. # Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  16.  
  17. function analdemo()
  18. # Octave Controls toolbox demo: State Space analysis demo
  19. # Written by David Clem August 15, 1994
  20. # Updated by John Ingram December 1996
  21.   
  22.   while (1)
  23.     clc
  24.     k=0;
  25.     while(k > 8 || k < 1)
  26.       k = menu("Octave State Space Analysis Demo", ...
  27.         "System grammians (gram, dgram)", ...
  28.         "System zeros (tzero)", ...
  29.         "Continuous => Discrete and Discrete => Continuous conversions (c2d,d2c)", ...
  30.     "Algebraic Riccati Equation (are, dare)", ...
  31.       "Balanced realizations (balreal, dbalreal)", ...
  32.       "Open loop truncations via Hankel singular values (balreal, dbalreal)", ...
  33.         "SISO pole placement", ...
  34.         "Return to main demo menu");
  35.     endwhile
  36.     if (k == 1)
  37.       clc
  38.       help dgram
  39.       prompt
  40.  
  41.       clc 
  42.       disp("System Grammians: (see Moore, IEEE T-AC, 1981) \n");
  43.       disp("Example #1, consider the discrete time state space system:\n");
  44.       a=[1 5 -8.4;1.2 -3 5;1 7 9]
  45.       b=[1 5;2 6;-4.4 5]
  46.       c=[1 -1.5 2;6 -9.8 1]
  47.       d=0
  48.       prompt
  49.       disp("\nThe discrete controllability grammian is computed as follows:");
  50.       cmd = "grammian = dgram(a, b);";
  51.       run_cmd;
  52.       disp("Results:\n");
  53.       grammian = dgram(a,b)
  54.       disp("Variable Description:\n");
  55.       disp("grammian => discrete controllability grammian");
  56.       disp("a, b => a and b matrices of discrete time system\n");
  57.       disp("A dual approach may be used to compute the observability grammian.");
  58.       prompt
  59.       clc
  60.  
  61.       help gram
  62.       prompt
  63.       clc
  64.  
  65.       disp("Example #2, consider the continuous state space system:\n");
  66.       a=[1 3 -10.2;3.7 -2 9;1 3 7]
  67.       b=[1 12;6 2;-3.8 7]
  68.       c=[1 -1.1 7;3 -9.8 2]
  69.       d=0
  70.       prompt
  71.       disp("\nThe continuous controllability grammian is computed as follows:");
  72.       cmd = "grammian = gram(a, b);";
  73.       run_cmd;
  74.       disp("Results:\n");
  75.       grammian = gram(a,b)
  76.       disp("Variable Description:\n");
  77.       disp("grammian => continuous controllability grammian");
  78.       disp("a, b => a and b matrices of continuous time system\n");
  79.       disp("A dual approach may be used to compute the observability grammian.");
  80.       prompt
  81.       clc
  82.  
  83.       
  84.     elseif (k == 2)
  85.       clc
  86.       help tzero
  87.       prompt
  88.  
  89.       disp("System zeros (tzero) example\n");
  90.       disp("Example #1, consider the state space system:\n");
  91.       a=[0 1 0;-10 -2 0;-10 0 -8]
  92.       b=[0;1;9]
  93.       c=[-10 0 -4]
  94.       d=1
  95.       prompt
  96.       disp("\nTo compute the zeros of this system, enter the following command:\n");
  97.       cmd = "zer = tzero(a,b,c,d);";
  98.       run_cmd;
  99.       disp("Results:\n");
  100.       zer = tzero(a,b,c,d)
  101.       disp("Variable Description:\n");
  102.       disp("zer => zeros of state space system");
  103.       disp("a, b, c, d => state space system used as input argument");
  104.       prompt
  105.       clc
  106.  
  107.       disp("Example #2, consider the state space system from example 1 again:");
  108.       cmd = "sys = ss2sys(a,b,c,d);";
  109.       disp(cmd);
  110.       eval(cmd);
  111.       sysout(sys);
  112.       disp("\nThe zeros of this system can also be calculated directly from the");
  113.       disp("system variable:");
  114.       cmd = "zer = tzero(sys);";
  115.       run_cmd;
  116.       disp("Results:\n")
  117.       zer = tzero(sys)
  118.       disp("Variable Description:\n");
  119.       disp("zer => zeros of state space system");
  120.       disp("sys => state space system used as input argument");
  121.       prompt
  122.       clc
  123.  
  124.     elseif (k == 3)
  125.       clc
  126.       help c2d
  127.       prompt
  128.  
  129.       clc
  130.       disp("Continuous => Discrete and Discrete => Continuous conversions (c2d,d2c)");
  131.       disp("\nExample #1, consider the following continuous state space system");
  132.       cmd = "sys_cont = ss2sys([-11 6;-15 8], [1;2], [2 -1], 0);";
  133.       eval(cmd);
  134.       disp(cmd);
  135.       disp("Examine the poles and zeros of the continuous system:");
  136.       sysout(sys_cont,"all");
  137.       disp("\nTo convert this to a discrete system, a sampling time is needed:");
  138.       cmd = "Tsam = 0.5;";
  139.       run_cmd;
  140.       disp("\nNow convert to a discrete system with the command:");
  141.       cmd = "sys_disc = c2d(sys_cont,Tsam);";
  142.       run_cmd;
  143.       disp("Examine the poles and zeros of the discrete system:");
  144.       sysout(sys_disc,"all");
  145.       prompt
  146.       clc
  147.  
  148.       disp("\nNow we will convert the discrete system back to a continuous system");
  149.       disp("using the d2c command:");
  150.       help d2c
  151.       prompt
  152.       cmd = "new_sys_cont = d2c(sys_disc);";
  153.       run_cmd;
  154.       disp("\nExamine the poles and zeros of the discrete system:");
  155.       sysout(new_sys_cont,"all");
  156.       prompt
  157.  
  158.     elseif (k == 4)
  159.       clc
  160.       help are
  161.       prompt
  162.       clc
  163.  
  164.       disp("Algebraic Riccati Equation (are, dare)");
  165.  
  166.       disp("\nExample #1, consider the continuous state space system:\n");
  167.       a=[1 3 -10.2;3.7 -2 9;1 3 7]
  168.       b=[1 12;6 2;-3.8 7]
  169.       c=[1 -1.1 7;3 -9.8 2]
  170.       d=0
  171.       prompt
  172.       disp("\nThe solution to the continuous algebraic riccati equation");
  173.       disp("is computed as follows:");
  174.       cmd = "x_cont = are(a, b, c);";
  175.       run_cmd;
  176.       disp("Results:\n")
  177.       x_cont = are(a,b,c)
  178.       disp("Variable Description:\n")
  179.       disp("x_cont => solution to the continuous algebraic riccati equation");
  180.       disp("a, b, c => a, b, and c matrices of continuous time system\n");
  181.       prompt
  182.  
  183.       clc
  184.       help dare
  185.       prompt
  186.       clc
  187.  
  188.       disp("Example #2, consider the discrete time state space system:\n");
  189.       a=[1 5 -8.4;1.2 -3 5;1 7 9]
  190.       b=[1 5;2 6;-4.4 5]
  191.       c=[1 -1.5 2;6 -9.8 1]
  192.       d=0
  193.       r=eye(columns(b))
  194.       prompt
  195.       disp("\nThe solution to the continuous algebraic riccati equation");
  196.       disp("is computed as follows:");
  197.       cmd = "x_disc = dare(a, b, c, r);";
  198.       run_cmd;
  199.       disp("Results:\n")
  200.       x_disc = dare(a,b,c,r)
  201.       disp("Variable Description:\n");
  202.       disp("x_disc => solution to the discrete algebraic riccati equation");
  203.       disp("a, b, c => a, b and c matrices of discrete time system\n");
  204.       prompt
  205.       clc
  206.  
  207.     elseif (k == 5)
  208.       disp("--- Balanced realization: not yet implemented")
  209.     elseif (k == 6)
  210.       disp("--- Open loop balanced truncation: not yet implemented")
  211.     elseif (k == 7)
  212.       disp("SISO pole placement example:")
  213.       cmd = "sys=tf2sys(1,[1 -2 1]);";
  214.       run_cmd
  215.       disp("System in zero-pole form is:")
  216.       cmd = "sysout(sys,\"zp\");";
  217.       run_cmd
  218.       disp("and in state space form:")
  219.       cmd = "sysout(sys,\"ss\");";
  220.       run_cmd
  221.       disp("Desired poles at -1, -1");
  222.       cmd = "K=place(sys,[-1 -1])";
  223.       run_cmd
  224.       disp("Check results:")
  225.       cmd = "[A,B] = sys2ss(sys);";
  226.       run_cmd
  227.       cmd = "poles=eig(A-B*K)";
  228.       run_cmd
  229.       prompt
  230.     elseif (k == 8)
  231.       return
  232.     endif
  233.   endwhile  
  234. endfunction
  235.  
  236.