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

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