home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21fb.zip / octave / SCRIPTS.ZIP / scripts.fat / control / rldemo.m < prev    next >
Text File  |  1999-12-24  |  10KB  |  301 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 } { outputs =} rldemo ( inputs ) 
  21. ##Octave Controls toolbox demo: Root Locus demo
  22. ##@end deftypefn
  23.  
  24. function rldemo ()
  25. ## Written by David Clem August 15, 1994
  26. ## Updated by John Ingram December 1996
  27.  
  28.   while (1)
  29.     clc
  30.     k = menu("Octave Root Locus Demo", ...
  31.         "Display continuous system's open loop poles and zeros (pzmap)", ...
  32.         "Display discrete system's open loop poles and zeros (pzmap)", ...
  33.         "Display root locus diagram of SISO continuous system (rlocus)", ...
  34.         "Display root locus diagram of SISO discrete system (rlocus)", ...    
  35.         "Return to main demo menu");
  36.     gset autoscale
  37.     if (k == 1)
  38.       clc
  39.       help pzmap
  40.       prompt
  41.  
  42.       clc
  43.       disp("Display continuous system's open loop poles and zeros (pzmap)\n");
  44.       disp("Example #1, Consider the following continuous transfer function:");
  45.       cmd = "sys1 = tf2sys([1.5, 18.5, 6], [1, 4, 155, 302, 5050]);";
  46.       disp(cmd);
  47.       eval(cmd);
  48.       cmd ="sysout(sys1);";
  49.       disp(cmd);
  50.       eval(cmd);
  51.       disp("\nPole-zero form can be obtained as follows:");
  52.       cmd = "sysout(sys1,""zp"");";
  53.       disp(cmd);
  54.       eval(cmd);     
  55.       disp("View the system's open loop poles and zeros with the command:")
  56.       cmd = "pzmap(sys1);";
  57.       run_cmd
  58.       prompt     
  59.  
  60.       clc
  61.       disp("Example #2, Consider the following set of poles and zeros:");
  62.       cmd = "sys2 = zp2sys([-1, 5, -23],[-1, -10, -7+5i, -7-5i],5);";
  63.       disp(cmd);
  64.       eval(cmd);
  65.       cmd = "sysout(sys2);";
  66.       disp(cmd);
  67.       eval(cmd);
  68.       disp("\nThe pzmap command for the zp form is the same as the tf form:")
  69.       cmd = "pzmap(sys2);";
  70.       run_cmd;
  71.       disp("\nThe internal representation of the system is not important;");
  72.       disp("pzmap automatically sorts it out internally.");
  73.       prompt;
  74.  
  75.       clc
  76.       disp("Example #3, Consider the following state space system:\n");
  77.       cmd = "sys3=ss2sys([0, 1; -10, -11], [0; 1], [0, -2], 1);";
  78.       disp(cmd); 
  79.       eval(cmd);
  80.       cmd = "sysout(sys3);";
  81.       disp(cmd); 
  82.       eval(cmd);
  83.       disp("\nPole-zero form can be obtained as follows:");
  84.       cmd = "sysout(sys3,""zp"");";
  85.       disp(cmd);
  86.       eval(cmd); 
  87.       disp("\nOnce again, the pzmap command is the same:");
  88.       cmd = "pzmap(sys3);";
  89.       run_cmd;
  90.       prompt;
  91.  
  92.       closeplot
  93.       clc
  94.     
  95.     elseif (k == 2)
  96.       clc
  97.       help pzmap
  98.       prompt
  99.  
  100.       clc
  101.       disp("\nDisplay discrete system's open loop poles and zeros (pzmap)\n");
  102.       disp("First we must define a sampling time, as follows:\n");
  103.       cmd = "Tsam = 1;";
  104.       run_cmd;
  105.       disp("Example #1, Consider the following discrete transfer function:");
  106.       cmd = "sys1 = tf2sys([1.05, -0.09048], [1, -2, 1],Tsam);";
  107.       disp(cmd);
  108.       eval(cmd);
  109.       cmd ="sysout(sys1);";
  110.       disp(cmd);
  111.       eval(cmd);
  112.       disp("\nPole-zero form can be obtained as follows:");
  113.       cmd = "sysout(sys1,""zp"");";
  114.       disp(cmd);
  115.       eval(cmd);     
  116.       disp("View the system's open loop poles and zeros with the command:")
  117.       cmd = "pzmap(sys1);";
  118.       run_cmd
  119.       prompt     
  120.  
  121.       clc
  122.       disp("Example #2, Consider the following set of discrete poles and zeros:");
  123.       cmd = "sys2 = zp2sys(-0.717, [1, -0.368], 3.68, Tsam);";
  124.       disp(cmd);
  125.       eval(cmd);
  126.       cmd = "sysout(sys2);";
  127.       disp(cmd);
  128.       eval(cmd);
  129.       disp("\nThe pzmap command for the zp form is the same as the tf form:")
  130.       cmd = "pzmap(sys2);";
  131.       run_cmd;
  132.       disp("\nThe internal representation of the system is not important;");
  133.       disp("pzmap automatically sorts it out internally.");
  134.       prompt;
  135.  
  136.       clc
  137.       disp("Example #3, Consider the following discrete state space system:\n");
  138.       cmd = "sys3=ss2sys([1, 0.0952; 0, 0.905], [0.00484; 0.0952], [1, 0], 0, Tsam);";
  139.       disp(cmd); 
  140.       eval(cmd);
  141.       cmd = "sysout(sys3);";
  142.       disp(cmd); 
  143.       eval(cmd);
  144.       disp("\nPole-zero form can be obtained as follows:");
  145.       cmd = "sysout(sys3,""zp"");";
  146.       disp(cmd);
  147.       eval(cmd); 
  148.       disp("\nOnce again, the pzmap command is the same:");
  149.       cmd = "pzmap(sys3);";
  150.       run_cmd;
  151.       prompt;
  152.  
  153.       closeplot
  154.       clc
  155.  
  156.     elseif (k == 3)
  157.       clc
  158.       help rlocus
  159.       prompt;
  160.  
  161.       clc
  162.       disp("Display root locus of a continuous SISO system (rlocus)\n")
  163.       disp("Example #1, Consider the following continuous transfer function:");
  164.       cmd = "sys1 = tf2sys([1.5, 18.5, 6],[1, 4, 155, 302, 5050]);";
  165.       disp(cmd);
  166.       eval(cmd);
  167.       cmd ="sysout(sys1);";
  168.       disp(cmd);
  169.       eval(cmd);
  170.       disp("\nPole-zero form can be obtained as follows:");
  171.       cmd = "sysout(sys1,""zp"");";
  172.       disp(cmd);
  173.       eval(cmd); 
  174.       disp("\nWhen using rlocus, inital system poles are displayed as X's.")
  175.       disp("Moving poles are displayed as diamonds.  Zeros are displayed as")
  176.       disp("boxes.  The simplest form of the rlocus command is as follows:")
  177.       cmd = "rlocus(sys1);";
  178.       run_cmd
  179.       disp("\nrlocus automatically selects the minimum and maximum gains based")
  180.       disp("on the real-axis locus breakpoints.  The plot limits are chosen")
  181.       disp("to be no more than 10 times the maximum magnitude of the open")
  182.       disp("loop poles/zeros.");
  183.       prompt
  184.  
  185.       clc
  186.       disp("Example #2, Consider the following set of poles and zeros:");
  187.       cmd = "sys2 = zp2sys([],[0, -20, -2, -0.1],5);";
  188.       disp(cmd);
  189.       eval(cmd);
  190.       cmd = "sysout(sys2);";
  191.       disp(cmd);
  192.       eval(cmd);
  193.       disp("\nThe rlocus command for the zp form is the same as the tf form:")
  194.       cmd = "rlocus(sys2);";
  195.       run_cmd;
  196.       disp("\nThe internal representation of the system is not important;");
  197.       disp("rlocus automatically sorts it out internally.");
  198.       prompt;
  199.  
  200.       clc
  201.       disp("Example #3, Consider the following state space system:\n");
  202.       cmd = "sys3=ss2sys([0, 1; -10, -11], [0; 1], [0, -2], 0);";
  203.       disp(cmd); 
  204.       eval(cmd);
  205.       cmd = "sysout(sys3);";
  206.       disp(cmd); 
  207.       eval(cmd);
  208.       disp("\nPole-zero form can be obtained as follows:");
  209.       cmd = "sysout(sys3,""zp"");";
  210.       disp(cmd);
  211.       eval(cmd); 
  212.       disp("\nOnce again, the rlocus command is the same:");
  213.       cmd = "rlocus(sys3);";
  214.       run_cmd;
  215.  
  216.       disp("\nNo matter what form the system is in, the rlocus command works the");
  217.       disp("the same.");
  218.       prompt;
  219.  
  220.       closeplot
  221.       clc
  222.  
  223.     elseif (k == 4)
  224.       clc
  225.       help rlocus
  226.       prompt
  227.  
  228.       clc
  229.       disp("Display root locus of a discrete SISO system (rlocus)\n")
  230.       disp("First we must define a sampling time, as follows:\n");
  231.       cmd = "Tsam = 1;";
  232.       run_cmd;
  233.       disp("Example #1, Consider the following discrete transfer function:");
  234.       cmd = "sys1 = tf2sys([1.05, -0.09048],[1, -2, 1],Tsam);";
  235.       disp(cmd);
  236.       eval(cmd);
  237.       cmd ="sysout(sys1);";
  238.       disp(cmd);
  239.       eval(cmd);
  240.       disp("\nPole-zero form can be obtained as follows:");
  241.       cmd = "sysout(sys1,""zp"");";
  242.       disp(cmd);
  243.       eval(cmd);     
  244.       disp("\nWhen using rlocus, inital system poles are displayed as X's.")
  245.       disp("Moving poles are displayed as diamonds.  Zeros are displayed as")
  246.       disp("boxes.  The simplest form of the rlocus command is as follows:")
  247.       cmd = "rlocus(sys1);";
  248.       run_cmd
  249.       disp("\nrlocus automatically selects the minimum and maximum gains based")
  250.       disp("on the real-axis locus breakpoints.  The plot limits are chosen")
  251.       disp("to be no more than 10 times the maximum magnitude of the open")
  252.       disp("loop poles/zeros.");
  253.       prompt
  254.  
  255.       clc
  256.       disp("Example #2, Consider the following set of discrete poles and zeros:");
  257.       cmd = "sys2 = zp2sys(-0.717, [1, -0.368], 3.68, Tsam);";
  258.       disp(cmd);
  259.       eval(cmd);
  260.       cmd = "sysout(sys2);";
  261.       disp(cmd);
  262.       eval(cmd);
  263.       disp("\nThe rlocus command for the zp form is the same as the tf form:")
  264.       cmd = "rlocus(sys2);";
  265.       run_cmd;
  266.       disp("\nThe internal representation of the system is not important;");
  267.       disp("rlocus automatically sorts it out internally.  Also, it does not");
  268.       disp("matter if the system is continuous or discrete.  rlocus also sorts");
  269.       disp("this out automatically");
  270.       prompt;
  271.  
  272.       clc
  273.       disp("Example #3, Consider the following discrete state space system:\n");
  274.       cmd = "sys3=ss2sys([1, 0.0952; 0, 0.905], [0.00484; 0.0952], [1, 0], 0, Tsam);";
  275.       disp(cmd); 
  276.       eval(cmd);
  277.       cmd = "sysout(sys3);";
  278.       disp(cmd); 
  279.       eval(cmd);
  280.       disp("\nPole-zero form can be obtained as follows:");
  281.       cmd = "sysout(sys3,""zp"");";
  282.       disp(cmd);
  283.       eval(cmd); 
  284.       disp("\nOnce again, the rlocus command is the same:");
  285.       cmd = "rlocus(sys3);";
  286.       run_cmd;
  287.  
  288.       disp("\nNo matter what form the system is in, the rlocus command works the");
  289.       disp("the same.");
  290.  
  291.       prompt;
  292.  
  293.       closeplot
  294.       clc
  295.  
  296.     elseif (k == 5)
  297.       return
  298.     endif
  299.   endwhile  
  300. endfunction
  301.