diff scripts/control/system/moddemo.m @ 3431:99ab64f4a09d

[project @ 2000-01-14 03:53:03 by jwe]
author jwe
date Fri, 14 Jan 2000 04:12:41 +0000
parents
children 7923abdeb4e5
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/scripts/control/system/moddemo.m
@@ -0,0 +1,205 @@
+## Copyright (C) 1996 Auburn University.  All rights reserved.
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by the
+## Free Software Foundation; either version 2, or (at your option) any
+## later version.
+##
+## Octave is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+## for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, write to the Free
+## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {@var{outputs} =} moddemo (@var{inputs})
+## Octave Controls toolbox demo: Model Manipulations demo
+## @end deftypefn
+
+## Author: David Clem
+## Created: August 15, 1994
+## a s hodel: updated to reflect updated output order in ss2zp
+
+function moddemo ()
+
+  while (1)
+    clc
+    disp("Octave Model Manipulations Demo")
+    disp("=======================================")
+    disp("  1)  Perform continuous to discrete time conversion (c2d)")
+    disp("  2)  Convert from state space to zero / pole form (ss2zp)")
+    disp("      Convert from zero / pole to state space form (zp2ss)")
+    disp("  3)  Convert from state space to transfer function form (ss2tf)")
+    disp("      Convert from transfer function to state space form (tf2ss)")
+    disp("  4)  Convert from transfer function to zero / pole form (tf2zp)")
+    disp("      Convert from zero / pole to transfer function form (zp2tf)")
+    disp("  5)  Return to main demo menu")
+    disp(" ")
+    k=6;
+    while(k > 5 || k < 1)
+      k = input("Please enter a number:");
+    endwhile
+    if (k == 1)
+      clc
+      disp("Perform continuous to discrete time conversion (c2d)\n")
+      disp("Example #1, Consider the following continuous time state space system:\n")
+      a=[0, 1; -25, -4]
+      b=[0; 1]
+      c=[1, 1]
+      d=1
+      prompt
+      disp("\nTo convert this to a discrete time system (using a zero order hold),")
+      disp("use the following commands:\n")
+      cmd="sys=ss2sys(a,b,c,d);";
+      run_cmd
+      cmd="dsys = c2d(sys,0.2);";
+      run_cmd
+      cmd="sysout(dsys);";
+      run_cmd
+      disp("Function check\n")
+      disp("Check the poles of sys vs dsys:\n")
+      cmd="[da,db]=sys2ss(dsys);";
+      run_cmd
+      cmd="lam = eig(a);";
+      run_cmd
+      disp("Discretize the continuous time eigenvalues using the matrix exponential:\n")
+      disp("lambc = exp(lam*0.2)\n")
+      lambc = exp(lam*0.2)
+      disp("Check the eigenvalues of da\n")
+      lambd = eig(da)
+      disp("Calculate the difference between lambd and lambc:\n")
+      cmd = "error = sort(lambd)-sort(lambc)\n";
+      run_cmd
+      disp("The error is on the order of roundoff noise, so we're o.k.")
+      prompt
+      clc
+    elseif (k == 2)
+      clc
+      disp("Convert from state space to zero / pole form (ss2zp)\n")
+      disp("Example #1, Consider the following state space system:\n")
+      a=[0, 3, 1; -2, -4, 5; 5, 8, 2]
+      b=[0; 5; 2.5]
+      c=[6, -1.9, 2]
+      d=[-20]
+      prompt
+      disp(" ")
+      disp("\nTo find the poles and zeros of this sytstem, use the following command:\n")
+      disp("\n[zer, pol] = ss2zp(a, b, c, d)\n")
+      prompt
+      disp("Results:\n")
+      [zer, pol] = ss2zp(a, b, c, d)
+      disp("Variable Description:\n")
+      disp("zer, pol => zeros and poles of the state space system")
+      disp("a, b, c, d => state space system\n")
+      prompt
+      clc
+      disp("Convert from zero / pole to state space form (zp2ss)\n")
+      disp("Example #1, Consider the following set of zeros and poles:\n")
+      zer
+      pol
+      prompt
+      disp("\nTo find an equivalent state space representation for this set of poles")
+      disp("and zeros, use the following commands:\n")
+      k=1
+      disp("\n[na, nb, nc, nd] = zp2ss(zer, pol, k)\n")
+      prompt
+      disp("Results:\n")
+      [na, nb, nc, nd] = zp2ss(zer, pol, k)
+      disp("Variable Description:\n")
+      disp("na, nb, nc, nd => state space system equivalent to zero / pole input")
+      disp("zer, pol => zeros and poles of desired state space system")
+      disp("k => gain associated with the zeros\n")
+      prompt
+      disp("Function check\n")
+      disp("Are the eigenvalues of the origonal state space system the same as the")
+      disp("eigenvalues of the newly constructed state space system ?\n")
+      disp("Find the difference between the two sets of eigenvalues")
+      disp("error = sort(eig(a)) - sort(eig(na))\n")
+      error = sort(eig(a)) - sort(eig(na))
+      prompt
+      clc
+    elseif (k == 3)
+      clc
+      disp("Convert from state space to transfer function (ss2tf)\n")
+      disp("Example #1, Consider the following state space system:\n")
+      a=[0, 1; -2, -3]
+      b=[1; 1]
+      c=[1, 9]
+      d=[1]
+      prompt
+      disp("\nTo find an equivalent transfer function for this system, use")
+      disp("the following command:\n")
+      disp("[num, den] = ss2tf(a, b, c, d)\n")
+      prompt
+      disp("Results:\n")
+      [num,den] = ss2tf(a, b, c, d)
+      disp("Variable Description:\n")
+      disp("num, den => numerator and denominator of transfer function that is")
+      disp("            equivalent to the state space system")
+      disp("a, b, c, d => state space system\n")
+      prompt
+      clc
+      disp("Convert from transfer function to state space form (tf2ss)\n")
+      disp("Example #1, Consider the following transfer function:\n")
+      num
+      den
+      prompt
+      disp("\nTo find an equivalent state space representation for this system, use")
+      disp("the following command:\n")
+      disp("[a, b, c, d] = tf2ss(num, den)\n")
+      prompt
+      disp("Results:\n")
+      [a, b, c, d] = tf2ss(num, den)
+      disp("Variable Description:\n")
+      disp("a, b, c, d => state space system equivalent to transfer function input")
+      disp("num, den => numerator and denominator of transfer function that is equivalent")
+      disp("            to the state space system\n")
+      prompt
+      clc
+    elseif (k == 4)
+      clc
+      disp("Convert from transfer function to zero / pole form (tf2zp)\n")
+      disp("Example #1, Consider the following transfer function:\n")
+      num=[1, 2, 3, 4, 5, ]
+      den=[1, 2, 3, 4, 5, 6, 7]
+      prompt
+      disp("\nTo find the zeros and poles of this system, use the following command:\n")
+      disp("[zer,pol] = tf2zp(num,den)\n")
+      prompt
+      disp("Results:\n")
+      [zer,pol] = tf2zp(num,den)
+      disp("Variable Description:\n")
+      disp("zer,pol => zeros and poles of the transfer function")
+      disp("num, den => numerator and denominator of transfer function\n")
+      prompt
+      clc
+      disp("Convert from zero / pole to transfer function (zp2tf)\n")
+      disp("Example #1, Consider the following set of zeros and poles:\n")
+      zer
+      pol
+      prompt
+      disp("\nTo find an equivalent transfer function representation for this set")
+      disp("of poles and zeros, use the following commands:\n")
+      k=1
+      disp("\n[num, den] = zp2tf(zer, pol, k)\n")
+      prompt
+      disp("Results:\n")
+      [num, den] = zp2tf(zer, pol, k)
+      disp("Variable Description:\n")
+      disp("[num, den] => transfer function representation of desired set of zeros")
+      disp("              and poles")
+      disp("a, b, c, d => state space system")
+      disp("zer, pol => zeros and poles of desired state space system")
+      disp("k => gain associated with the zeros\n")
+      prompt
+      clc
+    elseif (k == 5)
+      return
+    endif
+  endwhile
+endfunction