From: <par...@us...> - 2011-09-21 20:22:43
|
Revision: 8579 http://octave.svn.sourceforge.net/octave/?rev=8579&view=rev Author: paramaniac Date: 2011-09-21 20:22:37 +0000 (Wed, 21 Sep 2011) Log Message: ----------- control: add zpk stop-gap measure Modified Paths: -------------- trunk/octave-forge/main/control/INDEX trunk/octave-forge/main/control/doc/NEWS Added Paths: ----------- trunk/octave-forge/main/control/inst/zpk.m Removed Paths: ------------- trunk/octave-forge/main/control/devel/zpk.m Modified: trunk/octave-forge/main/control/INDEX =================================================================== --- trunk/octave-forge/main/control/INDEX 2011-09-21 19:44:48 UTC (rev 8578) +++ trunk/octave-forge/main/control/INDEX 2011-09-21 20:22:37 UTC (rev 8579) @@ -10,6 +10,7 @@ frd ss tf + zpk Model Data Access @lti/dssdata @lti/frdata Deleted: trunk/octave-forge/main/control/devel/zpk.m =================================================================== --- trunk/octave-forge/main/control/devel/zpk.m 2011-09-21 19:44:48 UTC (rev 8578) +++ trunk/octave-forge/main/control/devel/zpk.m 2011-09-21 20:22:37 UTC (rev 8579) @@ -1,102 +0,0 @@ -## Copyright (C) 2011 Lukas F. Reichlin -## -## This file is part of LTI Syncope. -## -## LTI Syncope 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 3 of the License, or -## (at your option) any later version. -## -## LTI Syncope 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 LTI Syncope. If not, see <http://www.gnu.org/licenses/>. - -## -*- texinfo -*- -## @deftypefn {Function File} {@var{s} =} zpk (@var{"s"}) -## @deftypefnx {Function File} {@var{z} =} zpk (@var{"z"}, @var{tsam}) -## @deftypefnx {Function File} {@var{sys} =} zpk (@var{sys}) -## @deftypefnx {Function File} {@var{sys} =} zpk (@var{k}) -## @deftypefnx {Function File} {@var{sys} =} zpk (@var{z}, @var{p}, @var{k}, @dots{}) -## @deftypefnx {Function File} {@var{sys} =} zpk @var{z}, @var{p}, @var{k}, @var{tsam}, @dots{}) -## @deftypefnx {Function File} {@var{sys} =} zpk (@var{z}, @var{p}, @var{k}, @var{tsam}, @dots{}) -## Create transfer function model from zero-pole-gain data. -## -## @strong{Inputs} -## @table @var -## @item sys -## LTI model to be converted to transfer function. -## @item num -## Numerator or cell of numerators. Each numerator must be a row vector -## containing the coefficients of the polynomial in descending powers of -## the transfer function variable. -## @item den -## Denominator or cell of denominators. Each denominator must be a row vector -## containing the coefficients of the polynomial in descending powers of -## the transfer function variable. -## @item tsam -## Sampling time in seconds. If @var{tsam} is not specified, a continuous-time -## model is assumed. -## @item @dots{} -## Optional pairs of properties and values. -## Type @command{set (tf)} for more information. -## @end table -## -## @strong{Outputs} -## @table @var -## @item sys -## Transfer function model. -## @end table -## -## @strong{Example} -## @example -## @group -## @end group -## @end example -## -## @seealso{tf, ss, dss, frd} -## @end deftypefn - -## Author: Lukas Reichlin <luk...@gm...> -## Created: September 2011 -## Version: 0.1 - -function sys = zpk (z = {}, p = {}, k = [], varargin) - - switch (nargin) - case 0 - sys = tf (); - return; - - case 1 - if (isa (z, "lti") || is_real_matrix (z) || ischar (z)) - sys = tf (z); - return; - else - print_usage (); - endif - - case 2 - if (ischar (z) && issample (p, -1)) - sys = tf (z, p); - else - print_usage (); - endif - - otherwise - if (! iscell (z)) - z = {z}; - endif - if (! iscell (p)) - p = {p}; - endif - num = cellfun (@(zer, gain) real (gain * poly (zer)), z, num2cell (k), "uniformoutput", false); - den = cellfun (@(pol) real (poly (pol)), p, "uniformoutput", false); - sys = tf (num, den, varargin{:}); - endswitch - -endfunction - Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-09-21 19:44:48 UTC (rev 8578) +++ trunk/octave-forge/main/control/doc/NEWS 2011-09-21 20:22:37 UTC (rev 8579) @@ -14,7 +14,12 @@ realization of SLICOT TD04AD is a minimal one. Therefore certain poles and zeros might be missing. +** zpk, @lti/zpkdata + -- Included wrappers that create transfer function model from zero-pole-gain + data (zpk) and zero-pole-gain data from lti models (zpkdata). They are + stop-gap measures for compatibility until ZPK models are implemented. + =============================================================================== control-2.1.55 Release Date: 2011-09-07 Release Manager: Lukas Reichlin =============================================================================== Copied: trunk/octave-forge/main/control/inst/zpk.m (from rev 8578, trunk/octave-forge/main/control/devel/zpk.m) =================================================================== --- trunk/octave-forge/main/control/inst/zpk.m (rev 0) +++ trunk/octave-forge/main/control/inst/zpk.m 2011-09-21 20:22:37 UTC (rev 8579) @@ -0,0 +1,104 @@ +## Copyright (C) 2011 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope 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 3 of the License, or +## (at your option) any later version. +## +## LTI Syncope 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 LTI Syncope. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{s} =} zpk (@var{"s"}) +## @deftypefnx {Function File} {@var{z} =} zpk (@var{"z"}, @var{tsam}) +## @deftypefnx {Function File} {@var{sys} =} zpk (@var{sys}) +## @deftypefnx {Function File} {@var{sys} =} zpk (@var{k}) +## @deftypefnx {Function File} {@var{sys} =} zpk (@var{z}, @var{p}, @var{k}, @dots{}) +## @deftypefnx {Function File} {@var{sys} =} zpk @var{z}, @var{p}, @var{k}, @var{tsam}, @dots{}) +## @deftypefnx {Function File} {@var{sys} =} zpk (@var{z}, @var{p}, @var{k}, @var{tsam}, @dots{}) +## Create transfer function model from zero-pole-gain data. +## This is just a stop-gap compatibility wrapper since zpk +## models are not yet implemented. +## +## @strong{Inputs} +## @table @var +## @item sys +## LTI model to be converted to transfer function. +## @item z +## Cell of vectors containing the zeros for each channel. +## z@{i,j@} contains the zeros from input j to output i. +## In the SISO case, a single vector is accepted as well. +## @item p +## Cell of vectors containing the poles for each channel. +## p@{i,j@} contains the poles from input j to output i. +## In the SISO case, a single vector is accepted as well. +## @item k +## Matrix containing the gains for each channel. +## k(i,j) contains the gain from input j to output i. +## @item tsam +## Sampling time in seconds. If @var{tsam} is not specified, +## a continuous-time model is assumed. +## @item @dots{} +## Optional pairs of properties and values. +## Type @command{set (tf)} for more information. +## @end table +## +## @strong{Outputs} +## @table @var +## @item sys +## Transfer function model. +## @end table +## +## @seealso{tf, ss, dss, frd} +## @end deftypefn + +## Author: Lukas Reichlin <luk...@gm...> +## Created: September 2011 +## Version: 0.1 + +function sys = zpk (z = {}, p = {}, k = [], varargin) + + switch (nargin) + case 0 + sys = tf (); + return; + + case 1 + if (isa (z, "lti") || is_real_matrix (z) || ischar (z)) + sys = tf (z); + return; + else + print_usage (); + endif + + case 2 + if (ischar (z) && issample (p, -1)) + sys = tf (z, p); + else + print_usage (); + endif + + otherwise + if (! iscell (z)) + z = {z}; + endif + if (! iscell (p)) + p = {p}; + endif + if (! size_equal (z, p, k)) + error ("zpk: arguments z, p and k must have equal dimensions"); + endif + num = cellfun (@(zer, gain) real (gain * poly (zer)), z, num2cell (k), "uniformoutput", false); + den = cellfun (@(pol) real (poly (pol)), p, "uniformoutput", false); + sys = tf (num, den, varargin{:}); + endswitch + +endfunction + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-09-23 17:45:04
|
Revision: 8582 http://octave.svn.sourceforge.net/octave/?rev=8582&view=rev Author: paramaniac Date: 2011-09-23 17:44:58 +0000 (Fri, 23 Sep 2011) Log Message: ----------- control: enable MIMO transfer function interconnections Modified Paths: -------------- trunk/octave-forge/main/control/inst/@tf/__sys_connect__.m Added Paths: ----------- trunk/octave-forge/main/control/devel/test_tf.m Added: trunk/octave-forge/main/control/devel/test_tf.m =================================================================== --- trunk/octave-forge/main/control/devel/test_tf.m (rev 0) +++ trunk/octave-forge/main/control/devel/test_tf.m 2011-09-23 17:44:58 UTC (rev 8582) @@ -0,0 +1,35 @@ +%{ +s = tf ("s"); + +s + 2 + +s - 2 + +[s, 2] + +[s; 2] + + +a = tf ([1, -2], [1, 3]); +b = tf ([1, -4], [1, 5]); + +a*b + +feedback (a, b) +feedback (a, b, "+") +%} + +num = {[1, 5, 7], [1]; [1, 7], [1, 5, 5]}; +den = {[1, 5, 6], [1, 2]; [1, 8, 6], [1, 3, 2]}; +c = tf (num, den); + +d = tf (Boeing707); + +%c*d + +c+c +%{ +[c, c] + +[c; c] +%} Modified: trunk/octave-forge/main/control/inst/@tf/__sys_connect__.m =================================================================== --- trunk/octave-forge/main/control/inst/@tf/__sys_connect__.m 2011-09-23 08:56:31 UTC (rev 8581) +++ trunk/octave-forge/main/control/inst/@tf/__sys_connect__.m 2011-09-23 17:44:58 UTC (rev 8582) @@ -1,4 +1,4 @@ -## Copyright (C) 2009 Lukas F. Reichlin +## Copyright (C) 2009, 2011 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -35,7 +35,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.1 +## Version: 0.2 function sys = __sys_connect__ (sys, M) @@ -60,7 +60,9 @@ ## TODO: Check for den = 0, e.g. in feedback (tf (1), tf (-1)) - if (m == 2 && p == 2 && num{1,2} == 0 && num{2,1} == 0) + if (p == 2 && m == 2 && num{1,2} == 0 && num{2,1} == 0 \ + && M(1,1) == 0 && M(2,2) == 0) + ## mtimes, feedback sys.num(1,1) = num{1,1} * den{2,2}; sys.num(1,2) = M(1,2) * num{1,1} * num{2,2}; sys.num(2,1) = M(2,1) * num{1,1} * num{2,2}; @@ -68,7 +70,11 @@ sys.den(:) = den{1,1} * den{2,2} - M(1,2) * M(2,1) * num{1,1} * num{2,2}; - elseif (m == 4 && p == 3) # TODO: extend check + elseif (p == 3 && m == 4 && num{1,3} == 0 && num{1,4} == 0 \ + && num{2,1} == 0 && num{2,2} == 0 && num{2,4} == 0 \ + && num{3,1} == 0 && num{3,2} == 0 && num{3,3} == 0 \ + && M == [0, 1, 0; 0, 0, 1; 0, 0, 0; 0, 0, 0]) + ## horzcat [sys1, sys2], plus, minus sys.num(:) = tfpoly (0); sys.den(:) = tfpoly (1); @@ -84,16 +90,30 @@ sys.den(2,3) = den{2,3}; sys.den(3,4) = den{3,4}; - elseif (m == 3 && p == 3) # TODO: extend check - sys.num = num; - sys.den = den; - + elseif (p == 3 && m == 3 && num{1,3} == 0 \ + && num{2,1} == 0 && num{2,2} == 0 && num{2,3} == 1 \ + && num{3,1} == 0 && num{3,2} == 0 && num{3,3} == 1 \ + && M == [0, 1, 0; 0, 0, 1; 0, 0, 0]) + ## plus, minus sys.num(1,3) = num{1,1} * den{1,2} + num{1,2} * den{1,1}; sys.den(1,3) = den{1,1} * den{1,2}; + elseif (p == 4 && m == 3 && num{1,2} == 0 && num{1,3} == 0 \ + && num{2,1} == 0 && num{2,3} == 0 \ + && num{3,1} == 0 && num{3,2} == 0 && num{3,3} == 1 \ + && num{4,1} == 0 && num{4,2} == 0 && num{4,3} == 1) + ## vertcat [sys1; sys2] + sys.num(1,3) = num{1,1}; + sys.num(2,3) = num{2,2}; + + sys.den(1,3) = den{1,1}; + sys.den(2,3) = den{2,2}; + else - error ("tf: sys_connect: MIMO systems not supported yet"); - + ## MIMO case, convert to state-space and back. + warning ("tf: converting to minimal state-space for MIMO TF interconnections"); + sys = tf (__sys_connect__ (ss (sys), M)); + endif -endfunction \ No newline at end of file +endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-09-23 17:56:01
|
Revision: 8583 http://octave.svn.sourceforge.net/octave/?rev=8583&view=rev Author: paramaniac Date: 2011-09-23 17:55:55 +0000 (Fri, 23 Sep 2011) Log Message: ----------- control: update news, remove completed task from projects file Modified Paths: -------------- trunk/octave-forge/main/control/devel/PROJECTS trunk/octave-forge/main/control/doc/NEWS Modified: trunk/octave-forge/main/control/devel/PROJECTS =================================================================== --- trunk/octave-forge/main/control/devel/PROJECTS 2011-09-23 17:44:58 UTC (rev 8582) +++ trunk/octave-forge/main/control/devel/PROJECTS 2011-09-23 17:55:55 UTC (rev 8583) @@ -70,8 +70,6 @@ * Support "z^-1" as tfvar (@tf and @tfpoly) - * MIMO tf interconnections (@tf/__sys_connect__.m) - * Find a transfer function to descriptor state-space conversion routine which supports non-proper models and individual denominators for each input-output channel (@tf/__sys2ss__.m). Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-09-23 17:44:58 UTC (rev 8582) +++ trunk/octave-forge/main/control/doc/NEWS 2011-09-23 17:55:55 UTC (rev 8583) @@ -8,6 +8,12 @@ -- Transfer function to state-space conversion uses now SLICOT TD04AD. Conversion of MIMO models is now supported. Usage: ss_sys = ss (tf_sys) +** tf + -- Support for interconnections of MIMO transfer functions. This is done by + an internal conversion to a minimal state-space representation. With the + current tf2ss and ss2tf conversions, only proper transfer function are + supported. This limitation does not exist for SISO transfer functions. + ** @lti/pole, @lti/zero -- Computation of poles and zeros of MIMO transfer functions is now possible via conversion to state-space. Please note that the state-space This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-09-23 19:40:44
|
Revision: 8585 http://octave.svn.sourceforge.net/octave/?rev=8585&view=rev Author: paramaniac Date: 2011-09-23 19:40:37 +0000 (Fri, 23 Sep 2011) Log Message: ----------- control: small rearrangement in index file Modified Paths: -------------- trunk/octave-forge/main/control/INDEX trunk/octave-forge/main/control/devel/pdfdoc/control.tex trunk/octave-forge/main/control/devel/pdfdoc/functions.texi Modified: trunk/octave-forge/main/control/INDEX =================================================================== --- trunk/octave-forge/main/control/INDEX 2011-09-23 19:27:33 UTC (rev 8584) +++ trunk/octave-forge/main/control/INDEX 2011-09-23 19:40:37 UTC (rev 8585) @@ -1,10 +1,7 @@ control >> Control Theory -Examples and Demos - BMWengine - Boeing707 +Examples MDSSystem optiPID - WestlandLynx Linear Time Invariant Models dss frd @@ -109,3 +106,6 @@ Miscellaneous strseq test_control + BMWengine + Boeing707 + WestlandLynx Modified: trunk/octave-forge/main/control/devel/pdfdoc/control.tex =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/control.tex 2011-09-23 19:27:33 UTC (rev 8584) +++ trunk/octave-forge/main/control/devel/pdfdoc/control.tex 2011-09-23 19:40:37 UTC (rev 8585) @@ -3,7 +3,7 @@ @setfilename control.info @settitle Octave Control Systems Package @afourpaper -@set VERSION 2.1.55 +@set VERSION 2.2.0 @c @afourwide @c %**end of header Modified: trunk/octave-forge/main/control/devel/pdfdoc/functions.texi =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-23 19:27:33 UTC (rev 8584) +++ trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-23 19:40:37 UTC (rev 8585) @@ -1,66 +1,4 @@ -@section Examples and Demos -@subsection BMWengine - - @deftypefn{Function File} {@var{sys} =} BMWengine () - @deftypefnx{Function File} {@var{sys} =} BMWengine (@var{"scaled"}) - @deftypefnx{Function File} {@var{sys} =} BMWengine (@var{"unscaled"}) - Model of the BMW 4-cylinder engine at ETH Zurich's control laboratory. - @example - @group - OPERATING POINT - Drosselklappenstellung alpha_DK = 10.3 Grad - Saugrohrdruck p_s = 0.48 bar - Motordrehzahl n = 860 U/min - Lambda-Messwert lambda = 1.000 - Relativer Wandfilminhalt nu = 1 - - INPUTS - U_1 Sollsignal Drosselklappenstellung [Grad] - U_2 Relative Einspritzmenge [-] - U_3 Zuendzeitpunkt [Grad KW] - M_L Lastdrehmoment [Nm] - - STATES - X_1 Drosselklappenstellung [Grad] - X_2 Saugrohrdruck [bar] - X_3 Motordrehzahl [U/min] - X_4 Messwert Lamba-Sonde [-] - X_5 Relativer Wandfilminhalt [-] - - OUTPUTS - Y_1 Motordrehzahl [U/min] - Y_2 Messwert Lambda-Sonde [-] - - SCALING - U_1N, X_1N 1 Grad - U_2N, X_4N, X_5N, Y_2N 0.05 - U_3N 1.6 Grad KW - X_2N 0.05 bar - X_3N, Y_1N 200 U/min - @end group - @end example - @end deftypefn -@subsection Boeing707 - - @deftypefn {Function File} {@var{sys} =} Boeing707 () - Creates a linearized state-space model of a Boeing 707-321 aircraft - at @var{v}=80 m/s - @iftex - @tex - ($M = 0.26$, $G_{a0} = -3^{circ}$, ${lpha}_0 = 4^{circ}$, ${kappa}= 50^{circ}$). - @end tex - @end iftex - @ifinfo - (@var{M} = 0.26, @var{Ga0} = -3 deg, @var{alpha0} = 4 deg, @var{kappa} = 50 deg). - @end ifinfo - - System inputs: (1) thrust and (2) elevator angle. - - System outputs: (1) airspeed and (2) pitch angle. - - @strong{Reference}: R. Brockhaus: @cite{Flugregelung} (Flight - Control), Springer, 1994. - @end deftypefn +@section Examples @subsection MDSSystem =============================================================================== Robust Control of a Mass-Damper-Spring System Lukas Reichlin August 2011 @@ -76,45 +14,6 @@ Required OCTAVE Packages: control, optim (and its dependencies) Required MATLAB Toolboxes: Control, Optimization =============================================================================== -@subsection WestlandLynx - - @deftypefn{Function File} {@var{sys} =} WestlandLynx () - Model of the Westland Lynx Helicopter about hover. - @example - @group - INPUTS - main rotor collective - longitudinal cyclic - lateral cyclic - tail rotor collective - - STATES - pitch attitude theta [rad] - roll attitude phi [rad] - roll rate (body-axis) p [rad/s] - pitch rate (body-axis) q [rad/s] - yaw rate xi [rad/s] - forward velocity v_x [ft/s] - lateral velocity v_y [ft/s] - vertical velocity v_z [ft/s] - - OUTPUTS - heave velocity H_dot [ft/s] - pitch attitude theta [rad] - roll attitude phi [rad] - heading rate psi_dot [rad/s] - roll rate p [rad/s] - pitch rate q [rad/s] - - Reference: - Skogestad, S. and Postlethwaite I. - Multivariable Feedback Control: Analysis and Design - Second Edition - Wiley 2005 - http://www.nt.ntnu.no/users/skoge/book/2nd_edition/matlab_m/matfiles.html - @end group - @end example - @end deftypefn @section Linear Time Invariant Models @subsection dss @@ -289,10 +188,12 @@ LTI model to be converted to transfer function. @item num Numerator or cell of numerators. Each numerator must be a row vector - containing the exponents of the polynomial in descending order. + containing the coefficients of the polynomial in descending powers of + the transfer function variable. @item den Denominator or cell of denominators. Each denominator must be a row vector - containing the exponents of the polynomial in descending order. + containing the coefficients of the polynomial in descending powers of + the transfer function variable. @item tsam Sampling time in seconds. If @var{tsam} is not specified, a continuous-time model is assumed. @@ -314,25 +215,98 @@ octave:2> G = 1/(s+1) Transfer function "G" from input "u1" to output ... + 1 y1: ----- s + 1 - + + Continuous-time model. octave:3> z = tf ("z", 0.2); octave:4> H = 0.095/(z-0.9) Transfer function "H" from input "u1" to output ... + 0.095 y1: ------- z - 0.9 Sampling time: 0.2 s - octave:5> + Discrete-time model. + octave:5> num = @{[1, 5, 7], [1]; [1, 7], [1, 5, 5]@}; + octave:6> den = @{[1, 5, 6], [1, 2]; [1, 8, 6], [1, 3, 2]@}; + octave:7> sys = tf (num, den) + + Transfer function "sys" from input "u1" to output ... + + s^2 + 5 s + 7 + y1: ------------- + s^2 + 5 s + 6 + + s + 7 + y2: ------------- + s^2 + 8 s + 6 + + Transfer function "sys" from input "u2" to output ... + + 1 + y1: ----- + s + 2 + + s^2 + 5 s + 5 + y2: ------------- + s^2 + 3 s + 2 + + Continuous-time model. + octave:8> @end group @end example @seealso{ss, dss} @end deftypefn +@subsection zpk + + @deftypefn {Function File} {@var{s} =} zpk (@var{"s"}) + @deftypefnx {Function File} {@var{z} =} zpk (@var{"z"}, @var{tsam}) + @deftypefnx {Function File} {@var{sys} =} zpk (@var{sys}) + @deftypefnx {Function File} {@var{sys} =} zpk (@var{k}) + @deftypefnx {Function File} {@var{sys} =} zpk (@var{z}, @var{p}, @var{k}, @dots{}) + @deftypefnx {Function File} {@var{sys} =} zpk @var{z}, @var{p}, @var{k}, @var{tsam}, @dots{}) + @deftypefnx {Function File} {@var{sys} =} zpk (@var{z}, @var{p}, @var{k}, @var{tsam}, @dots{}) + Create transfer function model from zero-pole-gain data. + This is just a stop-gap compatibility wrapper since zpk + models are not yet implemented. + + @strong{Inputs} + @table @var + @item sys + LTI model to be converted to transfer function. + @item z + Cell of vectors containing the zeros for each channel. + z@{i,j@} contains the zeros from input j to output i. + In the SISO case, a single vector is accepted as well. + @item p + Cell of vectors containing the poles for each channel. + p@{i,j@} contains the poles from input j to output i. + In the SISO case, a single vector is accepted as well. + @item k + Matrix containing the gains for each channel. + k(i,j) contains the gain from input j to output i. + @item tsam + Sampling time in seconds. If @var{tsam} is not specified, + a continuous-time model is assumed. + @item @dots{} + Optional pairs of properties and values. + Type @command{set (tf)} for more information. + @end table + + @strong{Outputs} + @table @var + @item sys + Transfer function model. + @end table + + @seealso{tf, ss, dss, frd} + @end deftypefn @section Model Data Access @subsection @@lti/dssdata @@ -443,7 +417,61 @@ @deftypefn {Function File} {[@var{num}, @var{den}, @var{tsam}] =} tfdata (@var{sys}) @deftypefnx {Function File} {[@var{num}, @var{den}, @var{tsam}] =} tfdata (@var{sys}, @var{"tfpoly"}) Access transfer function data. + Argument @var{sys} is not limited to transfer function models. + If @var{sys} is not a transfer function, it is converted automatically. + + @strong{Inputs} + @table @var + @item sys + Any type of LTI model. + @end table + + @strong{Outputs} + @table @var + @item num + Cell of numerator(s). Each numerator is a row vector + containing the coefficients of the polynomial in descending powers of + the transfer function variable. + @item den + Cell of denominator(s). Each denominator is a row vector + containing the coefficients of the polynomial in descending powers of + the transfer function variable. + @item tsam + Sampling time in seconds. If @var{sys} is a continuous-time model, + a zero is returned. + @end table @end deftypefn +@subsection @@lti/zpkdata + + @deftypefn {Function File} {[@var{z}, @var{p}, @var{k}, @var{tsam}] =} zpkdata (@var{sys}) + @deftypefnx {Function File} {[@var{z}, @var{p}, @var{k}, @var{tsam}] =} zpkdata (@var{sys}, @var{"v"}) + Access zero-pole-gain data. + + @strong{Inputs} + @table @var + @item sys + Any type of LTI model. + @item "v", "vector" + For SISO models, return @var{z} and @var{p} directly as column vectors + instead of cells containing a single column vector. + @end table + + @strong{Outputs} + @table @var + @item z + Cell of column vectors containing the zeros for each channel. + z@{i,j@} contains the zeros from input j to output i. + @item p + Cell of column vectors containing the poles for each channel. + p@{i,j@} contains the poles from input j to output i. + @item k + Matrix containing the gains for each channel. + k(i,j) contains the gain from input j to output i. + @item tsam + Sampling time in seconds. If @var{sys} is a continuous-time model, + a zero is returned. + @end table + @end deftypefn @section Model Conversions @subsection @@lti/c2d @@ -2692,3 +2720,104 @@ @deftypefn {Script File} {} test_control Execute all available tests at once. @end deftypefn +@subsection BMWengine + + @deftypefn{Function File} {@var{sys} =} BMWengine () + @deftypefnx{Function File} {@var{sys} =} BMWengine (@var{"scaled"}) + @deftypefnx{Function File} {@var{sys} =} BMWengine (@var{"unscaled"}) + Model of the BMW 4-cylinder engine at ETH Zurich's control laboratory. + @example + @group + OPERATING POINT + Drosselklappenstellung alpha_DK = 10.3 Grad + Saugrohrdruck p_s = 0.48 bar + Motordrehzahl n = 860 U/min + Lambda-Messwert lambda = 1.000 + Relativer Wandfilminhalt nu = 1 + + INPUTS + U_1 Sollsignal Drosselklappenstellung [Grad] + U_2 Relative Einspritzmenge [-] + U_3 Zuendzeitpunkt [Grad KW] + M_L Lastdrehmoment [Nm] + + STATES + X_1 Drosselklappenstellung [Grad] + X_2 Saugrohrdruck [bar] + X_3 Motordrehzahl [U/min] + X_4 Messwert Lamba-Sonde [-] + X_5 Relativer Wandfilminhalt [-] + + OUTPUTS + Y_1 Motordrehzahl [U/min] + Y_2 Messwert Lambda-Sonde [-] + + SCALING + U_1N, X_1N 1 Grad + U_2N, X_4N, X_5N, Y_2N 0.05 + U_3N 1.6 Grad KW + X_2N 0.05 bar + X_3N, Y_1N 200 U/min + @end group + @end example + @end deftypefn +@subsection Boeing707 + + @deftypefn {Function File} {@var{sys} =} Boeing707 () + Creates a linearized state-space model of a Boeing 707-321 aircraft + at @var{v}=80 m/s + @iftex + @tex + ($M = 0.26$, $G_{a0} = -3^{circ}$, ${lpha}_0 = 4^{circ}$, ${kappa}= 50^{circ}$). + @end tex + @end iftex + @ifinfo + (@var{M} = 0.26, @var{Ga0} = -3 deg, @var{alpha0} = 4 deg, @var{kappa} = 50 deg). + @end ifinfo + + System inputs: (1) thrust and (2) elevator angle. + + System outputs: (1) airspeed and (2) pitch angle. + + @strong{Reference}: R. Brockhaus: @cite{Flugregelung} (Flight + Control), Springer, 1994. + @end deftypefn +@subsection WestlandLynx + + @deftypefn{Function File} {@var{sys} =} WestlandLynx () + Model of the Westland Lynx Helicopter about hover. + @example + @group + INPUTS + main rotor collective + longitudinal cyclic + lateral cyclic + tail rotor collective + + STATES + pitch attitude theta [rad] + roll attitude phi [rad] + roll rate (body-axis) p [rad/s] + pitch rate (body-axis) q [rad/s] + yaw rate xi [rad/s] + forward velocity v_x [ft/s] + lateral velocity v_y [ft/s] + vertical velocity v_z [ft/s] + + OUTPUTS + heave velocity H_dot [ft/s] + pitch attitude theta [rad] + roll attitude phi [rad] + heading rate psi_dot [rad/s] + roll rate p [rad/s] + pitch rate q [rad/s] + + Reference: + Skogestad, S. and Postlethwaite I. + Multivariable Feedback Control: Analysis and Design + Second Edition + Wiley 2005 + http://www.nt.ntnu.no/users/skoge/book/2nd_edition/matlab_m/matfiles.html + @end group + @end example + @end deftypefn This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-09-24 03:05:36
|
Revision: 8588 http://octave.svn.sourceforge.net/octave/?rev=8588&view=rev Author: paramaniac Date: 2011-09-24 03:05:30 +0000 (Sat, 24 Sep 2011) Log Message: ----------- control: doc fixes Modified Paths: -------------- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi trunk/octave-forge/main/control/doc/references.txt trunk/octave-forge/main/control/inst/MDSSystem.m trunk/octave-forge/main/control/inst/optiPID.m trunk/octave-forge/main/control/inst/optiPIDfun.m Modified: trunk/octave-forge/main/control/devel/pdfdoc/functions.texi =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-23 20:27:35 UTC (rev 8587) +++ trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-24 03:05:30 UTC (rev 8588) @@ -1,19 +1,10 @@ @section Examples @subsection MDSSystem - =============================================================================== - Robust Control of a Mass-Damper-Spring System Lukas Reichlin August 2011 - =============================================================================== - Reference: Gu, D.W., Petkov, P.Hr. and Konstantinov, M.M. - Robust Control Design with Matlab, Springer 2005 - =============================================================================== + + Robust control of a mass-damper-spring system. @subsection optiPID - =============================================================================== - optiPID Lukas Reichlin July 2009 - =============================================================================== - Numerical Optimization of an A/H PID Controller - Required OCTAVE Packages: control, optim (and its dependencies) - Required MATLAB Toolboxes: Control, Optimization - =============================================================================== + + Numerical optimization of a PID controller using an objective function. @section Linear Time Invariant Models @subsection dss @@ -2656,18 +2647,18 @@ @subsection @@lti/horzcat Horizontal concatenation of LTI objects. If necessary, object conversion - is done by sys_group. Used by Octave for "[lti1, lti2]". + is done by sys_group. Used by Octave for "[sys1, sys2]". @subsection @@lti/inv Inversion of LTI objects. @subsection @@lti/minus Binary subtraction of LTI objects. If necessary, object conversion - is done by sys_group. Used by Octave for "lti1 - lti2". + is done by sys_group. Used by Octave for "sys1 - sys2". @subsection @@lti/mldivide Matrix left division of LTI objects. If necessary, object conversion - is done by sys_group in mtimes. Used by Octave for "lti1 \ lti2". + is done by sys_group in mtimes. Used by Octave for "sys1 \ sys2". @subsection @@lti/mpower Matrix power of LTI objects. The exponent must be an integer. @@ -2675,15 +2666,15 @@ @subsection @@lti/mrdivide Matrix right division of LTI objects. If necessary, object conversion - is done by sys_group in mtimes. Used by Octave for "lti1 / lti2". + is done by sys_group in mtimes. Used by Octave for "sys1 / sys2". @subsection @@lti/mtimes Matrix multiplication of LTI objects. If necessary, object conversion - is done by sys_group. Used by Octave for "lti1 * lti2". + is done by sys_group. Used by Octave for "sys1 * sys2". @subsection @@lti/plus Binary addition of LTI objects. If necessary, object conversion - is done by sys_group. Used by Octave for "lti1 + lti2". + is done by sys_group. Used by Octave for "sys1 + sys2". Operation is also known as "parallel connection". @subsection @@lti/subsasgn @@ -2698,11 +2689,11 @@ Transpose of LTI objects. Used by Octave for "sys.'". @subsection @@lti/uminus - Unary minus of LTI object. Used by Octave for "-lti". + Unary minus of LTI object. Used by Octave for "-sys". @subsection @@lti/vertcat Vertical concatenation of LTI objects. If necessary, object conversion - is done by sys_group. Used by Octave for "[lti1; lti2]". + is done by sys_group. Used by Octave for "[sys1; sys2]". @section Miscellaneous @subsection strseq Modified: trunk/octave-forge/main/control/doc/references.txt =================================================================== --- trunk/octave-forge/main/control/doc/references.txt 2011-09-23 20:27:35 UTC (rev 8587) +++ trunk/octave-forge/main/control/doc/references.txt 2011-09-24 03:05:30 UTC (rev 8588) @@ -41,6 +41,11 @@ Springer 2007 +Gu, D.W., Petkov, P.Hr. and Konstantinov, M.M. +Robust Control with MATLAB +Springer +2005 + Guzzella, L. Analysis and Design of SISO Control Systems VDF Hochschulverlag ETH Zurich Modified: trunk/octave-forge/main/control/inst/MDSSystem.m =================================================================== --- trunk/octave-forge/main/control/inst/MDSSystem.m 2011-09-23 20:27:35 UTC (rev 8587) +++ trunk/octave-forge/main/control/inst/MDSSystem.m 2011-09-24 03:05:30 UTC (rev 8588) @@ -1,3 +1,6 @@ +%% -*- texinfo -*- +%% Robust control of a mass-damper-spring system. + % =============================================================================== % Robust Control of a Mass-Damper-Spring System Lukas Reichlin August 2011 % =============================================================================== Modified: trunk/octave-forge/main/control/inst/optiPID.m =================================================================== --- trunk/octave-forge/main/control/inst/optiPID.m 2011-09-23 20:27:35 UTC (rev 8587) +++ trunk/octave-forge/main/control/inst/optiPID.m 2011-09-24 03:05:30 UTC (rev 8588) @@ -1,3 +1,6 @@ +%% -*- texinfo -*- +%% Numerical optimization of a PID controller using an objective function. + % =============================================================================== % optiPID Lukas Reichlin July 2009 % =============================================================================== @@ -2,2 +5,4 @@ % Numerical Optimization of an A/H PID Controller +% Reference: Guzzella, L. (2007) Analysis and Synthesis of SISO Control Systems. +% vdf Hochschulverlag, Zurich % Required OCTAVE Packages: control, optim (and its dependencies) Modified: trunk/octave-forge/main/control/inst/optiPIDfun.m =================================================================== --- trunk/octave-forge/main/control/inst/optiPIDfun.m 2011-09-23 20:27:35 UTC (rev 8587) +++ trunk/octave-forge/main/control/inst/optiPIDfun.m 2011-09-24 03:05:30 UTC (rev 8588) @@ -3,7 +3,7 @@ % =============================================================================== % Objective Function % Reference: Guzzella, L. (2007) Analysis and Synthesis of SISO Control Systems. -% vdf, Zurich +% vdf Hochschulverlag, Zurich % =============================================================================== function J = optiPIDfun (C_par) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-09-25 13:54:53
|
Revision: 8592 http://octave.svn.sourceforge.net/octave/?rev=8592&view=rev Author: paramaniac Date: 2011-09-25 13:54:46 +0000 (Sun, 25 Sep 2011) Log Message: ----------- control: preparations for a fresh release Modified Paths: -------------- trunk/octave-forge/main/control/devel/RELEASE_PACKAGE trunk/octave-forge/main/control/doc/NEWS Modified: trunk/octave-forge/main/control/devel/RELEASE_PACKAGE =================================================================== --- trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-09-25 11:38:42 UTC (rev 8591) +++ trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-09-25 13:54:46 UTC (rev 8592) @@ -1,10 +1,11 @@ ===================================================================================== -Prepare control-2.0 Package for Release +Prepare control-2.x.y Package for Release ===================================================================================== USAGE: * adapt all paths to your machine * update version number in the commands below * adapt version number and release date in DESCRIPTION * update doc/NEWS + * adapt version number in control.tex * update doc/control.pdf * copy-paste entire block at once to the terminal * follow instructions on <http://octave.sourceforge.net/developers.html> @@ -19,12 +20,12 @@ rm -R ~/octave/__TEMP__/control/devel cd ~/octave/__TEMP__ grep -i version control/DESCRIPTION -tar czf control-2.1.55.tar.gz control/ -md5 control-2.1.55.tar.gz -md5 control-2.1.55.tar.gz > md5_control_pkg.txt -uuencode control-2.1.55.tar.gz < control-2.1.55.tar.gz > control-2.1.55.tar.gz.uue +tar czf control-2.2.0.tar.gz control/ +md5 control-2.2.0.tar.gz +md5 control-2.2.0.tar.gz > md5_control_pkg.txt +uuencode control-2.2.0.tar.gz < control-2.2.0.tar.gz > control-2.2.0.tar.gz.uue octave -q --eval \ -"pkg install control-2.1.55.tar.gz" +"pkg install control-2.2.0.tar.gz" octave -q --eval \ "pkg load generate_html; generate_package_html ('control', 'control-html', 'octave-forge')" tar czf control-html.tar.gz control-html @@ -39,14 +40,7 @@ ===================================================================================== rm -R ~/octave/__TEMP__ -rm -R ~/octave/control-2.1.55 +rm -R ~/octave/control-2.2.0 ===================================================================================== -Clean up after makefile_*.m -===================================================================================== - -rm ~/control/src/*.o - - -===================================================================================== Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-09-25 11:38:42 UTC (rev 8591) +++ trunk/octave-forge/main/control/doc/NEWS 2011-09-25 13:54:46 UTC (rev 8592) @@ -21,11 +21,14 @@ and zeros might be missing. ** zpk, @lti/zpkdata - -- Included wrappers that create transfer function model from zero-pole-gain + -- Included wrappers that create transfer function models from zero-pole-gain data (zpk) and zero-pole-gain data from lti models (zpkdata). They are stop-gap measures for compatibility until ZPK models are implemented. +** doc/control.pdf + -- Revised PDF manual. + =============================================================================== control-2.1.55 Release Date: 2011-09-07 Release Manager: Lukas Reichlin =============================================================================== This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-09-25 18:24:59
|
Revision: 8594 http://octave.svn.sourceforge.net/octave/?rev=8594&view=rev Author: paramaniac Date: 2011-09-25 18:24:50 +0000 (Sun, 25 Sep 2011) Log Message: ----------- control: update PDF manual Modified Paths: -------------- trunk/octave-forge/main/control/devel/PROJECTS trunk/octave-forge/main/control/devel/pdfdoc/usage.txt trunk/octave-forge/main/control/doc/control.pdf Modified: trunk/octave-forge/main/control/devel/PROJECTS =================================================================== --- trunk/octave-forge/main/control/devel/PROJECTS 2011-09-25 14:25:43 UTC (rev 8593) +++ trunk/octave-forge/main/control/devel/PROJECTS 2011-09-25 18:24:50 UTC (rev 8594) @@ -44,8 +44,8 @@ -- Beware of indices not in ascending order. * Fix PDF manual. - -- Clickable links in the table of contents. -- @seealso comments + -- Use TEX for formulas (iftex) * "horzcat" and "vertcat" are trivial operations for TF, FRD and ZPK models. Therefore model-specific commands (@tf/horzcat, @tf/vertcat, @frd/...) Modified: trunk/octave-forge/main/control/devel/pdfdoc/usage.txt =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/usage.txt 2011-09-25 14:25:43 UTC (rev 8593) +++ trunk/octave-forge/main/control/devel/pdfdoc/usage.txt 2011-09-25 18:24:50 UTC (rev 8594) @@ -6,6 +6,10 @@ * Run control.tex +pdftex control.tex +q + + tex control.tex q ??? Modified: trunk/octave-forge/main/control/doc/control.pdf =================================================================== --- trunk/octave-forge/main/control/doc/control.pdf 2011-09-25 14:25:43 UTC (rev 8593) +++ trunk/octave-forge/main/control/doc/control.pdf 2011-09-25 18:24:50 UTC (rev 8594) @@ -1,3323 +1,2718 @@ -%PDF-1.3 -%\xC7쏢 -5 0 obj -<</Length 6 0 R/Filter /FlateDecode>> +%PDF-1.5 +%\xD0\xD4\xC5\xD8 +1 0 obj << +/Length 587 +/Filter /FlateDecode +>> stream -x\x9C\x95SKo1\xE6\x9C_\x91cro\x9C8\x89s\xDDR\xCA"\xDDvġZ\xB6\xA2\xDAG\x91\xF8\xF7\xD83\xFB\xE8\xA1\xD0h&\x96\xFD\xF9\xF1}\xF1ll |
From: <par...@us...> - 2011-09-25 20:37:01
|
Revision: 8596 http://octave.svn.sourceforge.net/octave/?rev=8596&view=rev Author: paramaniac Date: 2011-09-25 20:36:52 +0000 (Sun, 25 Sep 2011) Log Message: ----------- control: minor doc enhancements Modified Paths: -------------- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi trunk/octave-forge/main/control/doc/control.pdf trunk/octave-forge/main/control/inst/MDSSystem.m trunk/octave-forge/main/control/inst/optiPID.m Modified: trunk/octave-forge/main/control/devel/pdfdoc/functions.texi =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-25 20:06:17 UTC (rev 8595) +++ trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-25 20:36:52 UTC (rev 8596) @@ -2,9 +2,15 @@ @section MDSSystem Robust control of a mass-damper-spring system. + Type @code{which MDSSystem} to locate, + @code{edit MDSSystem} to open and simply + @code{MDSSystem} to run the example file. @section optiPID Numerical optimization of a PID controller using an objective function. + The objective function is located in the file @command{optiPIDfun}. + Type @code{which optiPID} to locate, @code{edit optiPID} to open + and simply @code{optiPID} to run the example file. @chapter Linear Time Invariant Models @section dss Modified: trunk/octave-forge/main/control/doc/control.pdf =================================================================== --- trunk/octave-forge/main/control/doc/control.pdf 2011-09-25 20:06:17 UTC (rev 8595) +++ trunk/octave-forge/main/control/doc/control.pdf 2011-09-25 20:36:52 UTC (rev 8596) @@ -200,48 +200,52 @@ endstream endobj 518 0 obj << -/Length 356 +/Length 644 /Filter /FlateDecode >> stream -xڍ\x92\xC1O\x830\xC6\xEF\xFC=\xB6\x87V^KW\xF0\xA8\x9BF\xCD2\xB9\x8C\xB1\x89\x81A(\xE7_\xEF\xEB -fF\x97<\xDF\xF7\xBD\xDFk -$\xC4\x88\x91\xC4\xC4J\xC4ʐ\xBC\xC2c\xB7\xDB_\xACnu\x85\xFCDy\x957ZE&@\xD2\xEDiT\xBA!\xCF\xF4\xFA5k\xFB\xA2c\)E\xE1\x92\xF1(\xD2t\xF1\x91\xD5mUX삉\xF6\x92\xDE\x8B\xF4{\x90\x96Z\xE8H\xFD\x93jR\xFFB3\x88f\x84Mhr&B\xF7\xE5Ѐq=SÀ\x8E<\x88\xE1]\x91P\xD1L:WH\xB8JD\xACG\x8F8\xBA$}`\xE8\x9DOOWZ,\xFB\xC2U\xB5O\xF9y,\x98"A$\xFB\x98U\xB3l\xEF%o\xF6L\xDAw\x98\xD0T\xAE\xD1f\xEB\xFFe\xFEUgֺh\xBEAN\xC6Q]tܶ]\xB9\xDFy\xBD=ؾ\xA8\xC5~iD\x9C̦\xA4_\xA0i\xFBr\xE9B\xEF\xE6g\x80! G\xE0ǡ.\xBA2\xCF*\xE4\xCCu\xF9\x99\xF5%\xC2\xFFE\xBC\xC4T\xBF\x9D\xE16\x8Cqæ\xAA\xA6\xAB0\xD8-S\xC4\xC94}+\xF2\xBE|w\x86\xC2\xF7\xB7\xC3>?*\xA6\x8B\xF2ב\xA7\xB4 +xڝUKo\xD3@\xBE\xE7W\xF8\xB8\x96\xF0\xE2\xD9\xF7r\x84R\xA2\xB9\xD7\xD94F\xB1\xD9~=\xB3\x8F\x84\xB4\xB8-\xAAr\xD8\xD9\xF1<\xBEy|\xC8J\xFCA\xA6Y\xA6 +\xA7\x86\xEB\xACne\xD0\xB7Y>\xBF[@\xB2+а8\xB3|\xBD\\xBC|+e%\xB5\xA5\x85l\xB9>\xB5\e_țM\xB5\x9Bܐ\x9Cs\xAF\xF2BI.U\xEDn\xEBFԂ\x9A@\xFEm\xF9aq\xB9<%\x92LR)\xF8\xA2:Z\xFFM#4MHq\x84\xC6-\xFD\xCDC\x83\xBC\x90\x8A#\x98H0\xA2\x97\xA0\(\xE6\xBDʬ\xE0\x96\x99|h\xF0b\xE4*/\x80\\xA0\xE7\xF5\xF5\xC1\x8B#\x8A\x93\xF3R\xA3\xDCmFa@-\x98\xE6s\xB3'I\x91\xBA\xEFrf\xC84\xF4ۨ\xE8\xD7\xFE\x94\xA4\x8A\xC7b\x85 |
From: <par...@us...> - 2011-09-25 21:28:26
|
Revision: 8598 http://octave.svn.sourceforge.net/octave/?rev=8598&view=rev Author: paramaniac Date: 2011-09-25 21:28:18 +0000 (Sun, 25 Sep 2011) Log Message: ----------- control: doc improvements Modified Paths: -------------- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi trunk/octave-forge/main/control/doc/control.pdf trunk/octave-forge/main/control/inst/@frd/frd.m trunk/octave-forge/main/control/inst/@lti/frdata.m trunk/octave-forge/main/control/inst/@lti/tfdata.m trunk/octave-forge/main/control/inst/@tf/tf.m trunk/octave-forge/main/control/inst/__frd_dim__.m Modified: trunk/octave-forge/main/control/devel/pdfdoc/functions.texi =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-25 20:41:07 UTC (rev 8597) +++ trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-25 21:28:18 UTC (rev 8598) @@ -74,10 +74,12 @@ If second argument @var{w} is omitted, the interesting frequency range is calculated by the zeros and poles of @var{sys}. @item H - Frequency response array (p-by-m-by-lw). In the SISO case, + Frequency response array (p-by-m-by-lw). H(i,j,k) contains the + response from input j to output i at frequency k. In the SISO case, a vector (lw-by-1) or (1-by-lw) is accepted as well. @item w Frequency vector (lw-by-1) in radian per second [rad/s]. + Frequencies must be in ascending order. @item tsam Sampling time in seconds. If @var{tsam} is not specified, a continuous-time model is assumed. @@ -187,10 +189,14 @@ Numerator or cell of numerators. Each numerator must be a row vector containing the coefficients of the polynomial in descending powers of the transfer function variable. + num@{i,j@} contains the numerator polynomial from input j to output i. + In the SISO case, a single vector is accepted as well. @item den Denominator or cell of denominators. Each denominator must be a row vector containing the coefficients of the polynomial in descending powers of the transfer function variable. + den@{i,j@} contains the denominator polynomial from input j to output i. + In the SISO case, a single vector is accepted as well. @item tsam Sampling time in seconds. If @var{tsam} is not specified, a continuous-time model is assumed. @@ -275,8 +281,8 @@ @deftypefnx {Function File} {@var{sys} =} zpk (@var{sys}) @deftypefnx {Function File} {@var{sys} =} zpk (@var{k}) @deftypefnx {Function File} {@var{sys} =} zpk (@var{z}, @var{p}, @var{k}, @dots{}) - @deftypefnx {Function File} {@var{sys} =} zpk @var{z}, @var{p}, @var{k}, @var{tsam}, @dots{}) @deftypefnx {Function File} {@var{sys} =} zpk (@var{z}, @var{p}, @var{k}, @var{tsam}, @dots{}) + @deftypefnx {Function File} {@var{sys} =} zpk (@var{z}, @var{p}, @var{k}, @var{tsam}, @dots{}) Create transfer function model from zero-pole-gain data. This is just a stop-gap compatibility wrapper since zpk models are not yet implemented. @@ -368,10 +374,12 @@ @strong{Outputs} @table @var @item H - Frequency response array (p-by-m-by-lw). In the SISO case, + Frequency response array (p-by-m-by-lw). H(i,j,k) contains the + response from input j to output i at frequency k. In the SISO case, a vector (lw-by-1) is possible as well. @item w Frequency vector (lw-by-1) in radian per second [rad/s]. + Frequencies are in ascending order. @item tsam Sampling time in seconds. If @var{sys} is a continuous-time model, a zero is returned. @@ -420,6 +428,7 @@ @section @@lti/tfdata @deftypefn {Function File} {[@var{num}, @var{den}, @var{tsam}] =} tfdata (@var{sys}) + @deftypefnx {Function File} {[@var{num}, @var{den}, @var{tsam}] =} tfdata (@var{sys}, @var{"vector"}) @deftypefnx {Function File} {[@var{num}, @var{den}, @var{tsam}] =} tfdata (@var{sys}, @var{"tfpoly"}) Access transfer function data. Argument @var{sys} is not limited to transfer function models. @@ -429,6 +438,9 @@ @table @var @item sys Any type of LTI model. + @item "v", "vector" + For SISO models, return @var{num} and @var{den} directly as column vectors + instead of cells containing a single column vector. @end table @strong{Outputs} @@ -437,10 +449,14 @@ Cell of numerator(s). Each numerator is a row vector containing the coefficients of the polynomial in descending powers of the transfer function variable. + num@{i,j@} contains the numerator polynomial from input j to output i. + In the SISO case, a single vector is possible as well. @item den Cell of denominator(s). Each denominator is a row vector containing the coefficients of the polynomial in descending powers of the transfer function variable. + den@{i,j@} contains the denominator polynomial from input j to output i. + In the SISO case, a single vector is possible as well. @item tsam Sampling time in seconds. If @var{sys} is a continuous-time model, a zero is returned. Modified: trunk/octave-forge/main/control/doc/control.pdf =================================================================== --- trunk/octave-forge/main/control/doc/control.pdf 2011-09-25 20:41:07 UTC (rev 8597) +++ trunk/octave-forge/main/control/doc/control.pdf 2011-09-25 21:28:18 UTC (rev 8598) @@ -63,23 +63,20 @@ /Filter /FlateDecode >> stream -x\xDA\xED\x9DMo\xB7\x86\xF7\xF9Z\xDA\xB1\xC3o\xCE]\xDDۦ-R\xB4@\xD1zW܅"\x8D!\x92-Hj\xD0\xF6חҐ\xC3\xC3\xF1\xF0\x84fb\xC0\x89\x88 |
From: <par...@us...> - 2011-09-26 10:46:47
|
Revision: 8602 http://octave.svn.sourceforge.net/octave/?rev=8602&view=rev Author: paramaniac Date: 2011-09-26 10:46:40 +0000 (Mon, 26 Sep 2011) Log Message: ----------- control: prepare release of control-2.2.0 Modified Paths: -------------- trunk/octave-forge/main/control/DESCRIPTION trunk/octave-forge/main/control/devel/pdfdoc/functions.texi trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/doc/control.pdf trunk/octave-forge/main/control/inst/@lti/mpower.m Modified: trunk/octave-forge/main/control/DESCRIPTION =================================================================== --- trunk/octave-forge/main/control/DESCRIPTION 2011-09-26 01:14:46 UTC (rev 8601) +++ trunk/octave-forge/main/control/DESCRIPTION 2011-09-26 10:46:40 UTC (rev 8602) @@ -1,6 +1,6 @@ Name: Control -Version: 2.1.55 -Date: 2011-09-07 +Version: 2.2.0 +Date: 2011-09-26 Author: Lukas Reichlin <luk...@gm...> Maintainer: Lukas Reichlin <luk...@gm...> Title: Control Systems Modified: trunk/octave-forge/main/control/devel/pdfdoc/functions.texi =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-26 01:14:46 UTC (rev 8601) +++ trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-26 10:46:40 UTC (rev 8602) @@ -2747,7 +2747,7 @@ @section @@lti/mpower Matrix power of LTI objects. The exponent must be an integer. - Used by Octave for "lti^int". + Used by Octave for "sys^int". @section @@lti/mrdivide Matrix right division of LTI objects. If necessary, object conversion Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-09-26 01:14:46 UTC (rev 8601) +++ trunk/octave-forge/main/control/doc/NEWS 2011-09-26 10:46:40 UTC (rev 8602) @@ -1,7 +1,7 @@ Summary of important user-visible changes for releases of the control package =============================================================================== -control-2.2.0 Release Date: 2011-xx-yy Release Manager: Lukas Reichlin +control-2.2.0 Release Date: 2011-09-26 Release Manager: Lukas Reichlin =============================================================================== ** ss @@ -25,6 +25,11 @@ data (zpk) and zero-pole-gain data from lti models (zpkdata). They are stop-gap measures for compatibility until ZPK models are implemented. +** @lti/tfdata + -- "vector" option added. For SISO models, it returns numerator and + denominator directly as column vectors instead of cells containing a + single column vector. + ** doc/control.pdf -- Revised PDF manual. Modified: trunk/octave-forge/main/control/doc/control.pdf =================================================================== --- trunk/octave-forge/main/control/doc/control.pdf 2011-09-26 01:14:46 UTC (rev 8601) +++ trunk/octave-forge/main/control/doc/control.pdf 2011-09-26 10:46:40 UTC (rev 8602) @@ -1056,25 +1056,22 @@ endstream endobj 704 0 obj << -/Length 1596 +/Length 1591 /Filter /FlateDecode >> stream -x\xDA\xCDXm\x8F\x9BF\xFE~\xBF\xF5Kqo\xF6\x95]"E\xAAR\xF5\xE5\xA2VQ\xF7\xD3\xE5*\x9B\xBB#\xE5\xC0\xEE\xF2\xF2\xEB;\xB3\xBB`\x8Cq\xB1\xD4V\xFE\xC0z\x86ٝg\x9E\x99\x81~,\xD0<\xD0F#t\xB0\xBE\xBF\xA0VZ\xDDn\xF1\xFBO\xCC\xEB-Aq\xD9\xD3|\xB1\xBAx\xFA\xA3R\xA3$\xA61V7}S\xABMp~\x97l\x9B\xB4Z,\x85!\x93\xCFK)U\xF8\xEAq\xC1M\x98Vy\x99lҍ\xBB\xF9j\xBBXZaҔU -k%\xA8 \xA5Y\\xAF^^\xFC\xB0\xEA\x9CP\%\xC5D\x8F[\xED\xB75\xB8\xAD gJ\xB6n\xF3\x88P\xFC\x87n3\xB9X\xAAH\xA0\xA3\x82\xF7\xD5\xCA:*X\xE7(\xB8\xE7\xACI"d\xC4\xD1 -\x96\x92\xCDTk\x8C04\xC7\xC3\xEF\xF2&{zWV\x9F\xD6I\xE3\xDC?=x\x9033\xE3\xFC\xB9\xAC\xB2Oe\x81g\xD5$9\xBE\x9D\x87벀\x87\xD3"i2\xB8"\x967\xEE\xFA\xCBpu\xE9\xF4ʷ\xF0J\xBEK\xD7MMp\x87\x97^\xAFH\xD7i]'\xD5G\xD42Üz\xBE[\xC0\xC6K\xAE\xA7\xBBv\xAF\xF7\xF1\xAA\xFD;y\x98\xD5\xEE\xFE\xA6,R'y\x8B*\x9D\xB4\xFEX\xB7a\x{3ECB14C}aZQ\xC4H\xA4"\x8C\xC4\xD55 -6p\xF3e@\x89\xD4\xC1{\xABy\xC2A\x8Fy\xF0\xFA\xE2\xB71\x94\xC9XA\xE8\xAC% W{X\xB7U\xF9\xB0%\xF8Z<}\x81\xF7\x97L\x91\xD8G\xF4\x8F\xBA8\xAA\xAD\xA3\xBAu\x93\xEC\xF6\x872ޔ\x95\x8FM\xD4g\x8C@\x8A\xC0+k\xF0)\xA2\xB9n5\xAE\xE0\xD8\xF7X\xF2\xEB1\xA3\x8A\x89\x93FM\xABA\xC6\xE0ی\xC1\x8C\xF0Ą\xF1\xF7P\x97 |
From: <par...@us...> - 2011-09-28 06:29:25
|
Revision: 8627 http://octave.svn.sourceforge.net/octave/?rev=8627&view=rev Author: paramaniac Date: 2011-09-28 06:29:18 +0000 (Wed, 28 Sep 2011) Log Message: ----------- control: handle iwarn inside oct-files, use struct for additional information in place.m Modified Paths: -------------- trunk/octave-forge/main/control/devel/tf2ss/tf2ss.m trunk/octave-forge/main/control/inst/@lti/norm.m trunk/octave-forge/main/control/inst/place.m trunk/octave-forge/main/control/src/slab13bd.cc trunk/octave-forge/main/control/src/slsb01bd.cc Modified: trunk/octave-forge/main/control/devel/tf2ss/tf2ss.m =================================================================== --- trunk/octave-forge/main/control/devel/tf2ss/tf2ss.m 2011-09-27 17:26:08 UTC (rev 8626) +++ trunk/octave-forge/main/control/devel/tf2ss/tf2ss.m 2011-09-28 06:29:18 UTC (rev 8627) @@ -55,6 +55,7 @@ endfor endfor index, prod (index), eps*prod (index) +min (sqrt (eps), eps*prod (index)) [a, b, c, d] = sltd04ad (ucoeff, dcoeff, index, tol); retsys = ss (a, b, c, d); Modified: trunk/octave-forge/main/control/inst/@lti/norm.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/norm.m 2011-09-27 17:26:08 UTC (rev 8626) +++ trunk/octave-forge/main/control/inst/@lti/norm.m 2011-09-28 06:29:18 UTC (rev 8627) @@ -26,7 +26,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: November 2009 -## Version: 0.4 +## Version: 0.4.1 function [gain, varargout] = norm (sys, ntype = "2", tol = 0.01) @@ -67,15 +67,10 @@ if (isstable (sys)) [a, b, c, d] = ssdata (sys); discrete = ! isct (sys); - if (! discrete && any (d(:))) # continuous and non-zero feedthrough gain = inf; else - [gain, iwarn] = slab13bd (a, b, c, d, discrete); - - if (iwarn) - warning ("lti: norm: slab13bd: iwarn = %d", iwarn); - endif + gain = slab13bd (a, b, c, d, discrete); endif else gain = inf; Modified: trunk/octave-forge/main/control/inst/place.m =================================================================== --- trunk/octave-forge/main/control/inst/place.m 2011-09-27 17:26:08 UTC (rev 8626) +++ trunk/octave-forge/main/control/inst/place.m 2011-09-28 06:29:18 UTC (rev 8627) @@ -1,4 +1,4 @@ -## Copyright (C) 2009, 2010 Lukas F. Reichlin +## Copyright (C) 2009, 2010, 2011 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -18,8 +18,8 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {@var{f} =} place (@var{sys}, @var{p}) ## @deftypefnx {Function File} {@var{f} =} place (@var{a}, @var{b}, @var{p}) -## @deftypefnx {Function File} {[@var{f}, @var{nfp}, @var{nap}, @var{nup}] =} place (@var{sys}, @var{p}, @var{alpha}) -## @deftypefnx {Function File} {[@var{f}, @var{nfp}, @var{nap}, @var{nup}] =} place (@var{a}, @var{b}, @var{p}, @var{alpha}) +## @deftypefnx {Function File} {[@var{f}, @var{info}] =} place (@var{sys}, @var{p}, @var{alpha}) +## @deftypefnx {Function File} {[@var{f}, @var{info}] =} place (@var{a}, @var{b}, @var{p}, @var{alpha}) ## Pole assignment for a given matrix pair (@var{A},@var{B}) such that @code{p = eig (A-B*F)}. ## If parameter @var{alpha} is specified, poles with real parts (continuous-time) ## or moduli (discrete-time) below @var{alpha} are left untouched. @@ -48,13 +48,15 @@ ## @table @var ## @item f ## State feedback gain matrix. -## @item nfp +## @item info +## Structure containing additional information. +## @item info.nfp ## The number of fixed poles, i.e. eigenvalues of @var{A} having ## real parts less than @var{alpha}, or moduli less than @var{alpha}. ## These eigenvalues are not modified by @command{place}. -## @item nap +## @item info.nap ## The number of assigned eigenvalues. @code{nap = n-nfp-nup}. -## @item nup +## @item info.nup ## The number of uncontrollable eigenvalues detected by the ## eigenvalue assignment algorithm. ## @end table @@ -72,9 +74,9 @@ ## Special thanks to Peter Benner from TU Chemnitz for his advice. ## Author: Lukas Reichlin <luk...@gm...> ## Created: December 2009 -## Version: 0.3.1 +## Version: 0.4 -function [f, nfp, nap, nup] = place (a, b, p = [], alpha = [], tol = []) +function [f, info] = place (a, b, p = [], alpha = [], tol = []) if (nargin < 2 || nargin > 5) print_usage (); @@ -128,14 +130,11 @@ tol = 0; endif - [f, iwarn, nfp, nap, nup] = slsb01bd (a, b, wr, wi, discrete, alpha, tol); + [f, nfp, nap, nup] = slsb01bd (a, b, wr, wi, discrete, alpha, tol); f = -f; # A + B*F --> A - B*F - - if (iwarn) - warning ("place: %d violations of the numerical stability condition NORM(F) <= 100*NORM(A)/NORM(B)", - iwarn); - endif + info = struct ("nfp", nfp, "nap", nap, "nup", nup); + endfunction Modified: trunk/octave-forge/main/control/src/slab13bd.cc =================================================================== --- trunk/octave-forge/main/control/src/slab13bd.cc 2011-09-27 17:26:08 UTC (rev 8626) +++ trunk/octave-forge/main/control/src/slab13bd.cc 2011-09-28 06:29:18 UTC (rev 8627) @@ -1,6 +1,6 @@ /* -Copyright (C) 2009, 2010 Lukas F. Reichlin +Copyright (C) 2009, 2010, 2011 Lukas F. Reichlin This file is part of LTI Syncope. @@ -23,7 +23,7 @@ Author: Lukas Reichlin <luk...@gm...> Created: November 2009 -Version: 0.3 +Version: 0.4 */ @@ -123,10 +123,12 @@ if (info != 0) error ("lti: norm: slab13bd: AB13BD returned info = %d", info); + + if (iwarn != 0) + warning ("lti: norm: slab13bd: AB13BD returned iwarn = %d", iwarn); // return value retval(0) = octave_value (norm); - retval(1) = octave_value (iwarn); } return retval; Modified: trunk/octave-forge/main/control/src/slsb01bd.cc =================================================================== --- trunk/octave-forge/main/control/src/slsb01bd.cc 2011-09-27 17:26:08 UTC (rev 8626) +++ trunk/octave-forge/main/control/src/slsb01bd.cc 2011-09-28 06:29:18 UTC (rev 8627) @@ -127,13 +127,15 @@ if (info != 0) error ("place: slsb01bd: SB01BD returned info = %d", info); - + + if (iwarn != 0) + warning ("place: slsb01bd: %d violations of the numerical stability condition NORM(F) <= 100*NORM(A)/NORM(B)", iwarn); + // return values retval(0) = f; - retval(1) = octave_value (iwarn); - retval(2) = octave_value (nfp); - retval(3) = octave_value (nap); - retval(4) = octave_value (nup); + retval(1) = octave_value (nfp); + retval(2) = octave_value (nap); + retval(3) = octave_value (nup); } return retval; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-09-25 20:06:26
|
Revision: 8595 http://octave.svn.sourceforge.net/octave/?rev=8595&view=rev Author: paramaniac Date: 2011-09-25 20:06:17 +0000 (Sun, 25 Sep 2011) Log Message: ----------- control: use smaller blocks in texinfo groups Modified Paths: -------------- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi trunk/octave-forge/main/control/doc/control.pdf trunk/octave-forge/main/control/inst/@lti/lft.m trunk/octave-forge/main/control/inst/@lti/prescale.m trunk/octave-forge/main/control/inst/@lti/series.m trunk/octave-forge/main/control/inst/@tf/tf.m trunk/octave-forge/main/control/inst/BMWengine.m trunk/octave-forge/main/control/inst/WestlandLynx.m trunk/octave-forge/main/control/inst/augw.m trunk/octave-forge/main/control/inst/care.m trunk/octave-forge/main/control/inst/dare.m trunk/octave-forge/main/control/inst/margin.m trunk/octave-forge/main/control/inst/mixsyn.m Modified: trunk/octave-forge/main/control/devel/pdfdoc/functions.texi =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-25 18:24:50 UTC (rev 8594) +++ trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-09-25 20:06:17 UTC (rev 8595) @@ -212,6 +212,10 @@ s + 1 Continuous-time model. + @end group + @end example + @example + @group octave:3> z = tf ("z", 0.2); octave:4> H = 0.095/(z-0.9) @@ -223,6 +227,10 @@ Sampling time: 0.2 s Discrete-time model. + @end group + @end example + @example + @group octave:5> num = @{[1, 5, 7], [1]; [1, 7], [1, 5, 5]@}; octave:6> den = @{[1, 5, 6], [1, 2]; [1, 8, 6], [1, 3, 2]@}; octave:7> sys = tf (num, den) @@ -556,11 +564,11 @@ @strong{Equations} @example @group - Es = Tl E Tr - As = Tl A Tr - Bs = Tl B - Cs = C Tr - Ds = D + Es = Tl * E * Tr + As = Tl * A * Tr + Bs = Tl * B + Cs = C * Tr + Ds = D For proper state-space models, Tl and Tr are inverse of each other. @end group @@ -677,8 +685,10 @@ : +-----| sys2 |<----+ : : +--------+ : :............................: - - + @end group + @end example + @example + @group .............sys.............. : +--------+ : : u +---->| sys1 |-----+ y : @@ -690,8 +700,10 @@ z2 <------------| |<------------ w2 : +--------+ : :............................: - - + @end group + @end example + @example + @group .............sys.............. : +--------+ : w1 ------------>| |------------> z1 @@ -790,8 +802,10 @@ :................sys................. sys = series (sys1, sys2) - - + @end group + @end example + @example + @group ..................................... : v2 +--------+ : : ---------->| | : y @@ -1639,7 +1653,10 @@ imag (num(jw) den(-jw)) = 0 imag (num(-jw) den(jw)) = 0 - + @end group + @end example + @example + @group Phase Margin |num(jw)| |L(jw)| = |-------| = 1 @@ -1654,8 +1671,10 @@ num(jw) num(-jw) - den(jw) den(-jw) = 0 real (num(jw) num(-jw) - den(jw) den(-jw)) = 0 - - + @end group + @end example + @example + @group DISCRETE SYSTEMS Gain Margin jwT log z @@ -1666,7 +1685,10 @@ den(z) den(1/z) num(z) den(1/z) - num(1/z) den(z) = 0 - + @end group + @end example + @example + @group Phase Margin |num(z)| |L(z)| = |------| = 1 @@ -1679,7 +1701,10 @@ den(z) den(1/z) num(z) num(1/z) - den(z) den(1/z) = 0 - + @end group + @end example + @example + @group PS: How to get L(1/z) 4 3 2 p(z) = a z + b z + c z + d z + e @@ -2109,6 +2134,10 @@ P = | 0 | W3*G | z3 = W3 G u |----+-------| | I | -G | e = r - G u + @end group + @end example + @example + @group +------+ z1 +---------------------------------------->| W1 |-----> | +------+ @@ -2120,14 +2149,20 @@ ^ - +--------+ +--------+ | +------+ | | +----------------------------------------+ - + @end group + @end example + @example + @group +--------+ | |-----> z1 (p1x1) z1 = W1 e r (px1) ----->| P(s) |-----> z2 (p2x1) z2 = W2 u | |-----> z3 (p3x1) z3 = W3 y u (mx1) ----->| |-----> e (px1) e = r - y +--------+ - + @end group + @end example + @example + @group +--------+ r ----->| |-----> z | P(s) | @@ -2137,7 +2172,10 @@ | +--------+ | +-----| K(s) |<----+ +--------+ - + @end group + @end example + @example + @group Reference: Skogestad, S. and Postlethwaite I. Multivariable Feedback Control: Analysis and Design @@ -2309,6 +2347,10 @@ | W1 S | gamma = min||N(K)|| N = | W2 K S | = lft (P, K) K inf | W3 T | + @end group + @end example + @example + @group +------+ z1 +---------------------------------------->| W1 |-----> | +------+ @@ -2320,14 +2362,20 @@ ^ - +--------+ +--------+ | +------+ | | +----------------------------------------+ - + @end group + @end example + @example + @group +--------+ | |-----> z1 (p1x1) z1 = W1 e r (px1) ----->| P(s) |-----> z2 (p2x1) z2 = W2 u | |-----> z3 (p3x1) z3 = W3 y u (mx1) ----->| |-----> e (px1) e = r - y +--------+ - + @end group + @end example + @example + @group +--------+ r ----->| |-----> z | P(s) | @@ -2337,17 +2385,26 @@ | +--------+ | +-----| K(s) |<----+ +--------+ - + @end group + @end example + @example + @group +--------+ r ----->| N(s) |-----> z +--------+ - + @end group + @end example + @example + @group Extended Plant: P = augw (G, W1, W2, W3) Controller: K = mixsyn (G, W1, W2, W3) Entire System: N = lft (P, K) Open Loop: L = G * K Closed Loop: T = feedback (L) - + @end group + @end example + @example + @group Reference: Skogestad, S. and Postlethwaite I. Multivariable Feedback Control: Analysis and Design @@ -2473,7 +2530,10 @@ G = R (B'X + S') L = eig (A - B*G) - + @end group + @end example + @example + @group -1 A'XE + E'XA - E'XB R B'XE + Q = 0 @@ -2543,7 +2603,10 @@ G = (B'XB + R) (B'XA + S') L = eig (A - B*G) - + @end group + @end example + @example + @group -1 A'XA - E'XE - A'XB (B'XB + R) B'XA + Q = 0 @@ -2725,24 +2788,36 @@ Motordrehzahl n = 860 U/min Lambda-Messwert lambda = 1.000 Relativer Wandfilminhalt nu = 1 - + @end group + @end example + @example + @group INPUTS U_1 Sollsignal Drosselklappenstellung [Grad] U_2 Relative Einspritzmenge [-] U_3 Zuendzeitpunkt [Grad KW] M_L Lastdrehmoment [Nm] - + @end group + @end example + @example + @group STATES X_1 Drosselklappenstellung [Grad] X_2 Saugrohrdruck [bar] X_3 Motordrehzahl [U/min] X_4 Messwert Lamba-Sonde [-] X_5 Relativer Wandfilminhalt [-] - + @end group + @end example + @example + @group OUTPUTS Y_1 Motordrehzahl [U/min] Y_2 Messwert Lambda-Sonde [-] - + @end group + @end example + @example + @group SCALING U_1N, X_1N 1 Grad U_2N, X_4N, X_5N, Y_2N 0.05 @@ -2784,7 +2859,10 @@ longitudinal cyclic lateral cyclic tail rotor collective - + @end group + @end example + @example + @group STATES pitch attitude theta [rad] roll attitude phi [rad] @@ -2794,7 +2872,10 @@ forward velocity v_x [ft/s] lateral velocity v_y [ft/s] vertical velocity v_z [ft/s] - + @end group + @end example + @example + @group OUTPUTS heave velocity H_dot [ft/s] pitch attitude theta [rad] @@ -2802,7 +2883,10 @@ heading rate psi_dot [rad/s] roll rate p [rad/s] pitch rate q [rad/s] - + @end group + @end example + @example + @group Reference: Skogestad, S. and Postlethwaite I. Multivariable Feedback Control: Analysis and Design Modified: trunk/octave-forge/main/control/doc/control.pdf =================================================================== --- trunk/octave-forge/main/control/doc/control.pdf 2011-09-25 18:24:50 UTC (rev 8594) +++ trunk/octave-forge/main/control/doc/control.pdf 2011-09-25 20:06:17 UTC (rev 8595) @@ -63,66 +63,49 @@ /Filter /FlateDecode >> stream -x\xDA\xED\x9DMo\xB7\x86\xF7\xF9Z\xDA\xB1\xC3o\xCE]\xDDۦ-R\xB4@\xD1zW܅"\x8D!\x92-Hj\xD0\xF6חҐ\xC3\xC3\xF1\xF0\x84fb\xC0\x89\x88 |
From: <par...@us...> - 2011-10-05 19:03:19
|
Revision: 8681 http://octave.svn.sourceforge.net/octave/?rev=8681&view=rev Author: paramaniac Date: 2011-10-05 19:03:12 +0000 (Wed, 05 Oct 2011) Log Message: ----------- control: update news Modified Paths: -------------- trunk/octave-forge/main/control/devel/test_dss_bilin.m trunk/octave-forge/main/control/doc/NEWS Modified: trunk/octave-forge/main/control/devel/test_dss_bilin.m =================================================================== --- trunk/octave-forge/main/control/devel/test_dss_bilin.m 2011-10-05 18:38:21 UTC (rev 8680) +++ trunk/octave-forge/main/control/devel/test_dss_bilin.m 2011-10-05 19:03:12 UTC (rev 8681) @@ -1,5 +1,8 @@ sys = inv (Boeing707); -d = c2d (sys, 0.2, "bilin") +d = c2d (sys, 2, "bilin") c = d2c (d, "bilin") + +d.e+d.a +rcond (d.e + d.a) Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-10-05 18:38:21 UTC (rev 8680) +++ trunk/octave-forge/main/control/doc/NEWS 2011-10-05 19:03:12 UTC (rev 8681) @@ -8,7 +8,10 @@ -- Return the number of fixed, assigned and uncontrollable poles in a single "info" struct instead of three individual output arguments. +** @lti/inv + -- Support the inversion of 2x2 MIMO transfer functions. + =============================================================================== control-2.2.0 Release Date: 2011-09-26 Release Manager: Lukas Reichlin =============================================================================== This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-10-08 09:42:42
|
Revision: 8712 http://octave.svn.sourceforge.net/octave/?rev=8712&view=rev Author: paramaniac Date: 2011-10-08 09:42:36 +0000 (Sat, 08 Oct 2011) Log Message: ----------- control: modify example, add draft code Modified Paths: -------------- trunk/octave-forge/main/control/inst/MDSSystem.m Added Paths: ----------- trunk/octave-forge/main/control/devel/transform.m Added: trunk/octave-forge/main/control/devel/transform.m =================================================================== --- trunk/octave-forge/main/control/devel/transform.m (rev 0) +++ trunk/octave-forge/main/control/devel/transform.m 2011-10-08 09:42:36 UTC (rev 8712) @@ -0,0 +1,123 @@ +## Copyright (C) 2011 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope 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 3 of the License, or +## (at your option) any later version. +## +## LTI Syncope 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 LTI Syncope. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{sys} =} transform (@var{sys}, @var{Tx}) +## @deftypefnx {Function File} {@var{sys} =} transform (@var{sys}, @var{Tx}, @var{Tu}, @var{Ty}) +## @deftypefnx {Function File} {@var{sys} =} transform (@var{sys}, @var{Tl}, @var{Tr}) +## @deftypefnx {Function File} {@var{sys} =} transform (@var{sys}, @var{Tl}, @var{Tr}, @var{Tu}, @var{Ty}) +## Transform state-space model. +## +## @strong{Inputs} +## @table @var +## @item sys +## LTI model. +## @end table +## +## @strong{Outputs} +## @table @var +## @item scaledsys +## Scaled state-space model. +## @item info +## Structure containing additional information. +## @item info.SL +## Left scaling factors. @code{Tl = diag (info.SL)}. +## @item info.SR +## Right scaling factors. @code{Tr = diag (info.SR)}. +## @end table +## +## @strong{Equations} +## @example +## @group +## At = Tx \ A * Tx +## Bt = Tx \ B * Tu +## Ct = Ty \ C * Tx +## Dt = Ty \ D * Tu +## +## Et = Tl * E * Tr +## At = Tl * A * Tr +## Bt = Tl * B * Tu +## Ct = Ty \ C * Tr +## Dt = Ty \ D * Tu +## +## For proper state-space models, Tl and Tr are inverse of each other. +## @end group +## @end example +## @end deftypefn + +## Author: Lukas Reichlin <luk...@gm...> +## Created: October 2011 +## Version: 0.1 + +## To be placed inside @lti + +function retsys = transform (sys, Tl, Tr = [], Tu = [], Ty = []) + + if (nargin < 2 || nargin > 5) + print_usage (); + endif + + if (! isa (sys, "ss")) + warning ("transform: system not in state-space form"); + sys = ss (sys); + endif + + if (! is_real_square_matrix (Tl, Tr, Tu, Ty)) + error ("transform: transformation matrices must be square and real"); + endif + + [A, B, C, D, E, tsam] = dssdata (sys, []); + + if (isempty (E)) + Tx = Tl; + Ty = Tu; + Tu = Tr; + endif + + if (isempty (Tu)) + Tu = eye (columns (B)); + endif + + if (isempty (Ty)) + Ty = eye (rows (C)); + endif + + if (isempty (E)) + At = Tx \ A * Tx; + Bt = Tx \ B * Tu; + Ct = Ty \ C * Tx; + Dt = Ty \ D * Tu; + retsys = ss (At, Bt, Ct, Dt, tsam); + else + Et = Tl * E * Tr; + At = Tl * A * Tr; + Bt = Tl * B * Tu; + Ct = Ty \ C * Tr; + Dt = Ty \ D * Tu; + retsys = dss (At, Bt, Ct, Dt, Et, tsam); + endif + +endfunction + + + + + + + + + Modified: trunk/octave-forge/main/control/inst/MDSSystem.m =================================================================== --- trunk/octave-forge/main/control/inst/MDSSystem.m 2011-10-07 17:06:56 UTC (rev 8711) +++ trunk/octave-forge/main/control/inst/MDSSystem.m 2011-10-08 09:42:36 UTC (rev 8712) @@ -129,7 +129,7 @@ % Plotting figure (2) -sigma (T_mix) % singular values +bode (K_mix) % bode plot figure (3) step (T_mix, 10) % step response for 10 seconds @@ -154,7 +154,7 @@ % Plotting figure (4) -sigma (T_ncf) % singular values +bode (K_ncf) % bode plot figure (5) step (T_ncf, 10) % step response for 10 seconds This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-10-17 04:09:02
|
Revision: 8758 http://octave.svn.sourceforge.net/octave/?rev=8758&view=rev Author: paramaniac Date: 2011-10-17 04:08:56 +0000 (Mon, 17 Oct 2011) Log Message: ----------- control: update news, add todo to rlocus Modified Paths: -------------- trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/inst/rlocus.m Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-10-16 20:55:49 UTC (rev 8757) +++ trunk/octave-forge/main/control/doc/NEWS 2011-10-17 04:08:56 UTC (rev 8758) @@ -13,8 +13,21 @@ ** tf -- MIMO support for descriptor state-space to transfer function conversion. + Usage: tf_sys = tf (dss_sys) + +** rlocus + -- Clarify usage statement in help string. + -- Check whether system is SISO. +** MDSSystem + -- Display bode plots of controllers instead of singular value plots of the + closed loops. +** hsvd + -- Added option "alpha" to specify the alpha-stability boundary for the + eigenvalues of the state dynamics matrix A. + + =============================================================================== control-2.2.0 Release Date: 2011-09-26 Release Manager: Lukas Reichlin =============================================================================== @@ -28,6 +41,8 @@ an internal conversion to a minimal state-space representation. With the current tf2ss and ss2tf conversions, only proper transfer function are supported. This limitation does not exist for SISO transfer functions. + -- Fixed a cellfun statement that caused problems on MinGW32 builds and + possibly some others. (Reported by Bernhard Weller) ** @lti/pole, @lti/zero -- Computation of poles and zeros of MIMO transfer functions is now possible Modified: trunk/octave-forge/main/control/inst/rlocus.m =================================================================== --- trunk/octave-forge/main/control/inst/rlocus.m 2011-10-16 20:55:49 UTC (rev 8757) +++ trunk/octave-forge/main/control/inst/rlocus.m 2011-10-17 04:08:56 UTC (rev 8758) @@ -81,6 +81,7 @@ lnum = length (num); lden = length (den); ## equalize length of num, den polynomials + ## TODO: handle case lnum > lden (non-proper models) if (lden < 2) error ("rlocus: system has no poles"); elseif (lnum < lden) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-10-17 19:57:09
|
Revision: 8767 http://octave.svn.sourceforge.net/octave/?rev=8767&view=rev Author: paramaniac Date: 2011-10-17 19:57:02 +0000 (Mon, 17 Oct 2011) Log Message: ----------- control: enable tf2dss conversion Modified Paths: -------------- trunk/octave-forge/main/control/devel/test_tf2dss.m trunk/octave-forge/main/control/inst/@ss/__minreal__.m trunk/octave-forge/main/control/inst/@tf/__sys2ss__.m trunk/octave-forge/main/control/src/sltg01jd.cc Modified: trunk/octave-forge/main/control/devel/test_tf2dss.m =================================================================== --- trunk/octave-forge/main/control/devel/test_tf2dss.m 2011-10-17 18:57:55 UTC (rev 8766) +++ trunk/octave-forge/main/control/devel/test_tf2dss.m 2011-10-17 19:57:02 UTC (rev 8767) @@ -13,3 +13,4 @@ P = ss (sys) +ss (inv (tf (Boeing707 ))) \ No newline at end of file Modified: trunk/octave-forge/main/control/inst/@ss/__minreal__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__minreal__.m 2011-10-17 18:57:55 UTC (rev 8766) +++ trunk/octave-forge/main/control/inst/@ss/__minreal__.m 2011-10-17 19:57:02 UTC (rev 8767) @@ -36,7 +36,7 @@ [a, b, c] = sltb01pd (sys.a, sys.b, sys.c, tol, sys.scaled); retsys = ss (a, b, c, sys.d); else - [a, e, b, c] = sltg01jd (sys.a, sys.e, sys.b, sys.c, tol, sys.scaled); + [a, e, b, c] = sltg01jd (sys.a, sys.e, sys.b, sys.c, tol, sys.scaled, 0, 0); retsys = dss (a, b, c, sys.d, e); endif Modified: trunk/octave-forge/main/control/inst/@tf/__sys2ss__.m =================================================================== --- trunk/octave-forge/main/control/inst/@tf/__sys2ss__.m 2011-10-17 18:57:55 UTC (rev 8766) +++ trunk/octave-forge/main/control/inst/@tf/__sys2ss__.m 2011-10-17 19:57:02 UTC (rev 8767) @@ -17,7 +17,11 @@ ## -*- texinfo -*- ## TF to SS conversion. +## Reference: +## Varga, A.: Computation of irreducible generalized state-space realizations. +## Kybernetika, 26:89-106, 1990 +## Special thanks to Vasile Sima and Andras Varga for their advice. ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 ## Version: 0.3 @@ -71,7 +75,7 @@ ## transfer function to state-space conversion for proper models function [a, b, c, d] = __proper_tf2ss__ (num, den, p, m) -num, den + ## new cells for the TF of same row denominators numc = cell (p, m); denc = cell (p, 1); @@ -91,10 +95,10 @@ ## check for properness ## tfpoly ensures that there are no leading zeros - tmp = len_numc > repmat (len_denc, 1, m); - if (any (tmp(:))) - error ("tf: tf2ss: system must be proper"); - endif + ## tmp = len_numc > repmat (len_denc, 1, m); + ## if (any (tmp(:))) + ## error ("tf: tf2ss: system must be proper"); + ## endif ## create arrays and fill in the data ## in a way that Slicot TD04AD can use @@ -116,6 +120,7 @@ endfunction +## realization of the polynomial part according to Andras' paper function [e2, a2, b2, c2] = __polynomial_tf2ss__ (numq, p, m) len_numq = cellfun (@length, numq); @@ -123,17 +128,19 @@ numq = cellfun (@(x) prepad (x, max_len_numq, 0, 2), numq, "uniformoutput", false); f = @(y) cellfun (@(x) x(y), numq); s = num2cell (1 : max_len_numq); - D = cellfun (f, s, "uniformoutput", false) + D = cellfun (f, s, "uniformoutput", false); - e2 = diag (ones (p*(max_len_numq-1), 1), -p) - a2 = eye (p*max_len_numq) - b2 = vertcat (D{:}) - c2 = horzcat (zeros (p, p*(max_len_numq-1)), -eye (p)) + e2 = diag (ones (p*(max_len_numq-1), 1), -p); + a2 = eye (p*max_len_numq); + b2 = vertcat (D{:}); + c2 = horzcat (zeros (p, p*(max_len_numq-1)), -eye (p)); - ## TODO: remove uncontrollable part + ## remove uncontrollable part + [a2, e2, b2, c2] = sltg01jd (a2, e2, b2, c2, 0.0, true, 1, 2); endfunction + ## convolution for more than two arguments function vec = __conv__ (vec, varargin) Modified: trunk/octave-forge/main/control/src/sltg01jd.cc =================================================================== --- trunk/octave-forge/main/control/src/sltg01jd.cc 2011-10-17 18:57:55 UTC (rev 8766) +++ trunk/octave-forge/main/control/src/sltg01jd.cc 2011-10-17 19:57:02 UTC (rev 8767) @@ -23,7 +23,7 @@ Author: Lukas Reichlin <luk...@gm...> Created: September 2010 -Version: 0.2 +Version: 0.3 */ @@ -57,15 +57,15 @@ int nargin = args.length (); octave_value_list retval; - if (nargin != 6) + if (nargin != 8) { print_usage (); } else { // arguments in - char job = 'I'; - char systyp = 'R'; + char job; + char systyp; char equil; Matrix a = args(0).matrix_value (); @@ -74,12 +74,44 @@ Matrix c = args(3).matrix_value (); double tol = args(4).double_value (); const int scaled = args(5).int_value (); + const int ijob = args(6).int_value (); + const int isystyp = args(7).int_value (); if (scaled == 0) equil = 'S'; else equil = 'N'; + + switch (ijob) + { + case 0: + job = 'I'; + break; + case 1: + job = 'C'; + break; + case 2: + job = 'O'; + break; + default: + error ("sltg01jd: argument job invalid"); + } + switch (isystyp) + { + case 0: + systyp = 'R'; + break; + case 1: + systyp = 'S'; + break; + case 2: + systyp = 'P'; + break; + default: + error ("sltg01jd: argument systyp invalid"); + } + int n = a.rows (); // n: number of states int m = b.columns (); // m: number of inputs int p = c.rows (); // p: number of outputs This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-10-18 11:21:38
|
Revision: 8777 http://octave.svn.sourceforge.net/octave/?rev=8777&view=rev Author: paramaniac Date: 2011-10-18 11:21:27 +0000 (Tue, 18 Oct 2011) Log Message: ----------- control: separate algorithm section for doc strings Modified Paths: -------------- trunk/octave-forge/main/control/devel/pdfdoc/control.tex trunk/octave-forge/main/control/devel/pdfdoc/functions.texi trunk/octave-forge/main/control/inst/@lti/norm.m trunk/octave-forge/main/control/inst/@lti/prescale.m trunk/octave-forge/main/control/inst/care.m trunk/octave-forge/main/control/inst/dare.m trunk/octave-forge/main/control/inst/dlyap.m trunk/octave-forge/main/control/inst/dlyapchol.m trunk/octave-forge/main/control/inst/h2syn.m trunk/octave-forge/main/control/inst/hinfsyn.m trunk/octave-forge/main/control/inst/hsvd.m trunk/octave-forge/main/control/inst/isdetectable.m trunk/octave-forge/main/control/inst/isstabilizable.m trunk/octave-forge/main/control/inst/lyap.m trunk/octave-forge/main/control/inst/lyapchol.m trunk/octave-forge/main/control/inst/ncfsyn.m trunk/octave-forge/main/control/inst/place.m Modified: trunk/octave-forge/main/control/devel/pdfdoc/control.tex =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/control.tex 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/devel/pdfdoc/control.tex 2011-10-18 11:21:27 UTC (rev 8777) @@ -3,7 +3,7 @@ @setfilename control.info @settitle Octave Control Systems Package @afourpaper -@set VERSION 2.2.0 +@set VERSION 2.2.1 @finalout @c @afourwide @c %**end of header Modified: trunk/octave-forge/main/control/devel/pdfdoc/functions.texi =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-10-18 11:21:27 UTC (rev 8777) @@ -560,8 +560,6 @@ @deftypefn {Function File} {[@var{scaledsys}, @var{info}] =} prescale (@var{sys}) Prescale state-space model. - Uses SLICOT TB01ID and TG01AD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.}. Frequency response commands perform automatic scaling unless model property @var{scaled} is set to @var{true}. @@ -591,10 +589,14 @@ Bs = Tl * B Cs = C * Tr Ds = D - - For proper state-space models, Tl and Tr are inverse of each other. @end group @end example + + For proper state-space models, @var{Tl} and @var{Tr} are inverse of each other. + + @strong{Algorithm}@* + Uses SLICOT TB01ID and TG01AD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.}. @end deftypefn @section @@lti/xperm @@ -916,9 +918,12 @@ @section hsvd @deftypefn{Function File} {@var{hsv} =} hsvd (@var{sys}) - @deftypefnx{Function File} {@var{hsv} =} hsvd (@var{sys}, @var{"offset"}, @var{alpha}) + @deftypefnx{Function File} {@var{hsv} =} hsvd (@var{sys}, @var{"offset"}, @var{offset}) + @deftypefnx{Function File} {@var{hsv} =} hsvd (@var{sys}, @var{"alpha"}, @var{alpha}) Hankel singular values of the stable part of an LTI model. If no output arguments are given, the Hankel singular values are displayed in a plot. + + @strong{Algorithm}@* Uses SLICOT AB13AD by courtesy of @uref{http://www.slicot.org, NICONET e.V.} @end deftypefn @@ -943,20 +948,20 @@ @end deftypefn @section isctrb - @deftypefn {Function File} {@var{bool} =} isctrb (@var{sys}) - @deftypefnx {Function File} {@var{bool} =} isctrb (@var{sys}, @var{tol}) - @deftypefnx {Function File} {@var{bool} =} isctrb (@var{a}, @var{b}) - @deftypefnx {Function File} {@var{bool} =} isctrb (@var{a}, @var{b}, @var{e}) - @deftypefnx {Function File} {@var{bool} =} isctrb (@var{a}, @var{b}, @var{[]}, @var{tol}) - @deftypefnx {Function File} {@var{bool} =} isctrb (@var{a}, @var{b}, @var{e}, @var{tol}) + @deftypefn {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{sys}) + @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{sys}, @var{tol}) + @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{a}, @var{b}) + @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{a}, @var{b}, @var{e}) + @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{a}, @var{b}, @var{[]}, @var{tol}) + @deftypefnx {Function File} {[@var{bool}, @var{ncon}] =} isctrb (@var{a}, @var{b}, @var{e}, @var{tol}) Logical check for system controllability. - Uses SLICOT AB01OD and TG01HD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} + For numerical reasons, @code{isctrb (sys)} + should be used instead of @code{rank (ctrb (sys))}. @strong{Inputs} @table @var @item sys - LTI model. + LTI model. Descriptor state-space models are possible. @item a State transition matrix. @item b @@ -973,8 +978,14 @@ System is not controllable. @item bool = 1 System is controllable. + @item ncon + Number of controllable states. @end table + @strong{Algorithm}@* + Uses SLICOT AB01OD and TG01HD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{isobsv} @end deftypefn @section isdetectable @@ -991,8 +1002,6 @@ @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}, @var{e}, @var{tol}, @var{dflg}) Logical test for system detectability. All unstable modes must be observable or all unobservable states must be stable. - Uses SLICOT AB01OD and TG01HD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Inputs} @table @var @@ -1020,6 +1029,10 @@ System is detectable. @end table + + @strong{Algorithm}@* + Uses SLICOT AB01OD and TG01HD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} See @command{isstabilizable} for description of computational method. @seealso{isstabilizable, isstable, isctrb, isobsv} @end deftypefn @@ -1051,20 +1064,20 @@ @end deftypefn @section isobsv - @deftypefn {Function File} {@var{bool} =} isobsv (@var{sys}) - @deftypefnx {Function File} {@var{bool} =} isobsv (@var{sys}, @var{tol}) - @deftypefnx {Function File} {@var{bool} =} isobsv (@var{a}, @var{c}) - @deftypefnx {Function File} {@var{bool} =} isobsv (@var{a}, @var{c}, @var{e}) - @deftypefnx {Function File} {@var{bool} =} isobsv (@var{a}, @var{c}, @var{[]}, @var{tol}) - @deftypefnx {Function File} {@var{bool} =} isobsv (@var{a}, @var{c}, @var{e}, @var{tol}) + @deftypefn {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{sys}) + @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{sys}, @var{tol}) + @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{a}, @var{c}) + @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{a}, @var{c}, @var{e}) + @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{a}, @var{c}, @var{[]}, @var{tol}) + @deftypefnx {Function File} {[@var{bool}, @var{nobs}] =} isobsv (@var{a}, @var{c}, @var{e}, @var{tol}) Logical check for system observability. - Uses SLICOT AB01OD and TG01HD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} + For numerical reasons, @code{isobsv (sys)} + should be used instead of @code{rank (obsv (sys))}. @strong{Inputs} @table @var @item sys - LTI model. + LTI model. Descriptor state-space models are possible. @item a State transition matrix. @item c @@ -1081,8 +1094,14 @@ System is not observable. @item bool = 1 System is observable. + @item nobs + Number of observable states. @end table + @strong{Algorithm}@* + Uses SLICOT AB01OD and TG01HD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{isctrb} @end deftypefn @section @@lti/issiso @@ -1104,8 +1123,6 @@ @deftypefnx {Function File} {@var{bool} =} isstabilizable (@var{a}, @var{b}, @var{e}, @var{tol}, @var{dflg}) Logical check for system stabilizability. All unstable modes must be controllable or all uncontrollable states must be stable. - Uses SLICOT AB01OD and TG01HD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Inputs} @table @var @@ -1133,7 +1150,9 @@ System is stabilizable. @end table - @strong{Method} + @strong{Algorithm}@* + Uses SLICOT AB01OD and TG01HD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} @example @group * Calculate staircase form (SLICOT AB01OD) @@ -1158,6 +1177,8 @@ @deftypefnx {Function File} {[@var{gain}, @var{wpeak}] =} norm (@var{sys}, @var{inf}) @deftypefnx {Function File} {[@var{gain}, @var{wpeak}] =} norm (@var{sys}, @var{inf}, @var{tol}) Return H-2 or L-inf norm of LTI model. + + @strong{Algorithm}@* Uses SLICOT AB13BD and AB13DD by courtesy of @uref{http://www.slicot.org, NICONET e.V.} @end deftypefn @@ -1845,13 +1866,11 @@ @deftypefn {Function File} {@var{f} =} place (@var{sys}, @var{p}) @deftypefnx {Function File} {@var{f} =} place (@var{a}, @var{b}, @var{p}) - @deftypefnx {Function File} {[@var{f}, @var{nfp}, @var{nap}, @var{nup}] =} place (@var{sys}, @var{p}, @var{alpha}) - @deftypefnx {Function File} {[@var{f}, @var{nfp}, @var{nap}, @var{nup}] =} place (@var{a}, @var{b}, @var{p}, @var{alpha}) + @deftypefnx {Function File} {[@var{f}, @var{info}] =} place (@var{sys}, @var{p}, @var{alpha}) + @deftypefnx {Function File} {[@var{f}, @var{info}] =} place (@var{a}, @var{b}, @var{p}, @var{alpha}) Pole assignment for a given matrix pair (@var{A},@var{B}) such that @code{p = eig (A-B*F)}. If parameter @var{alpha} is specified, poles with real parts (continuous-time) or moduli (discrete-time) below @var{alpha} are left untouched. - Uses SLICOT SB01BD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Inputs} @table @var @@ -1875,13 +1894,15 @@ @table @var @item f State feedback gain matrix. - @item nfp + @item info + Structure containing additional information. + @item info.nfp The number of fixed poles, i.e. eigenvalues of @var{A} having real parts less than @var{alpha}, or moduli less than @var{alpha}. These eigenvalues are not modified by @command{place}. - @item nap + @item info.nap The number of assigned eigenvalues. @code{nap = n-nfp-nup}. - @item nup + @item info.nup The number of uncontrollable eigenvalues detected by the eigenvalue assignment algorithm. @end table @@ -1894,11 +1915,15 @@ L = place (sys.', p).' # useful for discrete-time systems @end group @end example + + @strong{Algorithm}@* + Uses SLICOT SB01BD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} @end deftypefn @section rlocus @deftypefn {Function File} rlocus (@var{sys}) - @deftypefnx {Function File} {[@var{rldata}, @var{k}] =} rlocus (@var{sys}[, @var{increment}, @var{min_k}, @var{max_k}]) + @deftypefnx {Function File} {[@var{rldata}, @var{k}] =} rlocus (@var{sys}, @var{increment}, @var{min_k}, @var{max_k}) Display root locus plot of the specified @acronym{SISO} system. @strong{Inputs} @@ -2212,8 +2237,6 @@ @deftypefn{Function File} {[@var{K}, @var{N}, @var{gamma}, @var{rcond}] =} h2syn (@var{P}, @var{nmeas}, @var{ncon}) H-2 control synthesis for LTI plant. - Uses SLICOT SB10HD and SB10ED by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Inputs} @table @var @@ -2261,6 +2284,11 @@ +--------+ @end group @end example + + @strong{Algorithm}@* + Uses SLICOT SB10HD and SB10ED by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{augw, lqr, dlqr, kalman} @end deftypefn @section hinfsyn @@ -2268,8 +2296,6 @@ @deftypefn{Function File} {[@var{K}, @var{N}, @var{gamma}, @var{rcond}] =} hinfsyn (@var{P}, @var{nmeas}, @var{ncon}) @deftypefnx{Function File} {[@var{K}, @var{N}, @var{gamma}, @var{rcond}] =} hinfsyn (@var{P}, @var{nmeas}, @var{ncon}, @var{gmax}) H-infinity control synthesis for LTI plant. - Uses SLICOT SB10FD and SB10DD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Inputs} @table @var @@ -2320,6 +2346,11 @@ +--------+ @end group @end example + + @strong{Algorithm}@* + Uses SLICOT SB10FD and SB10DD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{augw, mixsyn} @end deftypefn @section mixsyn @@ -2442,8 +2473,6 @@ @deftypefn{Function File} {[@var{K}, @var{N}, @var{gamma}, @var{info}] =} ncfsyn (@var{G}, @var{W1}, @var{W2}, @var{factor}) Normalized Coprime Factor (NCF) H-infinity synthesis. Compute positive feedback controller using the McFarlane/Glover Loop Shaping Design Procedure. - Uses SLICOT SB10ID, SB10KD and SB10ZD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Inputs} @table @var @@ -2498,6 +2527,10 @@ +-------------------------------------------------+ @end group @end example + + @strong{Algorithm}@* + Uses SLICOT SB10ID, SB10KD and SB10ZD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} @end deftypefn @chapter Matrix Equation Solvers @section care @@ -2507,8 +2540,6 @@ @deftypefnx {Function File} {[@var{x}, @var{l}, @var{g}] =} care (@var{a}, @var{b}, @var{q}, @var{r}, @var{[]}, @var{e}) @deftypefnx {Function File} {[@var{x}, @var{l}, @var{g}] =} care (@var{a}, @var{b}, @var{q}, @var{r}, @var{s}, @var{e}) Solve continuous-time algebraic Riccati equation (ARE). - Uses SLICOT SB02OD and SG02AD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Inputs} @table @var @@ -2571,6 +2602,11 @@ L = eig (A - B*G, E) @end group @end example + + @strong{Algorithm}@* + Uses SLICOT SB02OD and SG02AD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{dare, lqr, dlqr, kalman} @end deftypefn @section dare @@ -2580,8 +2616,6 @@ @deftypefnx {Function File} {[@var{x}, @var{l}, @var{g}] =} dare (@var{a}, @var{b}, @var{q}, @var{r}, @var{[]}, @var{e}) @deftypefnx {Function File} {[@var{x}, @var{l}, @var{g}] =} dare (@var{a}, @var{b}, @var{q}, @var{r}, @var{s}, @var{e}) Solve discrete-time algebraic Riccati equation (ARE). - Uses SLICOT SB02OD and SG02AD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Inputs} @table @var @@ -2644,6 +2678,11 @@ L = eig (A - B*G, E) @end group @end example + + @strong{Algorithm}@* + Uses SLICOT SB02OD and SG02AD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{care, lqr, dlqr, kalman} @end deftypefn @section dlyap @@ -2652,8 +2691,6 @@ @deftypefnx{Function File} {@var{x} =} dlyap (@var{a}, @var{b}, @var{c}) @deftypefnx{Function File} {@var{x} =} dlyap (@var{a}, @var{b}, @var{[]}, @var{e}) Solve discrete-time Lyapunov or Sylvester equations. - Uses SLICOT SB03MD, SB04QD and SG03AD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Equations} @example @@ -2666,6 +2703,10 @@ @end group @end example + @strong{Algorithm}@* + Uses SLICOT SB03MD, SB04QD and SG03AD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{dlyapchol, lyap, lyapchol} @end deftypefn @section dlyapchol @@ -2673,8 +2714,6 @@ @deftypefn{Function File} {@var{u} =} dlyapchol (@var{a}, @var{b}) @deftypefnx{Function File} {@var{u} =} dlyapchol (@var{a}, @var{b}, @var{e}) Compute Cholesky factor of discrete-time Lyapunov equations. - Uses SLICOT SB03OD and SG03BD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Equations} @example @@ -2685,6 +2724,10 @@ @end group @end example + @strong{Algorithm}@* + Uses SLICOT SB03OD and SG03BD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{dlyap, lyap, lyapchol} @end deftypefn @section lyap @@ -2693,8 +2736,6 @@ @deftypefnx{Function File} {@var{x} =} lyap (@var{a}, @var{b}, @var{c}) @deftypefnx{Function File} {@var{x} =} lyap (@var{a}, @var{b}, @var{[]}, @var{e}) Solve continuous-time Lyapunov or Sylvester equations. - Uses SLICOT SB03MD, SB04MD and SG03AD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Equations} @example @@ -2707,6 +2748,10 @@ @end group @end example + @strong{Algorithm}@* + Uses SLICOT SB03MD, SB04MD and SG03AD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{lyapchol, dlyap, dlyapchol} @end deftypefn @section lyapchol @@ -2714,8 +2759,6 @@ @deftypefn{Function File} {@var{u} =} lyapchol (@var{a}, @var{b}) @deftypefnx{Function File} {@var{u} =} lyapchol (@var{a}, @var{b}, @var{e}) Compute Cholesky factor of continuous-time Lyapunov equations. - Uses SLICOT SB03OD and SG03BD by courtesy of - @uref{http://www.slicot.org, NICONET e.V.} @strong{Equations} @example @@ -2726,6 +2769,10 @@ @end group @end example + @strong{Algorithm}@* + Uses SLICOT SB03OD and SG03BD by courtesy of + @uref{http://www.slicot.org, NICONET e.V.} + @seealso{lyap, dlyap, dlyapchol} @end deftypefn @chapter Overloaded Operators Modified: trunk/octave-forge/main/control/inst/@lti/norm.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/norm.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/@lti/norm.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -20,6 +20,8 @@ ## @deftypefnx {Function File} {[@var{gain}, @var{wpeak}] =} norm (@var{sys}, @var{inf}) ## @deftypefnx {Function File} {[@var{gain}, @var{wpeak}] =} norm (@var{sys}, @var{inf}, @var{tol}) ## Return H-2 or L-inf norm of LTI model. +## +## @strong{Algorithm}@* ## Uses SLICOT AB13BD and AB13DD by courtesy of ## @uref{http://www.slicot.org, NICONET e.V.} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/@lti/prescale.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/prescale.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/@lti/prescale.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -18,8 +18,6 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {[@var{scaledsys}, @var{info}] =} prescale (@var{sys}) ## Prescale state-space model. -## Uses SLICOT TB01ID and TG01AD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.}. ## Frequency response commands perform automatic scaling unless model property ## @var{scaled} is set to @var{true}. ## @@ -49,10 +47,14 @@ ## Bs = Tl * B ## Cs = C * Tr ## Ds = D -## -## For proper state-space models, Tl and Tr are inverse of each other. ## @end group ## @end example +## +## For proper state-space models, @var{Tl} and @var{Tr} are inverse of each other. +## +## @strong{Algorithm}@* +## Uses SLICOT TB01ID and TG01AD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.}. ## @end deftypefn ## Author: Lukas Reichlin <luk...@gm...> Modified: trunk/octave-forge/main/control/inst/care.m =================================================================== --- trunk/octave-forge/main/control/inst/care.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/care.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -21,8 +21,6 @@ ## @deftypefnx {Function File} {[@var{x}, @var{l}, @var{g}] =} care (@var{a}, @var{b}, @var{q}, @var{r}, @var{[]}, @var{e}) ## @deftypefnx {Function File} {[@var{x}, @var{l}, @var{g}] =} care (@var{a}, @var{b}, @var{q}, @var{r}, @var{s}, @var{e}) ## Solve continuous-time algebraic Riccati equation (ARE). -## Uses SLICOT SB02OD and SG02AD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Inputs} ## @table @var @@ -85,6 +83,11 @@ ## L = eig (A - B*G, E) ## @end group ## @end example +## +## @strong{Algorithm}@* +## Uses SLICOT SB02OD and SG02AD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{dare, lqr, dlqr, kalman} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/dare.m =================================================================== --- trunk/octave-forge/main/control/inst/dare.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/dare.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -21,8 +21,6 @@ ## @deftypefnx {Function File} {[@var{x}, @var{l}, @var{g}] =} dare (@var{a}, @var{b}, @var{q}, @var{r}, @var{[]}, @var{e}) ## @deftypefnx {Function File} {[@var{x}, @var{l}, @var{g}] =} dare (@var{a}, @var{b}, @var{q}, @var{r}, @var{s}, @var{e}) ## Solve discrete-time algebraic Riccati equation (ARE). -## Uses SLICOT SB02OD and SG02AD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Inputs} ## @table @var @@ -85,6 +83,11 @@ ## L = eig (A - B*G, E) ## @end group ## @end example +## +## @strong{Algorithm}@* +## Uses SLICOT SB02OD and SG02AD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{care, lqr, dlqr, kalman} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/dlyap.m =================================================================== --- trunk/octave-forge/main/control/inst/dlyap.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/dlyap.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -20,8 +20,6 @@ ## @deftypefnx{Function File} {@var{x} =} dlyap (@var{a}, @var{b}, @var{c}) ## @deftypefnx{Function File} {@var{x} =} dlyap (@var{a}, @var{b}, @var{[]}, @var{e}) ## Solve discrete-time Lyapunov or Sylvester equations. -## Uses SLICOT SB03MD, SB04QD and SG03AD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Equations} ## @example @@ -34,6 +32,10 @@ ## @end group ## @end example ## +## @strong{Algorithm}@* +## Uses SLICOT SB03MD, SB04QD and SG03AD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{dlyapchol, lyap, lyapchol} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/dlyapchol.m =================================================================== --- trunk/octave-forge/main/control/inst/dlyapchol.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/dlyapchol.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -19,8 +19,6 @@ ## @deftypefn{Function File} {@var{u} =} dlyapchol (@var{a}, @var{b}) ## @deftypefnx{Function File} {@var{u} =} dlyapchol (@var{a}, @var{b}, @var{e}) ## Compute Cholesky factor of discrete-time Lyapunov equations. -## Uses SLICOT SB03OD and SG03BD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Equations} ## @example @@ -31,6 +29,10 @@ ## @end group ## @end example ## +## @strong{Algorithm}@* +## Uses SLICOT SB03OD and SG03BD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{dlyap, lyap, lyapchol} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/h2syn.m =================================================================== --- trunk/octave-forge/main/control/inst/h2syn.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/h2syn.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -18,8 +18,6 @@ ## -*- texinfo -*- ## @deftypefn{Function File} {[@var{K}, @var{N}, @var{gamma}, @var{rcond}] =} h2syn (@var{P}, @var{nmeas}, @var{ncon}) ## H-2 control synthesis for LTI plant. -## Uses SLICOT SB10HD and SB10ED by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Inputs} ## @table @var @@ -67,6 +65,11 @@ ## +--------+ ## @end group ## @end example +## +## @strong{Algorithm}@* +## Uses SLICOT SB10HD and SB10ED by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{augw, lqr, dlqr, kalman} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/hinfsyn.m =================================================================== --- trunk/octave-forge/main/control/inst/hinfsyn.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/hinfsyn.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -19,8 +19,6 @@ ## @deftypefn{Function File} {[@var{K}, @var{N}, @var{gamma}, @var{rcond}] =} hinfsyn (@var{P}, @var{nmeas}, @var{ncon}) ## @deftypefnx{Function File} {[@var{K}, @var{N}, @var{gamma}, @var{rcond}] =} hinfsyn (@var{P}, @var{nmeas}, @var{ncon}, @var{gmax}) ## H-infinity control synthesis for LTI plant. -## Uses SLICOT SB10FD and SB10DD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Inputs} ## @table @var @@ -71,6 +69,11 @@ ## +--------+ ## @end group ## @end example +## +## @strong{Algorithm}@* +## Uses SLICOT SB10FD and SB10DD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{augw, mixsyn} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/hsvd.m =================================================================== --- trunk/octave-forge/main/control/inst/hsvd.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/hsvd.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -21,6 +21,8 @@ ## @deftypefnx{Function File} {@var{hsv} =} hsvd (@var{sys}, @var{"alpha"}, @var{alpha}) ## Hankel singular values of the stable part of an LTI model. If no output arguments are ## given, the Hankel singular values are displayed in a plot. +## +## @strong{Algorithm}@* ## Uses SLICOT AB13AD by courtesy of ## @uref{http://www.slicot.org, NICONET e.V.} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/isdetectable.m =================================================================== --- trunk/octave-forge/main/control/inst/isdetectable.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/isdetectable.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -28,8 +28,6 @@ ## @deftypefnx {Function File} {@var{bool} =} isdetectable (@var{a}, @var{c}, @var{e}, @var{tol}, @var{dflg}) ## Logical test for system detectability. ## All unstable modes must be observable or all unobservable states must be stable. -## Uses SLICOT AB01OD and TG01HD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Inputs} ## @table @var @@ -57,6 +55,10 @@ ## System is detectable. ## @end table ## +## +## @strong{Algorithm}@* +## Uses SLICOT AB01OD and TG01HD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} ## See @command{isstabilizable} for description of computational method. ## @seealso{isstabilizable, isstable, isctrb, isobsv} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/isstabilizable.m =================================================================== --- trunk/octave-forge/main/control/inst/isstabilizable.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/isstabilizable.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -28,8 +28,6 @@ ## @deftypefnx {Function File} {@var{bool} =} isstabilizable (@var{a}, @var{b}, @var{e}, @var{tol}, @var{dflg}) ## Logical check for system stabilizability. ## All unstable modes must be controllable or all uncontrollable states must be stable. -## Uses SLICOT AB01OD and TG01HD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Inputs} ## @table @var @@ -57,7 +55,9 @@ ## System is stabilizable. ## @end table ## -## @strong{Method} +## @strong{Algorithm}@* +## Uses SLICOT AB01OD and TG01HD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} ## @example ## @group ## * Calculate staircase form (SLICOT AB01OD) Modified: trunk/octave-forge/main/control/inst/lyap.m =================================================================== --- trunk/octave-forge/main/control/inst/lyap.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/lyap.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -20,8 +20,6 @@ ## @deftypefnx{Function File} {@var{x} =} lyap (@var{a}, @var{b}, @var{c}) ## @deftypefnx{Function File} {@var{x} =} lyap (@var{a}, @var{b}, @var{[]}, @var{e}) ## Solve continuous-time Lyapunov or Sylvester equations. -## Uses SLICOT SB03MD, SB04MD and SG03AD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Equations} ## @example @@ -34,6 +32,10 @@ ## @end group ## @end example ## +## @strong{Algorithm}@* +## Uses SLICOT SB03MD, SB04MD and SG03AD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{lyapchol, dlyap, dlyapchol} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/lyapchol.m =================================================================== --- trunk/octave-forge/main/control/inst/lyapchol.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/lyapchol.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -19,8 +19,6 @@ ## @deftypefn{Function File} {@var{u} =} lyapchol (@var{a}, @var{b}) ## @deftypefnx{Function File} {@var{u} =} lyapchol (@var{a}, @var{b}, @var{e}) ## Compute Cholesky factor of continuous-time Lyapunov equations. -## Uses SLICOT SB03OD and SG03BD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Equations} ## @example @@ -31,6 +29,10 @@ ## @end group ## @end example ## +## @strong{Algorithm}@* +## Uses SLICOT SB03OD and SG03BD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} +## ## @seealso{lyap, dlyap, dlyapchol} ## @end deftypefn Modified: trunk/octave-forge/main/control/inst/ncfsyn.m =================================================================== --- trunk/octave-forge/main/control/inst/ncfsyn.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/ncfsyn.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -19,8 +19,6 @@ ## @deftypefn{Function File} {[@var{K}, @var{N}, @var{gamma}, @var{info}] =} ncfsyn (@var{G}, @var{W1}, @var{W2}, @var{factor}) ## Normalized Coprime Factor (NCF) H-infinity synthesis. ## Compute positive feedback controller using the McFarlane/Glover Loop Shaping Design Procedure. -## Uses SLICOT SB10ID, SB10KD and SB10ZD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Inputs} ## @table @var @@ -75,6 +73,10 @@ ## +-------------------------------------------------+ ## @end group ## @end example +## +## @strong{Algorithm}@* +## Uses SLICOT SB10ID, SB10KD and SB10ZD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} ## @end deftypefn ## Author: Lukas Reichlin <luk...@gm...> Modified: trunk/octave-forge/main/control/inst/place.m =================================================================== --- trunk/octave-forge/main/control/inst/place.m 2011-10-18 10:36:36 UTC (rev 8776) +++ trunk/octave-forge/main/control/inst/place.m 2011-10-18 11:21:27 UTC (rev 8777) @@ -23,8 +23,6 @@ ## Pole assignment for a given matrix pair (@var{A},@var{B}) such that @code{p = eig (A-B*F)}. ## If parameter @var{alpha} is specified, poles with real parts (continuous-time) ## or moduli (discrete-time) below @var{alpha} are left untouched. -## Uses SLICOT SB01BD by courtesy of -## @uref{http://www.slicot.org, NICONET e.V.} ## ## @strong{Inputs} ## @table @var @@ -69,6 +67,10 @@ ## L = place (sys.', p).' # useful for discrete-time systems ## @end group ## @end example +## +## @strong{Algorithm}@* +## Uses SLICOT SB01BD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} ## @end deftypefn ## Special thanks to Peter Benner from TU Chemnitz for his advice. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-10-18 20:08:13
|
Revision: 8783 http://octave.svn.sourceforge.net/octave/?rev=8783&view=rev Author: paramaniac Date: 2011-10-18 20:08:07 +0000 (Tue, 18 Oct 2011) Log Message: ----------- control: bilinear transformation for descriptor state-space models Modified Paths: -------------- trunk/octave-forge/main/control/devel/__dss_bilin__.m trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/inst/@ss/__c2d__.m trunk/octave-forge/main/control/inst/@ss/__d2c__.m Modified: trunk/octave-forge/main/control/devel/__dss_bilin__.m =================================================================== --- trunk/octave-forge/main/control/devel/__dss_bilin__.m 2011-10-18 15:39:48 UTC (rev 8782) +++ trunk/octave-forge/main/control/devel/__dss_bilin__.m 2011-10-18 20:08:07 UTC (rev 8783) @@ -41,6 +41,7 @@ ## _ -1 ## D = D + C * (beta*E - A) * B +## Special thanks to Andras Varga for the formulae. ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2011 ## Version: 0.1 @@ -48,17 +49,43 @@ function [Ar, Br, Cr, Dr, Er] = __dss_bilin__ (A, B, C, D, E, beta, discrete) if (discrete) - Er = E + A; + EpA = E + A; + s2b = sqrt (2*beta); + if (rcond (EpA) < eps) + error ("d2c: E+A singular"); + endif + CiEpA = C / EpA; + + Er = EpA; Ar = beta * (A - E); - Br = sqrt (2*beta) * B; - Cr = sqrt (2*beta) * C / (E + A) * E; - Dr = D - C / (E + A) * B; + Br = s2b * B; + Cr = s2b * CiEpA * E; + Dr = D - CiEpA * B; + + ## Er = E + A; + ## Ar = beta * (A - E); + ## Br = sqrt (2*beta) * B; + ## Cr = sqrt (2*beta) * C / (E + A) * E; + ## Dr = D - C / (E + A) * B; else - Er = beta*E - A; + bEmA = beta*E - A; + s2b = sqrt (2*beta); + if (rcond (bEmA) < eps) + error ("c2d: beta*E-A singular"); + endif + CibEmA = C / bEmA; + + Er = bEmA; Ar = beta*E + A; - Br = sqrt (2*beta) * B; - Cr = sqrt (2*beta) * C / (beta*E - A) * E; - Dr = D + C / (beta*E - A) * B; + Br = s2b * B; + Cr = s2b * CibEmA * E; + Dr = D + CibEmA * B; + + ## Er = beta*E - A; + ## Ar = beta*E + A; + ## Br = sqrt (2*beta) * B; + ## Cr = sqrt (2*beta) * C / (beta*E - A) * E; + ## Dr = D + C / (beta*E - A) * B; endif endfunction Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-10-18 15:39:48 UTC (rev 8782) +++ trunk/octave-forge/main/control/doc/NEWS 2011-10-18 20:08:07 UTC (rev 8783) @@ -14,14 +14,17 @@ -- Support conversion from non-proper transfer function to descriptor state- space. Usage: dss_sys = ss (tf_sys) -** place - -- Return the number of fixed, assigned and uncontrollable poles in a single - "info" struct instead of three individual output arguments. +** c2d, d2c + -- Support bilinear transformation of descriptor state-space models. ** inv -- Support the inversion of MIMO transfer functions. Inverses of 2x2 TFs are computed directly, larger models are computed internally in state-space. +** place + -- Return the number of fixed, assigned and uncontrollable poles in a single + "info" struct instead of three individual output arguments. + ** rlocus -- Clarify usage statement in help string. -- Check whether system is SISO. Modified: trunk/octave-forge/main/control/inst/@ss/__c2d__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__c2d__.m 2011-10-18 15:39:48 UTC (rev 8782) +++ trunk/octave-forge/main/control/inst/@ss/__c2d__.m 2011-10-18 20:08:07 UTC (rev 8783) @@ -20,7 +20,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.2 +## Version: 0.3 function sys = __c2d__ (sys, tsam, method = "zoh", w0 = 0) @@ -39,9 +39,11 @@ else beta = 2/tsam; endif - [sys.a, sys.b, sys.c, sys.d, sys.e] = __dss2ss__ (sys.a, sys.b, sys.c, sys.d, sys.e); - [sys.a, sys.b, sys.c, sys.d] = slab04md (sys.a, sys.b, sys.c, sys.d, 1, beta, false); - ## TODO: descriptor case + if (isempty (sys.e)) + [sys.a, sys.b, sys.c, sys.d] = slab04md (sys.a, sys.b, sys.c, sys.d, 1, beta, false); + else + [sys.a, sys.b, sys.c, sys.d, sys.e] = __dss_bilin__ (sys.a, sys.b, sys.c, sys.d, sys.e, beta, false); + endif otherwise error ("ss: c2d: %s is an invalid or missing method", method); Modified: trunk/octave-forge/main/control/inst/@ss/__d2c__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__d2c__.m 2011-10-18 15:39:48 UTC (rev 8782) +++ trunk/octave-forge/main/control/inst/@ss/__d2c__.m 2011-10-18 20:08:07 UTC (rev 8783) @@ -20,7 +20,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: September 2011 -## Version: 0.1 +## Version: 0.2 function sys = __d2c__ (sys, tsam, method = "zoh", w0 = 0) @@ -41,9 +41,11 @@ else beta = 2/tsam; endif - [sys.a, sys.b, sys.c, sys.d, sys.e] = __dss2ss__ (sys.a, sys.b, sys.c, sys.d, sys.e); - [sys.a, sys.b, sys.c, sys.d] = slab04md (sys.a, sys.b, sys.c, sys.d, 1, beta, true); - ## TODO: descriptor case + if (isempty (sys.e)) + [sys.a, sys.b, sys.c, sys.d] = slab04md (sys.a, sys.b, sys.c, sys.d, 1, beta, true); + else + [sys.a, sys.b, sys.c, sys.d, sys.e] = __dss_bilin__ (sys.a, sys.b, sys.c, sys.d, sys.e, beta, true); + endif otherwise error ("ss: d2c: %s is an invalid or missing method", method); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-10-18 20:35:39
|
Revision: 8784 http://octave.svn.sourceforge.net/octave/?rev=8784&view=rev Author: paramaniac Date: 2011-10-18 20:35:32 +0000 (Tue, 18 Oct 2011) Log Message: ----------- control: move function into place Added Paths: ----------- trunk/octave-forge/main/control/inst/__dss_bilin__.m Removed Paths: ------------- trunk/octave-forge/main/control/devel/__dss_bilin__.m Deleted: trunk/octave-forge/main/control/devel/__dss_bilin__.m =================================================================== --- trunk/octave-forge/main/control/devel/__dss_bilin__.m 2011-10-18 20:08:07 UTC (rev 8783) +++ trunk/octave-forge/main/control/devel/__dss_bilin__.m 2011-10-18 20:35:32 UTC (rev 8784) @@ -1,91 +0,0 @@ -## Copyright (C) 2011 Lukas F. Reichlin -## -## This file is part of LTI Syncope. -## -## LTI Syncope 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 3 of the License, or -## (at your option) any later version. -## -## LTI Syncope 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 LTI Syncope. If not, see <http://www.gnu.org/licenses/>. - -## -*- texinfo -*- -## 1. Discrete -> continuous -## _ -## E = alpha*E + A -## _ -## A = beta (A - alpha*E) -## _ -## B = sqrt(2*alpha*beta) * B -## _ -1 -## C = sqrt(2*alpha*beta) * C * (alpha*E + A) * E -## _ -1 -## D = D - C * (alpha*E + A) * B -## -## -## 2. Continuous -> discrete -## _ -## E = beta*E - A -## _ -## A = alpha (beta*E + A) -## _ -## B = sqrt(2*alpha*beta) * B -## _ -1 -## C = sqrt(2*alpha*beta) * C * (beta*E - A) * E -## _ -1 -## D = D + C * (beta*E - A) * B - -## Special thanks to Andras Varga for the formulae. -## Author: Lukas Reichlin <luk...@gm...> -## Created: October 2011 -## Version: 0.1 - -function [Ar, Br, Cr, Dr, Er] = __dss_bilin__ (A, B, C, D, E, beta, discrete) - - if (discrete) - EpA = E + A; - s2b = sqrt (2*beta); - if (rcond (EpA) < eps) - error ("d2c: E+A singular"); - endif - CiEpA = C / EpA; - - Er = EpA; - Ar = beta * (A - E); - Br = s2b * B; - Cr = s2b * CiEpA * E; - Dr = D - CiEpA * B; - - ## Er = E + A; - ## Ar = beta * (A - E); - ## Br = sqrt (2*beta) * B; - ## Cr = sqrt (2*beta) * C / (E + A) * E; - ## Dr = D - C / (E + A) * B; - else - bEmA = beta*E - A; - s2b = sqrt (2*beta); - if (rcond (bEmA) < eps) - error ("c2d: beta*E-A singular"); - endif - CibEmA = C / bEmA; - - Er = bEmA; - Ar = beta*E + A; - Br = s2b * B; - Cr = s2b * CibEmA * E; - Dr = D + CibEmA * B; - - ## Er = beta*E - A; - ## Ar = beta*E + A; - ## Br = sqrt (2*beta) * B; - ## Cr = sqrt (2*beta) * C / (beta*E - A) * E; - ## Dr = D + C / (beta*E - A) * B; - endif - -endfunction Copied: trunk/octave-forge/main/control/inst/__dss_bilin__.m (from rev 8783, trunk/octave-forge/main/control/devel/__dss_bilin__.m) =================================================================== --- trunk/octave-forge/main/control/inst/__dss_bilin__.m (rev 0) +++ trunk/octave-forge/main/control/inst/__dss_bilin__.m 2011-10-18 20:35:32 UTC (rev 8784) @@ -0,0 +1,91 @@ +## Copyright (C) 2011 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope 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 3 of the License, or +## (at your option) any later version. +## +## LTI Syncope 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 LTI Syncope. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## 1. Discrete -> continuous +## _ +## E = alpha*E + A +## _ +## A = beta (A - alpha*E) +## _ +## B = sqrt(2*alpha*beta) * B +## _ -1 +## C = sqrt(2*alpha*beta) * C * (alpha*E + A) * E +## _ -1 +## D = D - C * (alpha*E + A) * B +## +## +## 2. Continuous -> discrete +## _ +## E = beta*E - A +## _ +## A = alpha (beta*E + A) +## _ +## B = sqrt(2*alpha*beta) * B +## _ -1 +## C = sqrt(2*alpha*beta) * C * (beta*E - A) * E +## _ -1 +## D = D + C * (beta*E - A) * B + +## Special thanks to Andras Varga for the formulae. +## Author: Lukas Reichlin <luk...@gm...> +## Created: October 2011 +## Version: 0.1 + +function [Ar, Br, Cr, Dr, Er] = __dss_bilin__ (A, B, C, D, E, beta, discrete) + + if (discrete) + EpA = E + A; + s2b = sqrt (2*beta); + if (rcond (EpA) < eps) + error ("d2c: E+A singular"); + endif + CiEpA = C / EpA; + + Er = EpA; + Ar = beta * (A - E); + Br = s2b * B; + Cr = s2b * CiEpA * E; + Dr = D - CiEpA * B; + + ## Er = E + A; + ## Ar = beta * (A - E); + ## Br = sqrt (2*beta) * B; + ## Cr = sqrt (2*beta) * C / (E + A) * E; + ## Dr = D - C / (E + A) * B; + else + bEmA = beta*E - A; + s2b = sqrt (2*beta); + if (rcond (bEmA) < eps) + error ("c2d: beta*E-A singular"); + endif + CibEmA = C / bEmA; + + Er = bEmA; + Ar = beta*E + A; + Br = s2b * B; + Cr = s2b * CibEmA * E; + Dr = D + CibEmA * B; + + ## Er = beta*E - A; + ## Ar = beta*E + A; + ## Br = sqrt (2*beta) * B; + ## Cr = sqrt (2*beta) * C / (beta*E - A) * E; + ## Dr = D + C / (beta*E - A) * B; + endif + +endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-10-23 21:37:45
|
Revision: 8846 http://octave.svn.sourceforge.net/octave/?rev=8846&view=rev Author: paramaniac Date: 2011-10-23 21:37:39 +0000 (Sun, 23 Oct 2011) Log Message: ----------- control: doc update Modified Paths: -------------- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi trunk/octave-forge/main/control/inst/@lti/isminimumphase.m Modified: trunk/octave-forge/main/control/devel/pdfdoc/functions.texi =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-10-22 04:40:15 UTC (rev 8845) +++ trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-10-23 21:37:39 UTC (rev 8846) @@ -1060,7 +1060,9 @@ @deftypefn {Function File} {@var{bool} =} isminimumphase (@var{sys}) @deftypefnx {Function File} {@var{bool} =} isminimumphase (@var{sys}, @var{tol}) Determine whether LTI system is minimum phase. - If a square system @var{P} is minimum-phase, its inverse @var{P^-1} is stable. + The zeros must lie in the left complex half-plane. + The name minimum-phase refers to the fact that such a system has the + minimum possible phase lag for the given magnitude response |sys(jw)|. @end deftypefn @section isobsv @@ -2356,7 +2358,7 @@ @section mixsyn @deftypefn{Function File} {[@var{K}, @var{N}, @var{gamma}] =} mixsyn (@var{G}, @var{W1}, @var{W2}, @var{W3}, @dots{}) - Solve stacked S/KS/T H-inf problem. Bound the largest singular values + Solve stacked S/KS/T H-infinity problem. Bound the largest singular values of @var{S} (for performance), @var{K S} (to penalize large inputs) and @var{T} (for robustness and to avoid sensitivity to noise). In other words, the inputs r are excited by a harmonic test signal. @@ -2471,8 +2473,8 @@ @section ncfsyn @deftypefn{Function File} {[@var{K}, @var{N}, @var{gamma}, @var{info}] =} ncfsyn (@var{G}, @var{W1}, @var{W2}, @var{factor}) - Normalized Coprime Factor (NCF) H-infinity synthesis. - Compute positive feedback controller using the McFarlane/Glover Loop Shaping Design Procedure. + Loop shaping H-infinity synthesis. Compute positive feedback controller using + the McFarlane/Glover normalized coprime factor (NCF) loop shaping design procedure. @strong{Inputs} @table @var @@ -2500,7 +2502,7 @@ @item N State-space model of the closed loop depicted below. @item gamma - L-infinity norm of @var{N}. + L-infinity norm of @var{N}. @code{gamma = norm (N, inf)}. @item info Structure containing additional information. @item info.emax Modified: trunk/octave-forge/main/control/inst/@lti/isminimumphase.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/isminimumphase.m 2011-10-22 04:40:15 UTC (rev 8845) +++ trunk/octave-forge/main/control/inst/@lti/isminimumphase.m 2011-10-23 21:37:39 UTC (rev 8846) @@ -19,7 +19,9 @@ ## @deftypefn {Function File} {@var{bool} =} isminimumphase (@var{sys}) ## @deftypefnx {Function File} {@var{bool} =} isminimumphase (@var{sys}, @var{tol}) ## Determine whether LTI system is minimum phase. -## If a square system @var{P} is minimum-phase, its inverse @var{P^-1} is stable. +## The zeros must lie in the left complex half-plane. +## The name minimum-phase refers to the fact that such a system has the +## minimum possible phase lag for the given magnitude response |sys(jw)|. ## @end deftypefn ## Author: Lukas Reichlin <luk...@gm...> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-10-24 11:03:38
|
Revision: 8847 http://octave.svn.sourceforge.net/octave/?rev=8847&view=rev Author: paramaniac Date: 2011-10-24 11:03:27 +0000 (Mon, 24 Oct 2011) Log Message: ----------- control: doc fixes Modified Paths: -------------- trunk/octave-forge/main/control/devel/pdfdoc/control.tex trunk/octave-forge/main/control/devel/pdfdoc/functions.texi trunk/octave-forge/main/control/inst/ctrb.m trunk/octave-forge/main/control/inst/obsv.m Modified: trunk/octave-forge/main/control/devel/pdfdoc/control.tex =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/control.tex 2011-10-23 21:37:39 UTC (rev 8846) +++ trunk/octave-forge/main/control/devel/pdfdoc/control.tex 2011-10-24 11:03:27 UTC (rev 8847) @@ -37,6 +37,17 @@ developed by Lukas F. Reichlin and is based on the proven open-source library @acronym{SLICOT}. This new package is intended as a replacement for control-1.0.11 by A. Scottedward Hodel and his students. +Its main features are: +@itemize +@item Reliable solvers for Lyapunov, Sylvester and algebraic Riccati equations. +@item Pole placement techniques as well as @tex $ H_2 $ @end tex +and @tex $ H_{\infty} $ @end tex +synthesis methods. +@item Overloaded operators due to the use of the object-oriented features +introduced with Octave 3.2. +@item Support for descriptor state-space models and non-proper transfer functions. +@item Improved @acronym{MATLAB} compatibility. +@end itemize @sp 5 @subheading Acknowledgments Modified: trunk/octave-forge/main/control/devel/pdfdoc/functions.texi =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-10-23 21:37:39 UTC (rev 8846) +++ trunk/octave-forge/main/control/devel/pdfdoc/functions.texi 2011-10-24 11:03:27 UTC (rev 8847) @@ -872,7 +872,7 @@ @strong{Equation} @iftex @tex - $$ C_o = [ B AB A^2B ldots A^{n-1}B ] $$ + $$ C_o = [ B \ \ AB \ \ A^2B \ \ldots \ A^{n-1}B ] $$ @end tex @end iftex @ifinfo @@ -1209,12 +1209,11 @@ @strong{Equation} @iftex @tex - $$ O_b = left[ matrix{ C cr - CA cr - CA^2 cr - dots cr - CA^{n-1} } -ight ] $$ + $$ O_b = \left[ \matrix{ C \cr + CA \cr + CA^2 \cr + \vdots \cr + CA^{n-1} } \right ] $$ @end tex @end iftex @ifinfo Modified: trunk/octave-forge/main/control/inst/ctrb.m =================================================================== --- trunk/octave-forge/main/control/inst/ctrb.m 2011-10-23 21:37:39 UTC (rev 8846) +++ trunk/octave-forge/main/control/inst/ctrb.m 2011-10-24 11:03:27 UTC (rev 8847) @@ -40,7 +40,7 @@ ## @strong{Equation} ## @iftex ## @tex -## $$ C_o = [ B AB A^2B \ldots A^{n-1}B ] $$ +## $$ C_o = [ B \\ \\ AB \\ \\ A^2B \\ \\ldots \\ A^{n-1}B ] $$ ## @end tex ## @end iftex ## @ifinfo Modified: trunk/octave-forge/main/control/inst/obsv.m =================================================================== --- trunk/octave-forge/main/control/inst/obsv.m 2011-10-23 21:37:39 UTC (rev 8846) +++ trunk/octave-forge/main/control/inst/obsv.m 2011-10-24 11:03:27 UTC (rev 8847) @@ -40,11 +40,11 @@ ## @strong{Equation} ## @iftex ## @tex -## $$ O_b = \left[ \matrix{ C \cr -## CA \cr -## CA^2 \cr -## \vdots \cr -## CA^{n-1} } \right ] $$ +## $$ O_b = \\left[ \\matrix{ C \\cr +## CA \\cr +## CA^2 \\cr +## \\vdots \\cr +## CA^{n-1} } \\right ] $$ ## @end tex ## @end iftex ## @ifinfo This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-10-24 11:25:53
|
Revision: 8848 http://octave.svn.sourceforge.net/octave/?rev=8848&view=rev Author: paramaniac Date: 2011-10-24 11:25:44 +0000 (Mon, 24 Oct 2011) Log Message: ----------- control: prepare release of control-2.2.1 Modified Paths: -------------- trunk/octave-forge/main/control/DESCRIPTION trunk/octave-forge/main/control/devel/RELEASE_PACKAGE trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/doc/control.pdf Modified: trunk/octave-forge/main/control/DESCRIPTION =================================================================== --- trunk/octave-forge/main/control/DESCRIPTION 2011-10-24 11:03:27 UTC (rev 8847) +++ trunk/octave-forge/main/control/DESCRIPTION 2011-10-24 11:25:44 UTC (rev 8848) @@ -1,6 +1,6 @@ Name: Control -Version: 2.2.0 -Date: 2011-09-26 +Version: 2.2.1 +Date: 2011-10-24 Author: Lukas Reichlin <luk...@gm...> Maintainer: Lukas Reichlin <luk...@gm...> Title: Control Systems Modified: trunk/octave-forge/main/control/devel/RELEASE_PACKAGE =================================================================== --- trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-10-24 11:03:27 UTC (rev 8847) +++ trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-10-24 11:25:44 UTC (rev 8848) @@ -20,12 +20,12 @@ rm -R ~/octave/__TEMP__/control/devel cd ~/octave/__TEMP__ grep -i version control/DESCRIPTION -tar czf control-2.2.0.tar.gz control/ -md5 control-2.2.0.tar.gz -md5 control-2.2.0.tar.gz > md5_control_pkg.txt -uuencode control-2.2.0.tar.gz < control-2.2.0.tar.gz > control-2.2.0.tar.gz.uue +tar czf control-2.2.1.tar.gz control/ +md5 control-2.2.1.tar.gz +md5 control-2.2.1.tar.gz > md5_control_pkg.txt +uuencode control-2.2.1.tar.gz < control-2.2.1.tar.gz > control-2.2.1.tar.gz.uue octave -q --eval \ -"pkg install control-2.2.0.tar.gz" +"pkg install control-2.2.1.tar.gz" octave -q --eval \ "pkg load generate_html; generate_package_html ('control', 'control-html', 'octave-forge')" tar czf control-html.tar.gz control-html @@ -40,7 +40,7 @@ ===================================================================================== rm -R ~/octave/__TEMP__ -rm -R ~/octave/control-2.2.0 +rm -R ~/octave/control-2.2.1 ===================================================================================== Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-10-24 11:03:27 UTC (rev 8847) +++ trunk/octave-forge/main/control/doc/NEWS 2011-10-24 11:25:44 UTC (rev 8848) @@ -1,7 +1,7 @@ Summary of important user-visible changes for releases of the control package =============================================================================== -control-2.2.1 Release Date: 2011-xx-yy Release Manager: Lukas Reichlin +control-2.2.1 Release Date: 2011-10-24 Release Manager: Lukas Reichlin =============================================================================== ** tf Modified: trunk/octave-forge/main/control/doc/control.pdf =================================================================== --- trunk/octave-forge/main/control/doc/control.pdf 2011-10-24 11:03:27 UTC (rev 8847) +++ trunk/octave-forge/main/control/doc/control.pdf 2011-10-24 11:25:44 UTC (rev 8848) @@ -42,23 +42,49 @@ >> stream xڅ\x90MK1\x86\xEF\xFB+rL3\x99\xCC&\xB9*\xB6 \xE2Gݞ\xC4ònk\xE9n\xAB\xE0\xBF7i\/\x8A\xC3̛y\x9F\xBC(L:(\xBC>\xF2\xA2\xDBV\xE6\xD4\x96\xA2\xB3i\x85_:\xC7\xEC(\xD5\xCA\xF4\xA8\xD3H\xDD?Kur\x8Eb\x9E7\xD5\xD9ij\xB0j,\x9AEƫ -\x817A4\xCF\xE2Qv\xFB\x9D"\x94\xC7a\xBFQ\x9A<K\x8Czj\xAE\xAA˦z\xFDޜ\xDEqd\xF0F\x82,a\xA5\xD5C/\xD5}qdh \x9A\x88ّ,A\x8DQpp\x80\xDEۋdk\xC3hK$>\xC7~\xAB4\xCACi\xDC\xE5y\xDB\xE5{\xAD\x98e\xBB\xEC\xCB`\xB1J1\xBD\x99\xE7\xC2\xC9\xDB\xEE\xD8f\xDD{\xBE\xFA\xCC~\xFA5: W\xDB̠-\xE3 B\xBB \xDAq\xFD\xB6V\xB5\x95mv\xF4NN\xA0$0\xEB3ƪSd\xE5\xCBf\xB5\xFB5\xC1\xFE\x88!F\xA3\xF8&\xACsV +\x817A4\xCF\xE2Qv\xFB\x9D"\x94\xC7a\xBFQ\x9A<KP=5W\xD5eS\xBD~oN\xEF82x +#\xC1\x96\xB0\xD2\xEA\xA1\x8B\xEA\xBE824M\xC4\xECH\x96\xA0\xC6(88@\xEF\x8B\xEDE\xB2\xB5a\xB4%\x92\x87c\xBFU\xE5\xA14\xEE\xF2\xBC\xED\xF2\xBDV̲]\xF6e\xB0\xD8\xA5\x98\xDE\xCCs\xE1\xE4mwl\xB3\xEE=_}f?\xFD\x90\xABmfЖ\xF1\xA1]m\x81\xB8~[\xAB\xDA\xCA6;z''P\x98\xF5c\xD5)\xB2\xF2e\xB3\xDA\xFD\x86\x8F`D\x81#\x8DQ|'\xF1sW endstream endobj -13 0 obj << -/Length 633 +14 0 obj << +/Length 788 /Filter /FlateDecode >> stream -xڍS͎\x9B0\xBE\xE7)8\x82\xB4\xB06Ɓ\[5\x95\xAA\xAAUnm^p\x82\x91\x81T}\xFB\x8E=c\x92l\xA3Պ\x9Ea<3\xDF<b\xF0\xF0\xA8̣\xB2Y%ʨ>\xAD\x98\xCF\xDAC\x84\x87\x97\xAF+Nu\x85\x99,\x9C\xDF-Ke.}]z\xD3\xF5\xD3n\xF5\xBC\x952\xE2,۰ -\x8Fv{7\x96\xCBu&6Ѯ\x89~Ɵ\x87s\x92W\xF1_k\xAD;L\xC9\xEFݷHY^\xC2\xC8L\xE4TW\xBB\xFC\xF3v]\xDC\xF6JE\xC6\x8C\xBE\xA9\xFBŸ\xC4\xD2\xFB\xB1\xBC\x80\xE5ְ\xA9\xAF\xCAۤ9\xE3\xFC)I\x85\xF1\xF7\xF9\x98H\xAB\xC3m\x86\xEFm\xEA$/\xE3\xB63\xBD\xDF+]ˬ\xAC\xAA(\xE5\xEB\x8C?\xDC\xDEڞ\xCC8\x9A\xA1\x87\x9BL\xC4\xC6uby|\xB0\xAAw&\xDD`b\xB0ऎ\xFEfU\xDF`\xBA1\xE3d\xCD\xEB<ч\x8B\xBB\xAC\x{DADA}\xCC 3\xF5p6z\xC4\xEAaOM[3\x86\xB6\xBDk;\xAB\xE3s\xC2c;\xB8&\xD3,;\xB4\xBF\xD6D~\xEA\xC11\x80%2.9º*\xE2\xB9\xE8\x87\xC9\xD4\xEE\x9E(h]H\xD2`\xE1\xA5oXx{\xC7j\xAA\xB4z\xD4\xF6\xE2\xD17\xF8-ԫ\xAE\xC3\x82̖\xB5\xDEc\xBB`\xC86\xBC\x91\xED\x8A؆\x84g\xDE(F\xB8>\xB6\x81%\x8D\xA9\xD3\xE0\x814\x8CT\x846\xB8\xACui\x92g\xDE -h\xC3\xEC;\xE6!\x9E\xFBF[\x87fC|\xFB5\xFA\xC6<${\xA2\xD6 \xD4~\xB0x\xA0\xA9A\xFB| -?A\xCAc\x82b\xFA\x833/\xCFN\xE0jع\xADU\xDE\xC0\xD1\xCECH\x8C\xB1\x83s7AaWs\x95\0\xD8#F\x86v#\xAEy -\x95\xF4\xA6\x96\x9F@\xAE\x91\x94ޓ\xD2t -`\xA2\xC5kE\xDE\xF0\x9A§\xAB\xF7\x86^\xCC*$W\xAB8No\xDD\xD8\xB2ho\x8A\x9B\x9FӕC\x8F\xB1S\x8Bv\xC2\xF3\xCA\xDC\xD9\xC21\x89Si\x90\xAC\xAD&\xBD;\xD5fu\xD0O\x8F\xC8\\xEC$\xAFE<\xAA\x93\xFF+\xEC\xE1\xE8%\xBA\xD1K\x90\xF8\xDF\xBC\xB5\xB5'p\xF5e\xB7\xFAo\x9C\xB5 +xڍTM\x8F\x9B0\xBD\xE7Wp+\x91/\xC6|\x84[ժ[\xA9ꡪrk{\xF0\x82V\xF8\x88l\xBB\xFF\xBE3;!\xD9m\xB5\x8A\xEC\xE7\xF1̛7xÏE;\xC1v\xA2\xAA~[\xD44-\xBE\xDEp\x97f\x82e\xA9\x80\xF5â,\xC9l\\xB4\xCA\xFAa\xBF\xB9Ȳ\x80Ǭ\x8CK\xECX\x96 \xCBD\xB0\xAF\x83\xE1\xC7\xF1\xB4Mv\xE1\xB3\xD1M\x8B\x8By\xFBk\xFF%\xC8R\x96P\x92\x89\xA4\xA4\xB8 +\xF1\xFB\x87<]\xE7\x8A\x8B\x94^\xC5\xFD\x8CyF\xA1\xD7ey +\xE4r`j\xA3\x928.\xA3$\xE6\xFCn !¯\xCBq\x9Be\xA1\x9Ch\xFB\xC0\xE8\xF9]\xE9j\x9Ba\xDB\xE9\x93n>\xED\xCF\xFD&E\xC9~n\xB5a\xB1\xB8\x84?8@\x91\xAE\x91\xB5Z\xFEzt\xB9Ob\xE5k\xD67E,\xF7n9ʉ\xA0\x86\xB4\xDE7\xBD\xD4\xAB\xC6\xFE\x96`\xCAs\x96\xE7ٚ࿇\xE7\x83_\xD0y1\xBB,g\xC2i\xBDo5 +\xC7a/\xDE"\xBBm\x94\x94e\xE8\xF1F +\xCA\xC8Y\xD5\xCBe{9\xEBJv\xDD3E0\xB7\x87s\xAB\x9A\xD5=FB[՝\x9Ef\xA3\x87f"x<\xB8X\xBC\x84\xC0I\xDAI\xC1\xF3P6\xEA\x9D#pX\x86j\xD6\xE301\xEB\xAB\xCC\xF7 +|C\xD2\xCA\xF4z\x9A oG= \x83=\xA1%\x8F\xC0<R@/\x8F\xF6\xA1r\xA8 \xAE5|\fw\xF0\x84\x97\x95y\x84v{B\xAA\xF1\xA4\xD5D\xD1\xC4\x92: ŕ\x84\xB8?myhFL\xF2\xA4\xEB3\xD2H`.\xFB\xDAD\xE7\xB6\xE3\xA7\xB6.\xEF\x92u\xF10\x82\xE2xO\xA4\x8E.\x80\xAE\xB0\xC0Bэ +\xB7w\x8Cr\x91FM\xCA<\xD9\xEEk:\xF3\xF10PZP\x93oS;\x8DImx\x92\xDA;\xA76 |
From: <par...@us...> - 2011-11-22 16:14:20
|
Revision: 9166 http://octave.svn.sourceforge.net/octave/?rev=9166&view=rev Author: paramaniac Date: 2011-11-22 16:14:14 +0000 (Tue, 22 Nov 2011) Log Message: ----------- control: improve error messages, return additional argument for place Modified Paths: -------------- trunk/octave-forge/main/control/inst/place.m trunk/octave-forge/main/control/src/slsb01bd.cc Modified: trunk/octave-forge/main/control/inst/place.m =================================================================== --- trunk/octave-forge/main/control/inst/place.m 2011-11-22 14:31:58 UTC (rev 9165) +++ trunk/octave-forge/main/control/inst/place.m 2011-11-22 16:14:14 UTC (rev 9166) @@ -57,6 +57,10 @@ ## @item info.nup ## The number of uncontrollable eigenvalues detected by the ## eigenvalue assignment algorithm. +## @item info.z +## The orthogonal matrix @var{z} reduces the closed-loop +## system state matrix @code{A + B*F} to upper real Schur form. +## Note the positive sign in @code{A + B*F}. ## @end table ## ## @strong{Note} @@ -76,7 +80,7 @@ ## Special thanks to Peter Benner from TU Chemnitz for his advice. ## Author: Lukas Reichlin <luk...@gm...> ## Created: December 2009 -## Version: 0.4 +## Version: 0.5 function [f, info] = place (a, b, p = [], alpha = [], tol = []) @@ -132,10 +136,10 @@ tol = 0; endif - [f, nfp, nap, nup] = slsb01bd (a, b, wr, wi, discrete, alpha, tol); + [f, nfp, nap, nup, z] = slsb01bd (a, b, wr, wi, discrete, alpha, tol); f = -f; # A + B*F --> A - B*F - info = struct ("nfp", nfp, "nap", nap, "nup", nup); + info = struct ("nfp", nfp, "nap", nap, "nup", nup, "z", z); endfunction Modified: trunk/octave-forge/main/control/src/slsb01bd.cc =================================================================== --- trunk/octave-forge/main/control/src/slsb01bd.cc 2011-11-22 14:31:58 UTC (rev 9165) +++ trunk/octave-forge/main/control/src/slsb01bd.cc 2011-11-22 16:14:14 UTC (rev 9166) @@ -23,7 +23,7 @@ Author: Lukas Reichlin <luk...@gm...> Created: November 2009 -Version: 0.3 +Version: 0.4 */ @@ -94,9 +94,8 @@ int nup; Matrix f (ldf, n); + Matrix z (ldz, n); - OCTAVE_LOCAL_BUFFER (double, z, ldz*n); - // workspace int ldwork = max (1, 5*m, 5*n, 2*n+4*m); @@ -117,7 +116,7 @@ wr.fortran_vec (), wi.fortran_vec (), nfp, nap, nup, f.fortran_vec (), ldf, - z, ldz, + z.fortran_vec (), ldz, tol, dwork, ldwork, iwarn, info)); @@ -128,14 +127,51 @@ if (info != 0) error ("place: slsb01bd: SB01BD returned info = %d", info); + if (info != 0) + { + if (info < 0) + error ("place: slsb01bd: the %d-th argument had an invalid value", info); + else + { + switch (info) + { + case 1: + error ("place: 1: the reduction of A to a real Schur form failed."); + case 2: + error ("place: 2: a failure was detected during the ordering of the " + "real Schur form of A, or in the iterative process " + "for reordering the eigenvalues of Z'*(A + B*F)*Z " + "along the diagonal."); + case 3: + error ("place: 3: the number of eigenvalues to be assigned is less " + "than the number of possibly assignable eigenvalues; " + "NAP eigenvalues have been properly assigned, " + "but some assignable eigenvalues remain unmodified."); + case 4: + error ("place: 4: an attempt is made to place a complex conjugate " + "pair on the location of a real eigenvalue. This " + "situation can only appear when N-NFP is odd, " + "NP > N-NFP-NUP is even, and for the last real " + "eigenvalue to be modified there exists no available " + "real eigenvalue to be assigned. However, NAP " + "eigenvalues have been already properly assigned."); + default: + error ("place: unknown error, info = %d", info); + } + } + } + if (iwarn != 0) - warning ("place: slsb01bd: %d violations of the numerical stability condition NORM(F) <= 100*NORM(A)/NORM(B)", iwarn); + warning ("place: slsb01bd: %d violations of the numerical stability condition " + "NORM(F) <= 100*NORM(A)/NORM(B) occured during the " + "assignment of eigenvalues.", iwarn); // return values retval(0) = f; retval(1) = octave_value (nfp); retval(2) = octave_value (nap); retval(3) = octave_value (nup); + retval(4) = z; } return retval; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-11-25 16:46:16
|
Revision: 9182 http://octave.svn.sourceforge.net/octave/?rev=9182&view=rev Author: paramaniac Date: 2011-11-25 16:46:09 +0000 (Fri, 25 Nov 2011) Log Message: ----------- control: doc enhancements Modified Paths: -------------- trunk/octave-forge/main/control/inst/Boeing707.m Added Paths: ----------- trunk/octave-forge/main/control/devel/generate_control_pdf.m trunk/octave-forge/main/control/devel/pdfdoc/GENERATE_PDF Added: trunk/octave-forge/main/control/devel/generate_control_pdf.m =================================================================== --- trunk/octave-forge/main/control/devel/generate_control_pdf.m (rev 0) +++ trunk/octave-forge/main/control/devel/generate_control_pdf.m 2011-11-25 16:46:09 UTC (rev 9182) @@ -0,0 +1,12 @@ +homedir = pwd (); +develdir = fileparts (which ("generate_control_pdf")); +pdfdir = [develdir, "/pdfdoc"]; +cd (pdfdir); + +function_doc + +for i = 1:5 + system ("pdftex -interaction batchmode control.tex"); +endfor + +cd (homedir); Added: trunk/octave-forge/main/control/devel/pdfdoc/GENERATE_PDF =================================================================== --- trunk/octave-forge/main/control/devel/pdfdoc/GENERATE_PDF (rev 0) +++ trunk/octave-forge/main/control/devel/pdfdoc/GENERATE_PDF 2011-11-25 16:46:09 UTC (rev 9182) @@ -0,0 +1,9 @@ +cd ~/control/devel/pdfdoc +octave -q --eval \ +"function_doc" +pdftex -interaction batchmode control.tex +pdftex -interaction batchmode control.tex +pdftex -interaction batchmode control.tex +pdftex -interaction batchmode control.tex +pdftex -interaction batchmode control.tex +cd Modified: trunk/octave-forge/main/control/inst/Boeing707.m =================================================================== --- trunk/octave-forge/main/control/inst/Boeing707.m 2011-11-25 16:18:19 UTC (rev 9181) +++ trunk/octave-forge/main/control/inst/Boeing707.m 2011-11-25 16:46:09 UTC (rev 9182) @@ -21,7 +21,7 @@ ## at @var{v}=80 m/s ## @iftex ## @tex -## ($M = 0.26$, $G_{a0} = -3^{\circ}$, ${\alpha}_0 = 4^{\circ}$, ${\kappa}= 50^{\circ}$). +## ($M = 0.26$, $G_{a0} = -3^{\\circ}$, ${\\alpha}_0 = 4^{\\circ}$, ${\\kappa}= 50^{\\circ}$). ## @end tex ## @end iftex ## @ifnottex This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-11-27 06:43:19
|
Revision: 9203 http://octave.svn.sourceforge.net/octave/?rev=9203&view=rev Author: paramaniac Date: 2011-11-27 06:43:13 +0000 (Sun, 27 Nov 2011) Log Message: ----------- control: revise default tolerance for tf2ss conversion Modified Paths: -------------- trunk/octave-forge/main/control/NEWS trunk/octave-forge/main/control/inst/@tf/__sys2ss__.m Modified: trunk/octave-forge/main/control/NEWS =================================================================== --- trunk/octave-forge/main/control/NEWS 2011-11-27 02:45:52 UTC (rev 9202) +++ trunk/octave-forge/main/control/NEWS 2011-11-27 06:43:13 UTC (rev 9203) @@ -13,7 +13,11 @@ ** The NEWS file is handled correctly when using Octave version 3.6. Type "news("control")" or "news control" to display the news (3.6 only). +** ss + -- Revised default tolerance for transfer function to state-space conversion + by SLICOT TD04AD. + =============================================================================== control-2.2.1 Release Date: 2011-10-24 Release Manager: Lukas Reichlin =============================================================================== Modified: trunk/octave-forge/main/control/inst/@tf/__sys2ss__.m =================================================================== --- trunk/octave-forge/main/control/inst/@tf/__sys2ss__.m 2011-11-27 02:45:52 UTC (rev 9202) +++ trunk/octave-forge/main/control/inst/@tf/__sys2ss__.m 2011-11-27 06:43:13 UTC (rev 9203) @@ -24,7 +24,7 @@ ## Special thanks to Vasile Sima and Andras Varga for their advice. ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.3 +## Version: 0.3.1 function [retsys, retlti] = __sys2ss__ (sys) @@ -115,7 +115,8 @@ endfor endfor - [a, b, c, d] = sltd04ad (ucoeff, dcoeff, index, sqrt (eps)); + tol = min (sqrt (eps), eps*prod (index)); + [a, b, c, d] = sltd04ad (ucoeff, dcoeff, index, tol); endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |