diff scripts/control/moddemo.m @ 3213:ba1c7cdc6090

[project @ 1998-11-06 16:15:36 by jwe]
author jwe
date Fri, 06 Nov 1998 16:16:31 +0000
parents
children dbcc24961c44
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/scripts/control/moddemo.m
@@ -0,0 +1,201 @@
+# Copyright (C) 1996 A. Scottedward Hodel 
+#
+# 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, 675 Mass Ave, Cambridge, MA 02139, USA. 
+ 
+function moddemo()
+# Octave Controls toolbox demo: Model Manipulations demo
+# Written by David Clem August 15, 1994
+
+# $Revision: 1.1 $
+# a s hodel: updated to reflect updated output order in ss2zp
+
+  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