From: <par...@us...> - 2011-01-27 18:31:40
|
Revision: 8076 http://octave.svn.sourceforge.net/octave/?rev=8076&view=rev Author: paramaniac Date: 2011-01-27 18:31:34 +0000 (Thu, 27 Jan 2011) Log Message: ----------- control: fix @tf/display, require octave version >= 3.3.90 Modified Paths: -------------- trunk/octave-forge/main/control/DESCRIPTION trunk/octave-forge/main/control/inst/@tf/display.m Modified: trunk/octave-forge/main/control/DESCRIPTION =================================================================== --- trunk/octave-forge/main/control/DESCRIPTION 2011-01-27 17:10:36 UTC (rev 8075) +++ trunk/octave-forge/main/control/DESCRIPTION 2011-01-27 18:31:34 UTC (rev 8076) @@ -1,11 +1,11 @@ Name: Control Version: 2.0.0 -Date: 2010-10-31 +Date: 2011-01-27 Author: Lukas Reichlin <luk...@gm...> Maintainer: Lukas Reichlin <luk...@gm...> Title: Control Systems Description: Octave control systems package increasingly based on the SLICOT Fortran library -Depends: octave (>= 3.2.4) +Depends: octave (>= 3.3.90) Autoload: yes License: GPL version 3 or later Url: http://octave.sf.net, http://www.slicot.org Modified: trunk/octave-forge/main/control/inst/@tf/display.m =================================================================== --- trunk/octave-forge/main/control/inst/@tf/display.m 2011-01-27 17:10:36 UTC (rev 8075) +++ trunk/octave-forge/main/control/inst/@tf/display.m 2011-01-27 18:31:34 UTC (rev 8076) @@ -66,9 +66,9 @@ str = strjust (strvcat (numstr, fracstr, denstr), "center"); - namestr = [name, ": "]; + namestr = name(:, 1 : min (MAX_LEN, end)); + namestr = [namestr, ": "]; namestr = strjust (strvcat (" ", namestr, " "), "left"); - namestr = namestr(:, 1 : min (MAX_LEN, end)); namestr = horzcat (repmat (" ", 3, 1), namestr); str = [namestr, str]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-02-04 17:11:58
|
Revision: 8086 http://octave.svn.sourceforge.net/octave/?rev=8086&view=rev Author: paramaniac Date: 2011-02-04 17:11:52 +0000 (Fri, 04 Feb 2011) Log Message: ----------- control: fix typos, support nargin==3 for mconnect Modified Paths: -------------- trunk/octave-forge/main/control/devel/@frd/frd.m trunk/octave-forge/main/control/inst/@lti/mconnect.m trunk/octave-forge/main/control/inst/@ss/ss.m trunk/octave-forge/main/control/inst/@tf/tf.m Modified: trunk/octave-forge/main/control/devel/@frd/frd.m =================================================================== --- trunk/octave-forge/main/control/devel/@frd/frd.m 2011-02-04 15:23:30 UTC (rev 8085) +++ trunk/octave-forge/main/control/devel/@frd/frd.m 2011-02-04 17:11:52 UTC (rev 8086) @@ -98,13 +98,13 @@ otherwise # default case argc = numel (varargin); # number of additional arguments after H and w - if (issample (varargin{1}, -10)) # sys = frd (H, w, tsam, "prop1, "val1", ...) + if (issample (varargin{1}, -10)) # sys = frd (H, w, tsam, "prop1", val1, ...) tsam = varargin{1}; # discrete-time argc--; # tsam is not a property-value pair if (argc > 0) # if there are any properties and values ... varargin = varargin(2:end); # remove tsam from property-value list endif - else # sys = frd (H, w, "prop1, "val1", ...) + else # sys = frd (H, w, "prop1", val1, ...) tsam = 0; # continuous-time endif endswitch Modified: trunk/octave-forge/main/control/inst/@lti/mconnect.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/mconnect.m 2011-02-04 15:23:30 UTC (rev 8085) +++ trunk/octave-forge/main/control/inst/@lti/mconnect.m 2011-02-04 17:11:52 UTC (rev 8086) @@ -1,4 +1,4 @@ -## Copyright (C) 2009 Lukas F. Reichlin +## Copyright (C) 2009, 2010, 2011 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -61,11 +61,11 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.1 +## Version: 0.2 -function sys = mconnect (sys, M, in_idx, out_idx) +function sys = mconnect (sys, M, in_idx, out_idx = ":") - if (nargin != 2 && nargin != 4) + if (nargin < 2 || nargin > 4) print_usage (); endif @@ -82,7 +82,7 @@ sys = __sys_connect__ (sys, M); - if (nargin == 4) + if (nargin > 2) sys = __sys_prune__ (sys, out_idx, in_idx); endif Modified: trunk/octave-forge/main/control/inst/@ss/ss.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/ss.m 2011-02-04 15:23:30 UTC (rev 8085) +++ trunk/octave-forge/main/control/inst/@ss/ss.m 2011-02-04 17:11:52 UTC (rev 8086) @@ -116,7 +116,7 @@ else print_usage (); endif - elseif (nargin > 4) # default case sys = ss (a, b, c, d, "prop1, "val1", ...) + elseif (nargin > 4) # default case sys = ss (a, b, c, d, "prop1", val1, ...) argc = numel (varargin); # number of additional arguments after d if (issample (varargin{1}, -10)) # sys = ss (a, b, c, d, tsam, "prop1, "val1", ...) tsam = varargin{1}; Modified: trunk/octave-forge/main/control/inst/@tf/tf.m =================================================================== --- trunk/octave-forge/main/control/inst/@tf/tf.m 2011-02-04 15:23:30 UTC (rev 8085) +++ trunk/octave-forge/main/control/inst/@tf/tf.m 2011-02-04 17:11:52 UTC (rev 8086) @@ -131,7 +131,7 @@ den = __vec2tfpoly__ (den); argc = numel (varargin); - if (issample (varargin{1}, -10)) # sys = tf (num, den, tsam, "prop1, "val1", ...) + if (issample (varargin{1}, -10)) # sys = tf (num, den, tsam, "prop1", val1, ...) tsam = varargin{1}; argc--; @@ -144,7 +144,7 @@ if (argc > 0) varargin = varargin(2:end); endif - else # sys = tf (num, den, "prop1, "val1", ...) + else # sys = tf (num, den, "prop1", val1, ...) tsam = 0; tfvar = "s"; endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-02-07 23:42:21
|
Revision: 8102 http://octave.svn.sourceforge.net/octave/?rev=8102&view=rev Author: paramaniac Date: 2011-02-07 23:42:15 +0000 (Mon, 07 Feb 2011) Log Message: ----------- control: use ~ for unused return values Modified Paths: -------------- trunk/octave-forge/main/control/devel/@frd/__set__.m trunk/octave-forge/main/control/inst/@ss/__minreal__.m trunk/octave-forge/main/control/inst/@tf/__minreal__.m trunk/octave-forge/main/control/inst/isctrb.m trunk/octave-forge/main/control/inst/isstabilizable.m trunk/octave-forge/main/control/inst/ltimodels.m Modified: trunk/octave-forge/main/control/devel/@frd/__set__.m =================================================================== --- trunk/octave-forge/main/control/devel/@frd/__set__.m 2011-02-07 20:43:28 UTC (rev 8101) +++ trunk/octave-forge/main/control/devel/@frd/__set__.m 2011-02-07 23:42:15 UTC (rev 8102) @@ -31,7 +31,7 @@ sys.H = val; case {"w", "f", "freq", "frequency"} - [jnk, val] = __adjust_frd_data__ (sys.H, val); ## TODO: use [~, val] for octave 3.4 + [~, val] = __adjust_frd_data__ (sys.H, val); __frd_dim__ (sys.H, val); sys.w = val; Modified: trunk/octave-forge/main/control/inst/@ss/__minreal__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__minreal__.m 2011-02-07 20:43:28 UTC (rev 8101) +++ trunk/octave-forge/main/control/inst/@ss/__minreal__.m 2011-02-07 23:42:15 UTC (rev 8102) @@ -33,10 +33,10 @@ endif if (isempty (sys.e)) - [a, b, c, nr] = sltb01pd (sys.a, sys.b, sys.c, tol); + [a, b, c] = sltb01pd (sys.a, sys.b, sys.c, tol); retsys = ss (a, b, c, sys.d); else - [a, e, b, c, nr] = sltg01jd (sys.a, sys.e, sys.b, sys.c, tol); + [a, e, b, c] = sltg01jd (sys.a, sys.e, sys.b, sys.c, tol); retsys = dss (a, b, c, sys.d, e); endif Modified: trunk/octave-forge/main/control/inst/@tf/__minreal__.m =================================================================== --- trunk/octave-forge/main/control/inst/@tf/__minreal__.m 2011-02-07 20:43:28 UTC (rev 8101) +++ trunk/octave-forge/main/control/inst/@tf/__minreal__.m 2011-02-07 23:42:15 UTC (rev 8102) @@ -39,7 +39,7 @@ pol = pole (sisosys); for k = length (zer) : -1 : 1 # reversed because of deleted zeros - [jnk, idx] = min (abs (zer(k) - pol)); # find best match + [~, idx] = min (abs (zer(k) - pol)); # find best match if (tol == "def") if (abs (zer(k)) < sqrt_eps) # catch case zer(k) = 0 Modified: trunk/octave-forge/main/control/inst/isctrb.m =================================================================== --- trunk/octave-forge/main/control/inst/isctrb.m 2011-02-07 20:43:28 UTC (rev 8101) +++ trunk/octave-forge/main/control/inst/isctrb.m 2011-02-07 23:42:15 UTC (rev 8102) @@ -82,9 +82,9 @@ endif if (isempty (e)) - [ac, bc, u, ncont] = slab01od (a, b, tol); + [~, ~, ~, ncont] = slab01od (a, b, tol); else - [ac, ec, bc, cc, q, z, ncont] = sltg01hd (a, e, b, zeros (1, columns (a)), tol); + [~, ~, ~, ~, ~, ~, ncont] = sltg01hd (a, e, b, zeros (1, columns (a)), tol); endif bool = (ncont == rows (a)); Modified: trunk/octave-forge/main/control/inst/isstabilizable.m =================================================================== --- trunk/octave-forge/main/control/inst/isstabilizable.m 2011-02-07 20:43:28 UTC (rev 8101) +++ trunk/octave-forge/main/control/inst/isstabilizable.m 2011-02-07 23:42:15 UTC (rev 8102) @@ -102,7 +102,7 @@ if (isempty (e)) ## controllability staircase form - [ac, bc, u, ncont] = slab01od (a, b, tol); + [ac, ~, ~, ncont] = slab01od (a, b, tol); ## extract uncontrollable part of staircase form uncont_idx = ncont+1 : rows (a); @@ -112,7 +112,7 @@ eigw = eig (auncont); else ## controllability staircase form - output matrix c has no influence - [ac, ec, bc, cc, q, z, ncont] = sltg01hd (a, e, b, zeros (1, columns (a)), tol); + [ac, ec, ~, ~, ~, ~, ncont] = sltg01hd (a, e, b, zeros (1, columns (a)), tol); ## extract uncontrollable part of staircase form uncont_idx = ncont+1 : rows (a); Modified: trunk/octave-forge/main/control/inst/ltimodels.m =================================================================== --- trunk/octave-forge/main/control/inst/ltimodels.m 2011-02-07 20:43:28 UTC (rev 8101) +++ trunk/octave-forge/main/control/inst/ltimodels.m 2011-02-07 23:42:15 UTC (rev 8102) @@ -197,7 +197,7 @@ %!assert (z, z_exp, 1e-4); -transmission zeros of descriptor state-space models +## transmission zeros of descriptor state-space models %!shared z, z_exp %! A = [ 1 0 0 0 0 0 0 0 0 %! 0 1 0 0 0 0 0 0 0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-02-27 00:43:26
|
Revision: 8140 http://octave.svn.sourceforge.net/octave/?rev=8140&view=rev Author: paramaniac Date: 2011-02-27 00:43:20 +0000 (Sun, 27 Feb 2011) Log Message: ----------- control: various fixes for lsim (thanks to Rob Frohne) Modified Paths: -------------- trunk/octave-forge/main/control/devel/__frequency_vector_2__.m trunk/octave-forge/main/control/inst/lsim.m Added Paths: ----------- trunk/octave-forge/main/control/devel/lsimtest.m Modified: trunk/octave-forge/main/control/devel/__frequency_vector_2__.m =================================================================== --- trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2011-02-25 10:07:07 UTC (rev 8139) +++ trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2011-02-27 00:43:20 UTC (rev 8140) @@ -37,8 +37,12 @@ ## Date: October 2009 ## Version: 0.2 -function w = __frequency_vector_2__ (wbounds = "std", varargin) +function w = __frequency_vector_2__ (sys_cell, wbounds = "std") + if (! iscell (sys_cell)) + sys_cell = {sys_cell} + endif + zer = cellfun ("@lti/zero", varargin, "uniformoutput", false) pol = cellfun ("@lti/pole", varargin, "uniformoutput", false) Added: trunk/octave-forge/main/control/devel/lsimtest.m =================================================================== --- trunk/octave-forge/main/control/devel/lsimtest.m (rev 0) +++ trunk/octave-forge/main/control/devel/lsimtest.m 2011-02-27 00:43:20 UTC (rev 8140) @@ -0,0 +1,29 @@ +P = ss (-2, 3, 4, 5); + +u = [zeros(1, 20), ones(1, 20)]; +t = 5; + +figure (1) +lsim (P, u, t) +% lsim (P, u) + +figure (2) +lsim (c2d (P, 0.1), u) + +figure (3) +lsim (c2d (P, 0.1), u, 3.9) + +% figure (4) +% lsim (c2d (P, 0.1), u, 0:0.1:3.9) +% lsim (Boeing707, ones (10, 2), 0:9) + + +t = 0:0.1:3.9; +figure (4) +lsim (P, u, t) + +figure (5) +lsim (P, u, t+100) # This one works, ... + +figure (6) +lsim (P, u, t+30) # ... but I have no idea why this one fails! \ No newline at end of file Modified: trunk/octave-forge/main/control/inst/lsim.m =================================================================== --- trunk/octave-forge/main/control/inst/lsim.m 2011-02-25 10:07:07 UTC (rev 8139) +++ trunk/octave-forge/main/control/inst/lsim.m 2011-02-27 00:43:20 UTC (rev 8140) @@ -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. ## @@ -16,8 +16,10 @@ ## along with LTI Syncope. If not, see <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn{Function File} {[@var{y}, @var{t}, @var{x}] =} lsim (@var{sys}, @var{u}, @var{t}) +## @deftypefn{Function File} {[@var{y}, @var{t}, @var{x}] =} lsim (@var{sys}, @var{u}) +## @deftypefnx{Function File} {[@var{y}, @var{t}, @var{x}] =} lsim (@var{sys}, @var{u}, @var{t}) ## @deftypefnx{Function File} {[@var{y}, @var{t}, @var{x}] =} lsim (@var{sys}, @var{u}, @var{t}, @var{x0}) +## @deftypefnx{Function File} {[@var{y}, @var{t}, @var{x}] =} lsim (@var{sys}, @var{u}, @var{t}, @var{[]}, @var{method}) ## @deftypefnx{Function File} {[@var{y}, @var{t}, @var{x}] =} lsim (@var{sys}, @var{u}, @var{t}, @var{x0}, @var{method}) ## Simulate LTI model response to arbitrary inputs. If no output arguments are given, ## the system response is plotted on the screen. @@ -25,14 +27,21 @@ ## @strong{Inputs} ## @table @var ## @item sys -## LTI model. +## LTI model. System must be proper, i.e. it must not have more zeros than poles. +## @item u +## Vector or array of input signal. Needs @code{length(t)} rows and as many columns +## as there are inputs. If @var{sys} is a single-input system, row vectors @var{u} +## of length @code{length(t)} are accepted as well. ## @item t -## Time vector. Should be evenly spaced. +## Time vector. Should be evenly spaced. If @var{sys} is a continuous-time system +## and @var{t} is a real scalar, @var{sys} is discretized with sampling time +## @code{tsam = t/(rows(u)-1)}. If @var{sys} is a discrete-time system and @var{t} +## is not specified, vector @var{t} is assumed to be @code{0 : tsam : tsam*(rows(u)-1)}. ## @item x0 -## Vector of initial conditions for each state. +## Vector of initial conditions for each state. If not specified, a zero vector is assumed. ## @item method ## Discretization method for continuous-time models. Default value is zoh -## (zero-order hold). All methods from c2d are supported. +## (zero-order hold). All methods from @code{c2d} are supported. ## @end table ## ## @strong{Outputs} @@ -41,7 +50,7 @@ ## Output response array. Has as many rows as time samples (length of t) ## and as many columns as outputs. ## @item t -## Time row vector. +## Time row vector. It is always evenly spaced. ## @item x ## State trajectories array. Has @code{length (t)} rows and as many columns as states. ## @end table @@ -51,7 +60,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.2 +## Version: 0.3 function [y_r, t_r, x_r] = lsim (sys, u, t = [], x0 = [], method = "zoh") @@ -62,55 +71,67 @@ endif if (! isa (sys, "ss")) - sys = ss (sys); # sys must be proper + sys = ss (sys); # sys must be proper endif - [A, B, C, D, tsam] = ssdata (sys); - - discrete = ! isct (sys); # static gains are treated as analog systems - tsam = abs (tsam); # use 1 second as default if tsam is unspecified (-1) - + if (is_real_vector (u)) + u = reshape (u, [], 1); # allow row vectors for single-input systems + elseif (! is_real_matrix (u)) + error ("lsim: input signal u must be an array of real numbers"); + endif + + if (! is_real_vector (t) && ! isempty (t)) + error ("lsim: time vector t must be real or empty"); + endif + + discrete = ! isct (sys); # static gains are treated as continuous-time systems + tsam = abs (get (sys, "tsam")); # use 1 second as default if tsam is unspecified (-1) urows = rows (u); ucols = columns (u); - if (discrete) # discrete system - if (isempty (t)) + if (discrete) # discrete system + if (isempty (t)) # lsim (sys, u) dt = tsam; + tinitial = 0; tfinal = tsam * (urows - 1); - elseif (length (t) == 1) + elseif (length (t) == 1) # lsim (sys, u, tfinal) dt = tsam; + tinitial = 0; tfinal = t; - else + else # lsim (sys, u, t, ...) warning ("lsim: spacing of time vector has no effect on sampling time of discrete system"); dt = tsam; + tinitial = t(1); tfinal = t(end); endif - else # continuous system - if (isempty (t)) + else # continuous system + if (isempty (t)) # lsim (sys, u, [], ...) error ("lsim: invalid time vector"); - elseif (length (t) == 1) + elseif (length (t) == 1) # lsim (sys, u, tfinal, ...) dt = t / (urows - 1); + tinitial = 0; tfinal = t; - else - dt = t(2) - t(1); # assume that t is regularly spaced + else # lsim (sys, u, t, ...) + dt = t(2) - t(1); # assume that t is regularly spaced + tinitial = t(1); tfinal = t(end); endif - sys = c2d (sys, dt, method); # convert to discrete model + sys = c2d (sys, dt, method); # convert to discrete-time model endif - [F, G] = ssdata (sys); # matrices C and D don't change + [A, B, C, D] = ssdata (sys); - n = rows (F); # number of states - m = columns (G); # number of inputs - p = rows (C); # number of outputs + n = rows (A); # number of states + m = columns (B); # number of inputs + p = rows (C); # number of outputs - t = reshape (0 : dt : tfinal, [], 1); # time vector + t = reshape (tinitial : dt : tfinal, [], 1); # time vector trows = length (t); if (urows != trows) error ("lsim: input vector u must have %d rows", trows); endif - + if (ucols != m) error ("lsim: input vector u must have %d columns", m); endif @@ -122,25 +143,24 @@ ## initial conditions if (isempty (x0)) x0 = zeros (n, 1); - elseif (n != length (x0)) + elseif (n != length (x0) || is_real_vector (x0)) error ("initial: x0 must be a vector with %d elements", n); endif - x = reshape (x0, [], 1); # make sure that x is a column vector + x = reshape (x0, [], 1); # make sure that x is a column vector ## simulation for k = 1 : trows y(k, :) = C * x + D * u(k, :).'; x_arr(k, :) = x; - x = F * x + G * u(k, :).'; + x = A * x + B * u(k, :).'; endfor - if (! nargout) # plot information + if (nargout == 0) # plot information str = ["Linear Simulation Results of ", inputname(1)]; outname = get (sys, "outname"); outname = __labels__ (outname, "y_"); - - if (discrete) # discrete system + if (discrete) # discrete system for k = 1 : p subplot (p, 1, k); stairs (t, y(:, k)); @@ -151,7 +171,7 @@ ylabel (sprintf ("Amplitude %s", outname{k})); endfor xlabel ("Time [s]"); - else # continuous system + else # continuous system for k = 1 : p subplot (p, 1, k); plot (t, y(:, k)); @@ -163,10 +183,13 @@ endfor xlabel ("Time [s]"); endif - else # return values + else # return values y_r = y; t_r = t; x_r = x_arr; endif endfunction + + +## TODO: add test cases \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-03-05 00:08:47
|
Revision: 8155 http://octave.svn.sourceforge.net/octave/?rev=8155&view=rev Author: paramaniac Date: 2011-03-05 00:08:39 +0000 (Sat, 05 Mar 2011) Log Message: ----------- control: fixed gain for dss models. need to fix makefiles later. Modified Paths: -------------- trunk/octave-forge/main/control/devel/zeromake.m trunk/octave-forge/main/control/inst/@lti/zero.m trunk/octave-forge/main/control/inst/@ss/__zero__.m trunk/octave-forge/main/control/src/TG04BX.f trunk/octave-forge/main/control/src/slag08bd.cc Added Paths: ----------- trunk/octave-forge/main/control/devel/zerotest.m trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/src/sltg04bx.cc Modified: trunk/octave-forge/main/control/devel/zeromake.m =================================================================== --- trunk/octave-forge/main/control/devel/zeromake.m 2011-03-04 23:55:52 UTC (rev 8154) +++ trunk/octave-forge/main/control/devel/zeromake.m 2011-03-05 00:08:39 UTC (rev 8155) @@ -1 +1,9 @@ -mkoctfile TG04BX.f MB02RD.f MB02SD.f \ No newline at end of file +homedir = pwd (); +develdir = fileparts (which ("makefile_zero")); +srcdir = [develdir, "/../src"]; +cd (srcdir); + +## gain of descriptor state-space models +mkoctfile "-Wl,-framework" "-Wl,vecLib" \ + sltg04bx.cc \ + TG04BX.f MB02RD.f MB02SD.f \ No newline at end of file Added: trunk/octave-forge/main/control/devel/zerotest.m =================================================================== --- trunk/octave-forge/main/control/devel/zerotest.m (rev 0) +++ trunk/octave-forge/main/control/devel/zerotest.m 2011-03-05 00:08:39 UTC (rev 8155) @@ -0,0 +1,16 @@ +P = ss (-2, 3, 4, 0) + +Pi = inv (P) + +p = pole (P) +[z, k] = zero (P) + +pi = pole (Pi) +[zi, ki] = zero (Pi) + + +%{ +P = dss (-2, 3, 4, 5, 1) +[z, k] = zero (P) +[z, k] = zero (ss (-2, 3, 4, 5)) +%} \ No newline at end of file Added: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS (rev 0) +++ trunk/octave-forge/main/control/doc/NEWS 2011-03-05 00:08:39 UTC (rev 8155) @@ -0,0 +1,17 @@ +=============================================================================== +control-2.0.1 Release Date: 2011-mm-dd Maintainer: luk...@gm... +=============================================================================== + +** lsim.m + -- Support time vectors not starting at zero. (Thanks to Rob Frohne) + -- Improved help text. + +** @lti/zero.m + -- The gain of descriptor state-space models is now computed correctly. + + +=============================================================================== +control-2.0.0 Release Date: 2011-02-08 Maintainer: luk...@gm... +=============================================================================== + +** First official release. \ No newline at end of file Modified: trunk/octave-forge/main/control/inst/@lti/zero.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/zero.m 2011-03-04 23:55:52 UTC (rev 8154) +++ trunk/octave-forge/main/control/inst/@lti/zero.m 2011-03-05 00:08:39 UTC (rev 8155) @@ -1,4 +1,4 @@ -## Copyright (C) 2009 Lukas F. Reichlin +## Copyright (C) 2009, 2011 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -23,7 +23,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.1 +## Version: 0.1.1 function [zer, gain] = zero (sys) @@ -31,6 +31,6 @@ print_usage (); endif - [zer, gain] = __zero__ (sys); + [zer, gain] = __zero__ (sys, nargout); endfunction \ No newline at end of file Modified: trunk/octave-forge/main/control/inst/@ss/__zero__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__zero__.m 2011-03-04 23:55:52 UTC (rev 8154) +++ trunk/octave-forge/main/control/inst/@ss/__zero__.m 2011-03-05 00:08:39 UTC (rev 8155) @@ -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. ## @@ -22,15 +22,21 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.2 +## Version: 0.3 -function [zer, gain] = __zero__ (sys) +function [zer, gain] = __zero__ (sys, argc) if (isempty (sys.e)) [zer, gain] = slab08nd (sys.a, sys.b, sys.c, sys.d); else - [zer, gain] = slag08bd (sys.a, sys.e, sys.b, sys.c, sys.d); - ## FIXME: I'm not sure whether the gain is always correct + zer = slag08bd (sys.a, sys.e, sys.b, sys.c, sys.d); + if (argc > 1 && issiso (sys)) + pol = pole (sys); + gain = sltg04bx (sys.a, sys.e, sys.b, sys.c, sys.d, \ + real (pol), imag (pol), real (zer), imag (zer)); + else + gain = []; + endif endif endfunction \ No newline at end of file Modified: trunk/octave-forge/main/control/src/TG04BX.f =================================================================== --- trunk/octave-forge/main/control/src/TG04BX.f 2011-03-04 23:55:52 UTC (rev 8154) +++ trunk/octave-forge/main/control/src/TG04BX.f 2011-03-05 00:08:39 UTC (rev 8155) @@ -1,4 +1,4 @@ - SUBROUTINE TG04BX( IP, IZ, E, A, LDA, B, C, D, PR, PI, ZR, ZI, + SUBROUTINE TG04BX( IP, IZ, A, LDA, E, B, C, D, PR, PI, ZR, ZI, $ GAIN, IWORK ) C C WARNING @@ -148,7 +148,7 @@ DOUBLE PRECISION D, GAIN INTEGER IP, IZ, LDA C .. Array Arguments .. - DOUBLE PRECISION E(LDA,*), A(LDA,*), B(*), C(*), PI(*), PR(*), + DOUBLE PRECISION A(LDA,*), E(LDA,*), B(*), C(*), PI(*), PR(*), $ ZI(*), ZR(*) INTEGER IWORK(*) C .. Local Scalars .. @@ -168,10 +168,10 @@ C C Quick return if possible. C - IF( IP.EQ.0 ) THEN - GAIN = ZERO - RETURN - END IF +C IF( IP.EQ.0 ) THEN +C GAIN = ZERO +C RETURN +C END IF C C Compute a suitable value for S0 . C @@ -197,8 +197,8 @@ C C Form A - S0*E . C - DO 30 J = 1, IP - DO 25 I = 1, IP + DO 30 J = 1, LDA + DO 25 I = 1, LDA A(I,J) = A(I,J) - S0*E(I,J) 25 CONTINUE 30 CONTINUE @@ -206,15 +206,19 @@ C Compute the LU factorization of the matrix A - S0*E C (guaranteed to be nonsingular). C - CALL MB02SD( IP, A, LDA, IWORK, INFO ) +C CALL MB02SD( IP, A, LDA, IWORK, INFO ) + CALL MB02SD( LDA, A, LDA, IWORK, INFO ) C C Solve the linear system (A - S0*E)*x = b . C - CALL MB02RD( 'No Transpose', IP, 1, A, LDA, IWORK, B, IP, INFO ) +C CALL MB02RD( 'No Transpose', IP, 1, A, LDA, IWORK, B, IP, INFO ) +C CALL MB02RD( 'No Transpose', IP, 1, A, LDA, IWORK, B, LDA, INFO ) + CALL MB02RD( 'No Transpose', LDA, 1, A, LDA, IWORK, B, LDA, INFO ) C -1 C Compute c*(S0*E - A) *b + d . C - GAIN = D - DDOT( IP, C, 1, B, 1 ) +C GAIN = D - DDOT( IP, C, 1, B, 1 ) + GAIN = D - DDOT( LDA, C, 1, B, 1 ) C C Multiply by the products in terms of poles and zeros in (1). C Modified: trunk/octave-forge/main/control/src/slag08bd.cc =================================================================== --- trunk/octave-forge/main/control/src/slag08bd.cc 2011-03-04 23:55:52 UTC (rev 8154) +++ trunk/octave-forge/main/control/src/slag08bd.cc 2011-03-05 00:08:39 UTC (rev 8155) @@ -1,6 +1,6 @@ /* -Copyright (C) 2010 Lukas F. Reichlin +Copyright (C) 2010, 2011 Lukas F. Reichlin This file is part of LTI Syncope. @@ -23,7 +23,7 @@ Author: Lukas Reichlin <luk...@gm...> Created: September 2010 -Version: 0.1 +Version: 0.2 */ @@ -195,22 +195,6 @@ if (info2 != 0) error ("dss: zero: slag08bd: DGGEV returned info = %d", info2); - // calculate gain - octave_value gain = Matrix (0, 0);; - - if (m == 1 && p == 1) // FIXME: I'm not sure of this - { - if (nfz < n) - gain = args(3).matrix_value () * (args(1).matrix_value ()).inverse () * xpow (args(0).matrix_value (), double (n-1-nfz)) * args(2).matrix_value (); - // gain = args(3).matrix_value () * xpow (args(0).matrix_value (), double (n-1-nfz)) * (args(1).matrix_value ()).inverse () * args(2).matrix_value (); - // NOTE: content of matrices has changed - // c * inv (e) * a^(n-1-nfz) * b ? - // c * a^(n-1-nfz) * inv (e) * b ? - // good examples needed where a^(n-1-nfz) != eye (n) - else - gain = d; - } - // assemble complex vector - adapted from DEFUN complex in data.cc // LAPACK DGGEV.f says: // @@ -236,7 +220,6 @@ // return values retval(0) = zero; - retval(1) = gain; } return retval; Added: trunk/octave-forge/main/control/src/sltg04bx.cc =================================================================== --- trunk/octave-forge/main/control/src/sltg04bx.cc (rev 0) +++ trunk/octave-forge/main/control/src/sltg04bx.cc 2011-03-05 00:08:39 UTC (rev 8155) @@ -0,0 +1,117 @@ +/* + +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/>. + +Gain of descriptor state-space models. Based on SLICOT TB04BX.f. + +Author: Lukas Reichlin <luk...@gm...> +Created: March 2011 +Version: 0.1 + +*/ + +#include <octave/oct.h> +#include <f77-fcn.h> +#include "common.cc" +#include <complex> +#include <xpow.h> + +extern "C" +{ + int F77_FUNC (tg04bx, TG04BX) + (int& IP, int& IZ, + double* A, int& LDA, + double* E, + double* B, + double* C, + double* D, + double* PR, double* PI, + double* ZR, double* ZI, + double& GAIN, + int* IWORK); +} + +DEFUN_DLD (sltg04bx, args, nargout, + "-*- texinfo -*-\n\ +Slicot TG04BX Release 5.0\n\ +No argument checking.\n\ +For internal use only.") +{ + int nargin = args.length (); + octave_value_list retval; + + if (nargin != 9) + { + print_usage (); + } + else + { + // arguments in + Matrix a = args(0).matrix_value (); + Matrix e = args(1).matrix_value (); + Matrix b = args(2).matrix_value (); + Matrix c = args(3).matrix_value (); + Matrix d = args(4).matrix_value (); + + ColumnVector pr = args(5).column_vector_value (); + ColumnVector pi = args(6).column_vector_value (); + + ColumnVector zr = args(7).column_vector_value (); + ColumnVector zi = args(8).column_vector_value (); + + int n = a.rows (); // n: number of states + int ip = pr.length (); // ip: number of finite poles + int iz = zr.length (); // iz: number of zeros + + // For ss, IP = n is always true. + // However, dss models with poles at infinity + // (filtered by pole.m) may have IP <= n + + // Take pr.length == pi.length == ip for granted, + // and the same for iz, zr and zi. + + int lda = max (1, n); + + // arguments out + double gain; + + // workspace + OCTAVE_LOCAL_BUFFER (int, iwork, lda); + + + F77_XFCN (tg04bx, TG04BX, + (ip, iz, + a.fortran_vec (), lda, + e.fortran_vec (), + b.fortran_vec (), + c.fortran_vec (), + d.fortran_vec (), + pr.fortran_vec (), pi.fortran_vec (), + zr.fortran_vec (), zi.fortran_vec (), + gain, + iwork)); + + if (f77_exception_encountered) + error ("dss: zero: sltg04bx: exception in TG04BX"); + + // return values + retval(0) = octave_value (gain); + } + + return retval; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-03-05 00:23:19
|
Revision: 8156 http://octave.svn.sourceforge.net/octave/?rev=8156&view=rev Author: paramaniac Date: 2011-03-05 00:23:13 +0000 (Sat, 05 Mar 2011) Log Message: ----------- control: fix @ss/__sys2tf__.m for DSS to TF conversion Modified Paths: -------------- trunk/octave-forge/main/control/devel/zerotest.m trunk/octave-forge/main/control/inst/@ss/__sys2tf__.m Modified: trunk/octave-forge/main/control/devel/zerotest.m =================================================================== --- trunk/octave-forge/main/control/devel/zerotest.m 2011-03-05 00:08:39 UTC (rev 8155) +++ trunk/octave-forge/main/control/devel/zerotest.m 2011-03-05 00:23:13 UTC (rev 8156) @@ -13,4 +13,13 @@ P = dss (-2, 3, 4, 5, 1) [z, k] = zero (P) [z, k] = zero (ss (-2, 3, 4, 5)) -%} \ No newline at end of file +%} + +P_tf = tf (P) +Pi_tf = tf (Pi) + +p_tf = pole (P_tf) +[z_tf, k_tf] = zero (P_tf) + +pi_tf = pole (Pi_tf) +[zi_tf, ki_tf] = zero (Pi_tf) \ No newline at end of file Modified: trunk/octave-forge/main/control/inst/@ss/__sys2tf__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__sys2tf__.m 2011-03-05 00:08:39 UTC (rev 8155) +++ trunk/octave-forge/main/control/inst/@ss/__sys2tf__.m 2011-03-05 00:23:13 UTC (rev 8156) @@ -1,4 +1,4 @@ -## Copyright (C) 2009 Lukas F. Reichlin +## Copyright (C) 2009, 2011 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -20,7 +20,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.1 +## Version: 0.1.1 function [retsys, retlti] = __sys2tf__ (sys) @@ -33,9 +33,10 @@ den = 1; else # default case [zer, gain] = zero (sys); + pol = pole (sys); num = gain * real (poly (zer)); - den = real (poly (sys.a)); + den = real (poly (pol)); endif retsys = tf (num, den, get (sys, "tsam")); # tsam needed to set appropriate tfvar This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-03-06 00:11:43
|
Revision: 8157 http://octave.svn.sourceforge.net/octave/?rev=8157&view=rev Author: paramaniac Date: 2011-03-06 00:11:36 +0000 (Sun, 06 Mar 2011) Log Message: ----------- control: update makefile, add test for dss gain Modified Paths: -------------- trunk/octave-forge/main/control/devel/makefile_zero.m trunk/octave-forge/main/control/inst/ltimodels.m trunk/octave-forge/main/control/src/Makefile Removed Paths: ------------- trunk/octave-forge/main/control/devel/zeromake.m trunk/octave-forge/main/control/devel/zerotest.m Property Changed: ---------------- trunk/octave-forge/main/control/src/ Modified: trunk/octave-forge/main/control/devel/makefile_zero.m =================================================================== --- trunk/octave-forge/main/control/devel/makefile_zero.m 2011-03-05 00:23:13 UTC (rev 8156) +++ trunk/octave-forge/main/control/devel/makefile_zero.m 2011-03-06 00:11:36 UTC (rev 8157) @@ -25,4 +25,9 @@ AG08BD.f AG08BY.f TG01AD.f TB01XD.f MA02CD.f \ TG01FD.f MA02BD.f MB03OY.f +## gain of descriptor state-space models +mkoctfile "-Wl,-framework" "-Wl,vecLib" \ + sltg04bx.cc \ + TG04BX.f MB02RD.f MB02SD.f + cd (homedir); \ No newline at end of file Deleted: trunk/octave-forge/main/control/devel/zeromake.m =================================================================== --- trunk/octave-forge/main/control/devel/zeromake.m 2011-03-05 00:23:13 UTC (rev 8156) +++ trunk/octave-forge/main/control/devel/zeromake.m 2011-03-06 00:11:36 UTC (rev 8157) @@ -1,9 +0,0 @@ -homedir = pwd (); -develdir = fileparts (which ("makefile_zero")); -srcdir = [develdir, "/../src"]; -cd (srcdir); - -## gain of descriptor state-space models -mkoctfile "-Wl,-framework" "-Wl,vecLib" \ - sltg04bx.cc \ - TG04BX.f MB02RD.f MB02SD.f \ No newline at end of file Deleted: trunk/octave-forge/main/control/devel/zerotest.m =================================================================== --- trunk/octave-forge/main/control/devel/zerotest.m 2011-03-05 00:23:13 UTC (rev 8156) +++ trunk/octave-forge/main/control/devel/zerotest.m 2011-03-06 00:11:36 UTC (rev 8157) @@ -1,25 +0,0 @@ -P = ss (-2, 3, 4, 0) - -Pi = inv (P) - -p = pole (P) -[z, k] = zero (P) - -pi = pole (Pi) -[zi, ki] = zero (Pi) - - -%{ -P = dss (-2, 3, 4, 5, 1) -[z, k] = zero (P) -[z, k] = zero (ss (-2, 3, 4, 5)) -%} - -P_tf = tf (P) -Pi_tf = tf (Pi) - -p_tf = pole (P_tf) -[z_tf, k_tf] = zero (P_tf) - -pi_tf = pole (Pi_tf) -[zi_tf, ki_tf] = zero (Pi_tf) \ No newline at end of file Modified: trunk/octave-forge/main/control/inst/ltimodels.m =================================================================== --- trunk/octave-forge/main/control/inst/ltimodels.m 2011-03-05 00:23:13 UTC (rev 8156) +++ trunk/octave-forge/main/control/inst/ltimodels.m 2011-03-06 00:11:36 UTC (rev 8157) @@ -937,3 +937,31 @@ %! Me = [Ae, Be; Ce, De]; %! %!assert (M, Me, 1e-4); + + +## Gain of descriptor state-space models +%!shared p, pi, z, zi, k, ki, p_tf, pi_tf, z_tf, zi_tf, k_tf, ki_tf +%! P = ss (-2, 3, 4, 5); +%! Pi = inv (P); +%! +%! p = pole (P); +%! [z, k] = zero (P); +%! +%! pi = pole (Pi); +%! [zi, ki] = zero (Pi); +%! +%! P_tf = tf (P); +%! Pi_tf = tf (Pi); +%! +%! p_tf = pole (P_tf); +%! [z_tf, k_tf] = zero (P_tf); +%! +%! pi_tf = pole (Pi_tf); +%! [zi_tf, ki_tf] = zero (Pi_tf); +%! +%!assert (p, zi, 1e-4); +%!assert (z, pi, 1e-4); +%!assert (k, inv (ki), 1e-4); +%!assert (p_tf, zi_tf, 1e-4); +%!assert (z_tf, pi_tf, 1e-4); +%!assert (k_tf, inv (ki_tf), 1e-4); Property changes on: trunk/octave-forge/main/control/src ___________________________________________________________________ Modified: svn:ignore - is_real_matrix.oct is_real_scalar.oct is_real_square_matrix.oct is_real_vector.oct slab01od.oct slab08nd.oct slab13ad.oct slab13bd.oct slab13dd.oct slag08bd.oct slsb01bd.oct slsb02od.oct slsb03md.oct slsb03od.oct slsb04md.oct slsb04qd.oct slsb10dd.oct slsb10ed.oct slsb10fd.oct slsb10hd.oct slsg02ad.oct slsg03ad.oct slsg03bd.oct sltb01pd.oct sltg01hd.oct sltg01id.oct sltg01jd.oct + is_real_matrix.oct is_real_scalar.oct is_real_square_matrix.oct is_real_vector.oct slab01od.oct slab08nd.oct slab13ad.oct slab13bd.oct slab13dd.oct slag08bd.oct slsb01bd.oct slsb02od.oct slsb03md.oct slsb03od.oct slsb04md.oct slsb04qd.oct slsb10dd.oct slsb10ed.oct slsb10fd.oct slsb10hd.oct slsg02ad.oct slsg03ad.oct slsg03bd.oct sltb01pd.oct sltg01hd.oct sltg01id.oct sltg01jd.oct sltg04bx.oct Modified: trunk/octave-forge/main/control/src/Makefile =================================================================== --- trunk/octave-forge/main/control/src/Makefile 2011-03-05 00:23:13 UTC (rev 8156) +++ trunk/octave-forge/main/control/src/Makefile 2011-03-06 00:11:36 UTC (rev 8157) @@ -2,7 +2,7 @@ slsb01bd.oct slsb10fd.oct slsb10dd.oct slsb03md.oct slsb04md.oct \ slsb04qd.oct slsg03ad.oct slsb02od.oct slab13ad.oct slab01od.oct \ sltb01pd.oct slsb03od.oct slsg03bd.oct slag08bd.oct sltg01jd.oct \ - sltg01hd.oct sltg01id.oct slsg02ad.oct \ + sltg01hd.oct sltg01id.oct slsg02ad.oct sltg04bx.oct \ is_real_scalar.oct is_real_vector.oct is_real_matrix.oct \ is_real_square_matrix.oct @@ -166,6 +166,11 @@ SG02AD.f SB02OU.f SB02OV.f SB02OW.f SB02OY.f \ MB01SD.f MB02VD.f MB02PD.f MA02GD.f +# gain of descriptor state-space models +sltg04bx.oct: sltg04bx.cc + mkoctfile sltg04bx.cc \ + TG04BX.f MB02RD.f MB02SD.f + # helpers is_real_scalar.oct: is_real_scalar.cc mkoctfile is_real_scalar.cc This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-03-06 00:35:20
|
Revision: 8158 http://octave.svn.sourceforge.net/octave/?rev=8158&view=rev Author: paramaniac Date: 2011-03-06 00:35:14 +0000 (Sun, 06 Mar 2011) Log Message: ----------- control: prepare release 2.0.1 Modified Paths: -------------- trunk/octave-forge/main/control/DESCRIPTION trunk/octave-forge/main/control/Makefile trunk/octave-forge/main/control/devel/RELEASE_PACKAGE Added Paths: ----------- trunk/octave-forge/main/control/NEWS Removed Paths: ------------- trunk/octave-forge/main/control/doc/NEWS Modified: trunk/octave-forge/main/control/DESCRIPTION =================================================================== --- trunk/octave-forge/main/control/DESCRIPTION 2011-03-06 00:11:36 UTC (rev 8157) +++ trunk/octave-forge/main/control/DESCRIPTION 2011-03-06 00:35:14 UTC (rev 8158) @@ -1,6 +1,6 @@ Name: Control -Version: 2.0.0 -Date: 2011-02-08 +Version: 2.0.1 +Date: 2011-03-06 Author: Lukas Reichlin <luk...@gm...> Maintainer: Lukas Reichlin <luk...@gm...> Title: Control Systems Modified: trunk/octave-forge/main/control/Makefile =================================================================== --- trunk/octave-forge/main/control/Makefile 2011-03-06 00:11:36 UTC (rev 8157) +++ trunk/octave-forge/main/control/Makefile 2011-03-06 00:35:14 UTC (rev 8158) @@ -1,6 +1,6 @@ sinclude ../../Makeconf -PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard inst/*) +PKG_FILES = COPYING DESCRIPTION INDEX NEWS $(wildcard inst/*) SUBDIRS = doc/ .PHONY: $(SUBDIRS) Copied: trunk/octave-forge/main/control/NEWS (from rev 8157, trunk/octave-forge/main/control/doc/NEWS) =================================================================== --- trunk/octave-forge/main/control/NEWS (rev 0) +++ trunk/octave-forge/main/control/NEWS 2011-03-06 00:35:14 UTC (rev 8158) @@ -0,0 +1,21 @@ +=============================================================================== +control-2.0.1 Release Date: 2011-03-06 Maintainer: luk...@gm... +=============================================================================== + +** lsim.m + -- Support time vectors not starting at zero. (Thanks to Rob Frohne) + -- Improved help text. + +** @lti/zero.m + -- The gain of descriptor state-space models is now computed correctly. + (fingers crossed) + + +=============================================================================== +control-2.0.0 Release Date: 2011-02-08 Maintainer: luk...@gm... +=============================================================================== + +** First official release. + + +=============================================================================== Modified: trunk/octave-forge/main/control/devel/RELEASE_PACKAGE =================================================================== --- trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-03-06 00:11:36 UTC (rev 8157) +++ trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-03-06 00:35:14 UTC (rev 8158) @@ -16,12 +16,12 @@ rm -R ~/octave/__TEMP__/control/devel cd ~/octave/__TEMP__ grep -i version control/DESCRIPTION -tar czf control-2.0.0.tar.gz control/ -md5 control-2.0.0.tar.gz -md5 control-2.0.0.tar.gz > md5_control_pkg.txt -uuencode control-2.0.0.tar.gz < control-2.0.0.tar.gz > control-2.0.0.tar.gz.uue +tar czf control-2.0.1.tar.gz control/ +md5 control-2.0.1.tar.gz +md5 control-2.0.1.tar.gz > md5_control_pkg.txt +uuencode control-2.0.1.tar.gz < control-2.0.1.tar.gz > control-2.0.1.tar.gz.uue octave -q --eval \ -"pkg install control-2.0.0.tar.gz" +"pkg install control-2.0.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 @@ -36,7 +36,7 @@ ===================================================================================== rm -R ~/octave/__TEMP__ -rm -R ~/octave/control-2.0.0 +rm -R ~/octave/control-2.0.1 ===================================================================================== Deleted: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-03-06 00:11:36 UTC (rev 8157) +++ trunk/octave-forge/main/control/doc/NEWS 2011-03-06 00:35:14 UTC (rev 8158) @@ -1,17 +0,0 @@ -=============================================================================== -control-2.0.1 Release Date: 2011-mm-dd Maintainer: luk...@gm... -=============================================================================== - -** lsim.m - -- Support time vectors not starting at zero. (Thanks to Rob Frohne) - -- Improved help text. - -** @lti/zero.m - -- The gain of descriptor state-space models is now computed correctly. - - -=============================================================================== -control-2.0.0 Release Date: 2011-02-08 Maintainer: luk...@gm... -=============================================================================== - -** First official release. \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-03-06 01:09:05
|
Revision: 8160 http://octave.svn.sourceforge.net/octave/?rev=8160&view=rev Author: paramaniac Date: 2011-03-06 01:08:58 +0000 (Sun, 06 Mar 2011) Log Message: ----------- control: move back NEWS to /doc, revert Makefile. NEWS was ignored by installer. Modified Paths: -------------- trunk/octave-forge/main/control/Makefile Added Paths: ----------- trunk/octave-forge/main/control/doc/NEWS Removed Paths: ------------- trunk/octave-forge/main/control/NEWS Modified: trunk/octave-forge/main/control/Makefile =================================================================== --- trunk/octave-forge/main/control/Makefile 2011-03-06 00:52:25 UTC (rev 8159) +++ trunk/octave-forge/main/control/Makefile 2011-03-06 01:08:58 UTC (rev 8160) @@ -1,6 +1,6 @@ sinclude ../../Makeconf -PKG_FILES = COPYING DESCRIPTION INDEX NEWS $(wildcard inst/*) +PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard inst/*) SUBDIRS = doc/ .PHONY: $(SUBDIRS) Deleted: trunk/octave-forge/main/control/NEWS =================================================================== --- trunk/octave-forge/main/control/NEWS 2011-03-06 00:52:25 UTC (rev 8159) +++ trunk/octave-forge/main/control/NEWS 2011-03-06 01:08:58 UTC (rev 8160) @@ -1,21 +0,0 @@ -=============================================================================== -control-2.0.1 Release Date: 2011-03-06 Release Manager: Lukas Reichlin -=============================================================================== - -** lsim.m - -- Support time vectors not starting at zero. (Thanks to Rob Frohne) - -- Improved help text. - -** @lti/zero.m - -- The gain of descriptor state-space models is now computed correctly. - (fingers crossed) - - -=============================================================================== -control-2.0.0 Release Date: 2011-02-08 Release Manager: Lukas Reichlin -=============================================================================== - -** First official release. - - -=============================================================================== Copied: trunk/octave-forge/main/control/doc/NEWS (from rev 8159, trunk/octave-forge/main/control/NEWS) =================================================================== --- trunk/octave-forge/main/control/doc/NEWS (rev 0) +++ trunk/octave-forge/main/control/doc/NEWS 2011-03-06 01:08:58 UTC (rev 8160) @@ -0,0 +1,21 @@ +=============================================================================== +control-2.0.1 Release Date: 2011-03-06 Release Manager: Lukas Reichlin +=============================================================================== + +** lsim.m + -- Support time vectors not starting at zero. (Thanks to Rob Frohne) + -- Improved help text. + +** @lti/zero.m + -- The gain of descriptor state-space models is now computed correctly. + (fingers crossed) + + +=============================================================================== +control-2.0.0 Release Date: 2011-02-08 Release Manager: Lukas Reichlin +=============================================================================== + +** First official release. + + +=============================================================================== This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-04-13 21:21:44
|
Revision: 8204 http://octave.svn.sourceforge.net/octave/?rev=8204&view=rev Author: paramaniac Date: 2011-04-13 21:21:38 +0000 (Wed, 13 Apr 2011) Log Message: ----------- control: minor doc fix Modified Paths: -------------- trunk/octave-forge/main/control/devel/@frd/frd.m trunk/octave-forge/main/control/inst/@ss/ss.m trunk/octave-forge/main/control/inst/@tf/tf.m trunk/octave-forge/main/control/inst/dss.m Modified: trunk/octave-forge/main/control/devel/@frd/frd.m =================================================================== --- trunk/octave-forge/main/control/devel/@frd/frd.m 2011-04-13 21:19:36 UTC (rev 8203) +++ trunk/octave-forge/main/control/devel/@frd/frd.m 2011-04-13 21:21:38 UTC (rev 8204) @@ -33,8 +33,8 @@ ## @item w ## Frequency vector (lw-by-1) in radian per second [rad/s]. ## @item tsam -## Sampling time. If @var{tsam} is not specified, a continuous-time -## model is assumed. +## 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 (frd)} for more information. Modified: trunk/octave-forge/main/control/inst/@ss/ss.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/ss.m 2011-04-13 21:19:36 UTC (rev 8203) +++ trunk/octave-forge/main/control/inst/@ss/ss.m 2011-04-13 21:21:38 UTC (rev 8204) @@ -37,7 +37,7 @@ ## Feedthrough matrix (p-by-m). ## If @var{d} is empty @code{[]} or not specified, a zero matrix is assumed. ## @item tsam -## Sampling time. If @var{tsam} is not specified, a continuous-time model is assumed. +## 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 (ss)} for more information. Modified: trunk/octave-forge/main/control/inst/@tf/tf.m =================================================================== --- trunk/octave-forge/main/control/inst/@tf/tf.m 2011-04-13 21:19:36 UTC (rev 8203) +++ trunk/octave-forge/main/control/inst/@tf/tf.m 2011-04-13 21:21:38 UTC (rev 8204) @@ -32,7 +32,7 @@ ## Denominator or cell of denominators. Each denominator must be a row vector ## containing the exponents of the polynomial in descending order. ## @item tsam -## Sampling time. If @var{tsam} is not specified, a continuous-time +## Sampling time in seconds. If @var{tsam} is not specified, a continuous-time ## model is assumed. ## @item @dots{} ## Optional pairs of properties and values. Modified: trunk/octave-forge/main/control/inst/dss.m =================================================================== --- trunk/octave-forge/main/control/inst/dss.m 2011-04-13 21:19:36 UTC (rev 8203) +++ trunk/octave-forge/main/control/inst/dss.m 2011-04-13 21:21:38 UTC (rev 8204) @@ -35,8 +35,8 @@ ## @item e ## Descriptor matrix (n-by-n). ## @item tsam -## Sampling time. If @var{tsam} is not specified, a continuous-time -## model is assumed. +## 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 (dss)} for more information. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-04-15 00:12:35
|
Revision: 8212 http://octave.svn.sourceforge.net/octave/?rev=8212&view=rev Author: paramaniac Date: 2011-04-15 00:12:28 +0000 (Fri, 15 Apr 2011) Log Message: ----------- control: return argument rcond for h2syn and hinfsyn, documentation still missing Modified Paths: -------------- trunk/octave-forge/main/control/inst/h2syn.m trunk/octave-forge/main/control/inst/hinfsyn.m trunk/octave-forge/main/control/src/slsb10dd.cc trunk/octave-forge/main/control/src/slsb10ed.cc trunk/octave-forge/main/control/src/slsb10fd.cc trunk/octave-forge/main/control/src/slsb10hd.cc Modified: trunk/octave-forge/main/control/inst/h2syn.m =================================================================== --- trunk/octave-forge/main/control/inst/h2syn.m 2011-04-14 00:49:06 UTC (rev 8211) +++ trunk/octave-forge/main/control/inst/h2syn.m 2011-04-15 00:12:28 UTC (rev 8212) @@ -119,9 +119,9 @@ ## H-2 synthesis if (isct (P)) # continuous plant - [ak, bk, ck, dk] = slsb10hd (a, b, c, d, ncon, nmeas); + [ak, bk, ck, dk, rcond] = slsb10hd (a, b, c, d, ncon, nmeas); else # discrete plant - [ak, bk, ck, dk] = slsb10ed (a, b, c, d, ncon, nmeas); + [ak, bk, ck, dk, rcond] = slsb10ed (a, b, c, d, ncon, nmeas); endif ## controller @@ -132,6 +132,9 @@ varargout{1} = N; if (nargout > 2) varargout{2} = norm (N, 2); + if (nargout > 3) + varargout{3} = rcond; + endif endif endif Modified: trunk/octave-forge/main/control/inst/hinfsyn.m =================================================================== --- trunk/octave-forge/main/control/inst/hinfsyn.m 2011-04-14 00:49:06 UTC (rev 8211) +++ trunk/octave-forge/main/control/inst/hinfsyn.m 2011-04-15 00:12:28 UTC (rev 8212) @@ -122,9 +122,9 @@ ## H-infinity synthesis if (isct (P)) # continuous plant - [ak, bk, ck, dk] = slsb10fd (a, b, c, d, ncon, nmeas, gmax); + [ak, bk, ck, dk, rcond] = slsb10fd (a, b, c, d, ncon, nmeas, gmax); else # discrete plant - [ak, bk, ck, dk] = slsb10dd (a, b, c, d, ncon, nmeas, gmax); + [ak, bk, ck, dk, rcond] = slsb10dd (a, b, c, d, ncon, nmeas, gmax); endif ## controller @@ -135,6 +135,9 @@ varargout{1} = N; if (nargout > 2) varargout{2} = norm (N, inf); + if (nargout > 3) + varargout{3} = rcond; + endif endif endif Modified: trunk/octave-forge/main/control/src/slsb10dd.cc =================================================================== --- trunk/octave-forge/main/control/src/slsb10dd.cc 2011-04-14 00:49:06 UTC (rev 8211) +++ trunk/octave-forge/main/control/src/slsb10dd.cc 2011-04-15 00:12:28 UTC (rev 8212) @@ -161,6 +161,7 @@ retval(1) = bk; retval(2) = ck; retval(3) = dk; + retval(4) = rcond; } return retval; Modified: trunk/octave-forge/main/control/src/slsb10ed.cc =================================================================== --- trunk/octave-forge/main/control/src/slsb10ed.cc 2011-04-14 00:49:06 UTC (rev 8211) +++ trunk/octave-forge/main/control/src/slsb10ed.cc 2011-04-15 00:12:28 UTC (rev 8212) @@ -149,6 +149,7 @@ retval(1) = bk; retval(2) = ck; retval(3) = dk; + retval(4) = rcond; } return retval; Modified: trunk/octave-forge/main/control/src/slsb10fd.cc =================================================================== --- trunk/octave-forge/main/control/src/slsb10fd.cc 2011-04-14 00:49:06 UTC (rev 8211) +++ trunk/octave-forge/main/control/src/slsb10fd.cc 2011-04-15 00:12:28 UTC (rev 8212) @@ -154,6 +154,7 @@ retval(1) = bk; retval(2) = ck; retval(3) = dk; + retval(4) = rcond; } return retval; Modified: trunk/octave-forge/main/control/src/slsb10hd.cc =================================================================== --- trunk/octave-forge/main/control/src/slsb10hd.cc 2011-04-14 00:49:06 UTC (rev 8211) +++ trunk/octave-forge/main/control/src/slsb10hd.cc 2011-04-15 00:12:28 UTC (rev 8212) @@ -146,6 +146,7 @@ retval(1) = bk; retval(2) = ck; retval(3) = dk; + retval(4) = rcond; } return retval; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-06-19 12:41:33
|
Revision: 8341 http://octave.svn.sourceforge.net/octave/?rev=8341&view=rev Author: paramaniac Date: 2011-06-19 12:41:27 +0000 (Sun, 19 Jun 2011) Log Message: ----------- control: commit "forgotten" changes Modified Paths: -------------- trunk/octave-forge/main/control/inst/@lti/dssdata.m trunk/octave-forge/main/control/src/slab08nd.cc Added Paths: ----------- trunk/octave-forge/main/control/devel/scale/prescale.m Added: trunk/octave-forge/main/control/devel/scale/prescale.m =================================================================== --- trunk/octave-forge/main/control/devel/scale/prescale.m (rev 0) +++ trunk/octave-forge/main/control/devel/scale/prescale.m 2011-06-19 12:41:27 UTC (rev 8341) @@ -0,0 +1,62 @@ +function [e, f, g, h, j] = prescale (a, b, c, d) + [e, f, g, h, j] = sltb01id (a, b, c, d) +end + +%function [a, b, c, maxred, scale] = prescale (a, b, c, maxred) +% +% [a, b, c, maxred, scale] = sltb01id (a, b, c, maxred); +% +%endfunction + + +## state-space models +%!shared A, B, C, Ao, Bo, Co, SCALEo, MAXREDo, Ae, Be, Ce, SCALEe, MAXREDe +%! A = [ 0.0 1.0000e+000 0.0 0.0 0.0 +%! -1.5800e+006 -1.2570e+003 0.0 0.0 0.0 +%! 3.5410e+014 0.0 -1.4340e+003 0.0 -5.3300e+011 +%! 0.0 0.0 0.0 0.0 1.0000e+000 +%! 0.0 0.0 0.0 -1.8630e+004 -1.4820e+000 ]; +%! +%! B = [ 0.0 0.0 +%! 1.1030e+002 0.0 +%! 0.0 0.0 +%! 0.0 0.0 +%! 0.0 8.3330e-003 ]; +%! +%! C = [ 1.0000e+000 0.0 0.0 0.0 0.0 +%! 0.0 0.0 1.0000e+000 0.0 0.0 +%! 0.0 0.0 0.0 1.0000e+000 0.0 +%! 6.6640e-001 0.0 -6.2000e-013 0.0 0.0 +%! 0.0 0.0 -1.0000e-003 1.8960e+006 1.5080e+002 ]; +%! +%! MAXRED = 0.0; +%! +%! [Ao, Bo, Co, MAXREDo, SCALEo] = prescale (A, B, C, MAXRED); +%! +%! Ae = [ 0.0000000D+00 0.1000000D+05 0.0000000D+00 0.0000000D+00 0.0000000D+00 +%! -0.1580000D+03 -0.1257000D+04 0.0000000D+00 0.0000000D+00 0.0000000D+00 +%! 0.3541000D+05 0.0000000D+00 -0.1434000D+04 0.0000000D+00 -0.5330000D+03 +%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D+03 +%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 -0.1863000D+03 -0.1482000D+01 ]; +%! +%! Be = [ 0.0000000D+00 0.0000000D+00 +%! 0.1103000D+04 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.8333000D+02 ]; +%! +%! Ce = [ 0.1000000D-04 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 0.1000000D+06 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D-05 0.0000000D+00 +%! 0.6664000D-05 0.0000000D+00 -0.6200000D-07 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 -0.1000000D+03 0.1896000D+01 0.1508000D-01 ]; +%! +%! SCALEe = [0.1000000D-04 0.1000000D+00 0.1000000D+06 0.1000000D-05 0.1000000D-03 ]; +%! +%! MAXREDe = 0.3488E+10; +%! +%!assert (Ao, Ae, 1e-4); +%!assert (Bo, Be, 1e-4); +%!assert (Co, Ce, 1e-4); +%!assert (MAXREDo, MAXREDe, 1e-4); +%!assert (SCALEo, SCALEe, 1e-4); \ No newline at end of file Modified: trunk/octave-forge/main/control/inst/@lti/dssdata.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/dssdata.m 2011-06-16 10:21:34 UTC (rev 8340) +++ trunk/octave-forge/main/control/inst/@lti/dssdata.m 2011-06-19 12:41:27 UTC (rev 8341) @@ -17,7 +17,38 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}, @var{e}, @var{tsam}] =} dssdata (@var{sys}) +## @deftypefn {Function File} {[@var{a}, @var{b}, @var{c}, @var{d}, @var{e}, @var{tsam}] =} dssdata (@var{sys}, @var{[]}) ## Access descriptor state-space model data. +## Argument @var{sys} is not limited to descriptor state-space models. +## If @var{sys} is not a descriptor state-space model, it is converted automatically. +## +## @strong{Inputs} +## @table @var +## @item sys +## Any type of LTI model. +## @item [] +## In case @var{sys} is not a dss model (descriptor matrix @var{e} empty), +## @code{dssdata (sys, [])} returns the empty element @code{e = []} whereas +## @code{dssdata (sys)} returns the identity matrix @code{e = eye (size (a))}. +## @end table +## +## @strong{Outputs} +## @table @var +## @item a +## State transition matrix (n-by-n). +## @item b +## Input matrix (n-by-m). +## @item c +## Measurement matrix (p-by-n). +## @item d +## Feedthrough matrix (p-by-m). +## @item e +## Descriptor matrix (n-by-n). +## @item tsam +## Sampling time in seconds. If @var{sys} is a continuous-time model, +## a zero is returned. +## @end table +## ## @end deftypefn ## Author: Lukas Reichlin <luk...@gm...> Modified: trunk/octave-forge/main/control/src/slab08nd.cc =================================================================== --- trunk/octave-forge/main/control/src/slab08nd.cc 2011-06-16 10:21:34 UTC (rev 8340) +++ trunk/octave-forge/main/control/src/slab08nd.cc 2011-06-19 12:41:27 UTC (rev 8341) @@ -38,10 +38,10 @@ int F77_FUNC (ab08nd, AB08ND) (char& EQUIL, int& N, int& M, int& P, - double* A, int& LDA, - double* B, int& LDB, - double* C, int& LDC, - double* D, int& LDD, + const double* A, int& LDA, + const double* B, int& LDB, + const double* C, int& LDC, + const double* D, int& LDD, int& NU, int& RANK, int& DINFZ, int& NKROR, int& NKROL, int* INFZ, int* KRONR, int* KRONL, @@ -54,8 +54,8 @@ int F77_FUNC (dggev, DGGEV) (char& JOBVL, char& JOBVR, int& N, - double* A, int& LDA, - double* B, int& LDB, + double* AF, int& LDAF, + double* BF, int& LDBF, double* ALPHAR, double* ALPHAI, double* BETA, double* VL, int& LDVL, @@ -82,10 +82,10 @@ // arguments in char equil = 'N'; - Matrix a = args(0).matrix_value (); - Matrix b = args(1).matrix_value (); - Matrix c = args(2).matrix_value (); - Matrix d = args(3).matrix_value (); + const Matrix a = args(0).matrix_value (); + const Matrix b = args(1).matrix_value (); + const Matrix c = args(2).matrix_value (); + const Matrix d = args(3).matrix_value (); int n = a.rows (); // n: number of states int m = b.columns (); // m: number of inputs This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-06-29 17:59:43
|
Revision: 8363 http://octave.svn.sourceforge.net/octave/?rev=8363&view=rev Author: paramaniac Date: 2011-06-29 17:59:36 +0000 (Wed, 29 Jun 2011) Log Message: ----------- control: add prescale command Modified Paths: -------------- trunk/octave-forge/main/control/inst/ltimodels.m Added Paths: ----------- trunk/octave-forge/main/control/inst/@lti/prescale.m trunk/octave-forge/main/control/inst/@ss/__prescale__.m Removed Paths: ------------- trunk/octave-forge/main/control/devel/scale/prescale.m trunk/octave-forge/main/control/devel/scale/scale.m Deleted: trunk/octave-forge/main/control/devel/scale/prescale.m =================================================================== --- trunk/octave-forge/main/control/devel/scale/prescale.m 2011-06-29 11:06:59 UTC (rev 8362) +++ trunk/octave-forge/main/control/devel/scale/prescale.m 2011-06-29 17:59:36 UTC (rev 8363) @@ -1,62 +0,0 @@ -function [a, b, c, maxred, scale] = prescale (a, b, c, maxred) - - if (nargin != 4) - print_usage (); - endif - - [a, b, c, maxred, scale] = sltb01id (a, b, c, maxred); - -endfunction - - -## state-space models -%!shared A, B, C, Ao, Bo, Co, SCALEo, MAXREDo, Ae, Be, Ce, SCALEe, MAXREDe -%! A = [ 0.0 1.0000e+000 0.0 0.0 0.0 -%! -1.5800e+006 -1.2570e+003 0.0 0.0 0.0 -%! 3.5410e+014 0.0 -1.4340e+003 0.0 -5.3300e+011 -%! 0.0 0.0 0.0 0.0 1.0000e+000 -%! 0.0 0.0 0.0 -1.8630e+004 -1.4820e+000 ]; -%! -%! B = [ 0.0 0.0 -%! 1.1030e+002 0.0 -%! 0.0 0.0 -%! 0.0 0.0 -%! 0.0 8.3330e-003 ]; -%! -%! C = [ 1.0000e+000 0.0 0.0 0.0 0.0 -%! 0.0 0.0 1.0000e+000 0.0 0.0 -%! 0.0 0.0 0.0 1.0000e+000 0.0 -%! 6.6640e-001 0.0 -6.2000e-013 0.0 0.0 -%! 0.0 0.0 -1.0000e-003 1.8960e+006 1.5080e+002 ]; -%! -%! MAXRED = 0.0; -%! -%! [Ao, Bo, Co, MAXREDo, SCALEo] = prescale (A, B, C, MAXRED); -%! -%! Ae = [ 0.0000000D+00 0.1000000D+05 0.0000000D+00 0.0000000D+00 0.0000000D+00 -%! -0.1580000D+03 -0.1257000D+04 0.0000000D+00 0.0000000D+00 0.0000000D+00 -%! 0.3541000D+05 0.0000000D+00 -0.1434000D+04 0.0000000D+00 -0.5330000D+03 -%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D+03 -%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 -0.1863000D+03 -0.1482000D+01 ]; -%! -%! Be = [ 0.0000000D+00 0.0000000D+00 -%! 0.1103000D+04 0.0000000D+00 -%! 0.0000000D+00 0.0000000D+00 -%! 0.0000000D+00 0.0000000D+00 -%! 0.0000000D+00 0.8333000D+02 ]; -%! -%! Ce = [ 0.1000000D-04 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 -%! 0.0000000D+00 0.0000000D+00 0.1000000D+06 0.0000000D+00 0.0000000D+00 -%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D-05 0.0000000D+00 -%! 0.6664000D-05 0.0000000D+00 -0.6200000D-07 0.0000000D+00 0.0000000D+00 -%! 0.0000000D+00 0.0000000D+00 -0.1000000D+03 0.1896000D+01 0.1508000D-01 ]; -%! -%! SCALEe = [0.1000000D-04 0.1000000D+00 0.1000000D+06 0.1000000D-05 0.1000000D-03 ]; -%! -%! MAXREDe = 0.3488E+10; -%! -%!assert (Ao, Ae, 1e-4); -%!assert (Bo, Be, 1e-4); -%!assert (Co, Ce, 1e-4); -%!assert (MAXREDo, MAXREDe, 1e6); -%!assert (SCALEo, SCALEe.', 1e-4); \ No newline at end of file Deleted: trunk/octave-forge/main/control/devel/scale/scale.m =================================================================== --- trunk/octave-forge/main/control/devel/scale/scale.m 2011-06-29 11:06:59 UTC (rev 8362) +++ trunk/octave-forge/main/control/devel/scale/scale.m 2011-06-29 17:59:36 UTC (rev 8363) @@ -1,68 +0,0 @@ - -a = [ - 0.0 1.0000e+000 0.0 0.0 0.0 - -1.5800e+006 -1.2570e+003 0.0 0.0 0.0 - 3.5410e+014 0.0 -1.4340e+003 0.0 -5.3300e+011 - 0.0 0.0 0.0 0.0 1.0000e+000 - 0.0 0.0 0.0 -1.8630e+004 -1.4820e+000 -]; - -b = [ - 0.0 0.0 - 1.1030e+002 0.0 - 0.0 0.0 - 0.0 0.0 - 0.0 8.3330e-003 -]; - -c = [ - 1.0000e+000 0.0 0.0 0.0 0.0 - 0.0 0.0 1.0000e+000 0.0 0.0 - 0.0 0.0 0.0 1.0000e+000 0.0 - 6.6640e-001 0.0 -6.2000e-013 0.0 0.0 - 0.0 0.0 -1.0000e-003 1.8960e+006 1.5080e+002 -]; - -[as, bs, cs, maxred, scale] = sltb01id (a, b, c, 0); - -as, bs, cs, maxred, scale - - -%{ - TB01ID EXAMPLE PROGRAM RESULTS - - The balanced matrix A ( 5X 5) - - 1 2 3 4 5 - 1 0.0000000D+00 0.1000000D+05 0.0000000D+00 0.0000000D+00 0.0000000D+00 - 2 -0.1580000D+03 -0.1257000D+04 0.0000000D+00 0.0000000D+00 0.0000000D+00 - 3 0.3541000D+05 0.0000000D+00 -0.1434000D+04 0.0000000D+00 -0.5330000D+03 - 4 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D+03 - 5 0.0000000D+00 0.0000000D+00 0.0000000D+00 -0.1863000D+03 -0.1482000D+01 - - The balanced matrix B ( 5X 2) - - 1 2 - 1 0.0000000D+00 0.0000000D+00 - 2 0.1103000D+04 0.0000000D+00 - 3 0.0000000D+00 0.0000000D+00 - 4 0.0000000D+00 0.0000000D+00 - 5 0.0000000D+00 0.8333000D+02 - - The balanced matrix C ( 5X 5) - - 1 2 3 4 5 - 1 0.1000000D-04 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 - 2 0.0000000D+00 0.0000000D+00 0.1000000D+06 0.0000000D+00 0.0000000D+00 - 3 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D-05 0.0000000D+00 - 4 0.6664000D-05 0.0000000D+00 -0.6200000D-07 0.0000000D+00 0.0000000D+00 - 5 0.0000000D+00 0.0000000D+00 -0.1000000D+03 0.1896000D+01 0.1508000D-01 - - The scaling vector SCALE ( 1X 5) - - 1 2 3 4 5 - 1 0.1000000D-04 0.1000000D+00 0.1000000D+06 0.1000000D-05 0.1000000D-03 - - - MAXRED is 0.3488E+10 -%} \ No newline at end of file Added: trunk/octave-forge/main/control/inst/@lti/prescale.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/prescale.m (rev 0) +++ trunk/octave-forge/main/control/inst/@lti/prescale.m 2011-06-29 17:59:36 UTC (rev 8363) @@ -0,0 +1,44 @@ +## 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{scaledsys}, @var{info}] =} prescale (@var{sys}) +## Prescale +## @end deftypefn + +## Author: Lukas Reichlin <luk...@gm...> +## Created: June 2011 +## Version: 0.1 + +function [retsys, varargout] = prescale (sys) + + if (nargin != 1) + print_usage (); + endif + + if (! isa (sys, "ss")) + warning ("prescale: system not in state-space form"); + sys = ss (sys); + endif + + [retsys, lscale, rscale] = __prescale__ (sys); + + if (nargout > 1) + varargout{1} = struct ("SL", lscale, "SR", rscale); + endif + +endfunction \ No newline at end of file Added: trunk/octave-forge/main/control/inst/@ss/__prescale__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__prescale__.m (rev 0) +++ trunk/octave-forge/main/control/inst/@ss/__prescale__.m 2011-06-29 17:59:36 UTC (rev 8363) @@ -0,0 +1,15 @@ +function [retsys, lscale, rscale] = __prescale__ (sys, optarg = 0.0) + + if (isempty (sys.e)) + [a, b, c, ~, scale] = sltb01id (sys.a, sys.b, sys.c, optarg); + retsys = ss (a, b, c, sys.d); + lscale = rscale = scale; + else + [a, e, b, c, lscale, rscale] = sltg01ad (sys.a, sys.e, sys.b, sys.c, optarg); + retsys = dss (a, b, c, sys.d, e); + endif + + retsys.scaled = true; + retsys.lti = sys.lti; # retain i/o names and tsam + +endfunction Modified: trunk/octave-forge/main/control/inst/ltimodels.m =================================================================== --- trunk/octave-forge/main/control/inst/ltimodels.m 2011-06-29 11:06:59 UTC (rev 8362) +++ trunk/octave-forge/main/control/inst/ltimodels.m 2011-06-29 17:59:36 UTC (rev 8363) @@ -965,3 +965,219 @@ %!assert (p_tf, zi_tf, 1e-4); %!assert (z_tf, pi_tf, 1e-4); %!assert (k_tf, inv (ki_tf), 1e-4); + + +## Scaling of state-space models, direct access to TB01ID +%!shared Ao, Bo, Co, SCALEo, MAXREDo, Ae, Be, Ce, SCALEe, MAXREDe +%! A = [ 0.0 1.0000e+000 0.0 0.0 0.0 +%! -1.5800e+006 -1.2570e+003 0.0 0.0 0.0 +%! 3.5410e+014 0.0 -1.4340e+003 0.0 -5.3300e+011 +%! 0.0 0.0 0.0 0.0 1.0000e+000 +%! 0.0 0.0 0.0 -1.8630e+004 -1.4820e+000 ]; +%! +%! B = [ 0.0 0.0 +%! 1.1030e+002 0.0 +%! 0.0 0.0 +%! 0.0 0.0 +%! 0.0 8.3330e-003 ]; +%! +%! C = [ 1.0000e+000 0.0 0.0 0.0 0.0 +%! 0.0 0.0 1.0000e+000 0.0 0.0 +%! 0.0 0.0 0.0 1.0000e+000 0.0 +%! 6.6640e-001 0.0 -6.2000e-013 0.0 0.0 +%! 0.0 0.0 -1.0000e-003 1.8960e+006 1.5080e+002 ]; +%! +%! MAXRED = 0.0; +%! +%! [Ao, Bo, Co, MAXREDo, SCALEo] = sltb01id (A, B, C, MAXRED); +%! +%! Ae = [ 0.0000000D+00 0.1000000D+05 0.0000000D+00 0.0000000D+00 0.0000000D+00 +%! -0.1580000D+03 -0.1257000D+04 0.0000000D+00 0.0000000D+00 0.0000000D+00 +%! 0.3541000D+05 0.0000000D+00 -0.1434000D+04 0.0000000D+00 -0.5330000D+03 +%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D+03 +%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 -0.1863000D+03 -0.1482000D+01 ]; +%! +%! Be = [ 0.0000000D+00 0.0000000D+00 +%! 0.1103000D+04 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.8333000D+02 ]; +%! +%! Ce = [ 0.1000000D-04 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 0.1000000D+06 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D-05 0.0000000D+00 +%! 0.6664000D-05 0.0000000D+00 -0.6200000D-07 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 -0.1000000D+03 0.1896000D+01 0.1508000D-01 ]; +%! +%! SCALEe = [0.1000000D-04 0.1000000D+00 0.1000000D+06 0.1000000D-05 0.1000000D-03 ]; +%! +%! MAXREDe = 0.3488E+10; +%! +%!assert (Ao, Ae, 1e-4); +%!assert (Bo, Be, 1e-4); +%!assert (Co, Ce, 1e-4); +%!assert (MAXREDo, MAXREDe, 1e6); +%!assert (SCALEo, SCALEe.', 1e-4); + + +## Scaling of descriptor state-space models, direct access to TG01AD +%!shared Ao, Eo, Bo, Co, LSCALEo, RSCALEo, Ae, Ee, Be, Ce, LSCALEe, RSCALEe +%! A = [ -1 0 0 0.003 +%! 0 0 0.1000 0.02 +%! 100 10 0 0.4 +%! 0 0 0 0.0]; +%! +%! E = [ 1 0.2 0 0.0 +%! 0 1 0 0.01 +%! 300 90 6 0.3 +%! 0 0 20 0.0]; +%! +%! B = [ 10 0 +%! 0 0 +%! 0 1000 +%! 10000 10000]; +%! +%! C = [ -0.1 0.0 0.001 0.0 +%! 0.0 0.01 -0.001 0.0001]; +%! +%! TRESH = 0.0; +%! +%! [Ao, Eo, Bo, Co, LSCALEo, RSCALEo] = sltg01ad (A, E, B, C, TRESH); +%! +%! Ae = [ -1.0000 0.0000 0.0000 0.3000 +%! 0.0000 0.0000 1.0000 2.0000 +%! 1.0000 0.1000 0.0000 0.4000 +%! 0.0000 0.0000 0.0000 0.0000]; +%! +%! Ee = [ 1.0000 0.2000 0.0000 0.0000 +%! 0.0000 1.0000 0.0000 1.0000 +%! 3.0000 0.9000 0.6000 0.3000 +%! 0.0000 0.0000 0.2000 0.0000 ]; +%! +%! Be = [100.0000 0.0000 +%! 0.0000 0.0000 +%! 0.0000 100.0000 +%! 100.0000 100.0000 ]; +%! +%! Ce = [ -0.0100 0.0000 0.0010 0.0000 +%! 0.0000 0.0010 -0.0010 0.0010]; +%! +%! LSCALEe = [ 10.0000 10.0000 0.1000 0.0100 ]; +%! +%! RSCALEe = [ 0.1000 0.1000 1.0000 10.0000 ]; +%! +%!assert (Ao, Ae, 1e-4); +%!assert (Eo, Ee, 1e-4); +%!assert (Bo, Be, 1e-4); +%!assert (Co, Ce, 1e-4); +%!assert (LSCALEo, LSCALEe.', 1e-4); +%!assert (RSCALEo, RSCALEe.', 1e-4); + + +## Scaling of state-space models, user function +%!shared Ao, Bo, Co, INFOo, Ae, Be, Ce, SCALEe +%! A = [ 0.0 1.0000e+000 0.0 0.0 0.0 +%! -1.5800e+006 -1.2570e+003 0.0 0.0 0.0 +%! 3.5410e+014 0.0 -1.4340e+003 0.0 -5.3300e+011 +%! 0.0 0.0 0.0 0.0 1.0000e+000 +%! 0.0 0.0 0.0 -1.8630e+004 -1.4820e+000 ]; +%! +%! B = [ 0.0 0.0 +%! 1.1030e+002 0.0 +%! 0.0 0.0 +%! 0.0 0.0 +%! 0.0 8.3330e-003 ]; +%! +%! C = [ 1.0000e+000 0.0 0.0 0.0 0.0 +%! 0.0 0.0 1.0000e+000 0.0 0.0 +%! 0.0 0.0 0.0 1.0000e+000 0.0 +%! 6.6640e-001 0.0 -6.2000e-013 0.0 0.0 +%! 0.0 0.0 -1.0000e-003 1.8960e+006 1.5080e+002 ]; +%! +%! SYS = ss (A, B, C); +%! +%! [SYSo, INFOo] = prescale (SYS); +%! +%! [Ao, Bo, Co] = ssdata (SYSo); +%! +%! Ae = [ 0.0000000D+00 0.1000000D+05 0.0000000D+00 0.0000000D+00 0.0000000D+00 +%! -0.1580000D+03 -0.1257000D+04 0.0000000D+00 0.0000000D+00 0.0000000D+00 +%! 0.3541000D+05 0.0000000D+00 -0.1434000D+04 0.0000000D+00 -0.5330000D+03 +%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D+03 +%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 -0.1863000D+03 -0.1482000D+01 ]; +%! +%! Be = [ 0.0000000D+00 0.0000000D+00 +%! 0.1103000D+04 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.8333000D+02 ]; +%! +%! Ce = [ 0.1000000D-04 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 0.1000000D+06 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 0.0000000D+00 0.1000000D-05 0.0000000D+00 +%! 0.6664000D-05 0.0000000D+00 -0.6200000D-07 0.0000000D+00 0.0000000D+00 +%! 0.0000000D+00 0.0000000D+00 -0.1000000D+03 0.1896000D+01 0.1508000D-01 ]; +%! +%! SCALEe = [0.1000000D-04 0.1000000D+00 0.1000000D+06 0.1000000D-05 0.1000000D-03 ]; +%! +%!assert (Ao, Ae, 1e-4); +%!assert (Bo, Be, 1e-4); +%!assert (Co, Ce, 1e-4); +%!assert (INFOo.SL, SCALEe.', 1e-4); +%!assert (INFOo.SR, SCALEe.', 1e-4); + + +## Scaling of descriptor state-space models, user function +%!shared Ao, Eo, Bo, Co, INFOo, Ae, Ee, Be, Ce, LSCALEe, RSCALEe +%! A = [ -1 0 0 0.003 +%! 0 0 0.1000 0.02 +%! 100 10 0 0.4 +%! 0 0 0 0.0]; +%! +%! E = [ 1 0.2 0 0.0 +%! 0 1 0 0.01 +%! 300 90 6 0.3 +%! 0 0 20 0.0]; +%! +%! B = [ 10 0 +%! 0 0 +%! 0 1000 +%! 10000 10000]; +%! +%! C = [ -0.1 0.0 0.001 0.0 +%! 0.0 0.01 -0.001 0.0001]; +%! +%! SYS = dss (A, B, C, [], E); +%! +%! [SYSo, INFOo] = prescale (SYS); +%! +%! [Ao, Bo, Co, ~, Eo] = dssdata (SYSo); +%! +%! Ae = [ -1.0000 0.0000 0.0000 0.3000 +%! 0.0000 0.0000 1.0000 2.0000 +%! 1.0000 0.1000 0.0000 0.4000 +%! 0.0000 0.0000 0.0000 0.0000]; +%! +%! Ee = [ 1.0000 0.2000 0.0000 0.0000 +%! 0.0000 1.0000 0.0000 1.0000 +%! 3.0000 0.9000 0.6000 0.3000 +%! 0.0000 0.0000 0.2000 0.0000 ]; +%! +%! Be = [100.0000 0.0000 +%! 0.0000 0.0000 +%! 0.0000 100.0000 +%! 100.0000 100.0000 ]; +%! +%! Ce = [ -0.0100 0.0000 0.0010 0.0000 +%! 0.0000 0.0010 -0.0010 0.0010]; +%! +%! LSCALEe = [ 10.0000 10.0000 0.1000 0.0100 ]; +%! +%! RSCALEe = [ 0.1000 0.1000 1.0000 10.0000 ]; +%! +%!assert (Ao, Ae, 1e-4); +%!assert (Eo, Ee, 1e-4); +%!assert (Bo, Be, 1e-4); +%!assert (Co, Ce, 1e-4); +%!assert (INFOo.SL, LSCALEe.', 1e-4); +%!assert (INFOo.SR, RSCALEe.', 1e-4); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-06-29 18:18:16
|
Revision: 8364 http://octave.svn.sourceforge.net/octave/?rev=8364&view=rev Author: paramaniac Date: 2011-06-29 18:18:10 +0000 (Wed, 29 Jun 2011) Log Message: ----------- control: touch up makefile for prescale Modified Paths: -------------- trunk/octave-forge/main/control/devel/makefile_all.m trunk/octave-forge/main/control/src/Makefile Added Paths: ----------- trunk/octave-forge/main/control/devel/makefile_scale.m trunk/octave-forge/main/control/src/sltb01id.cc trunk/octave-forge/main/control/src/sltg01ad.cc Removed Paths: ------------- trunk/octave-forge/main/control/devel/scale/makefile_scale.m trunk/octave-forge/main/control/devel/scale/sltb01id.cc trunk/octave-forge/main/control/devel/scale/sltg01ad.cc Property Changed: ---------------- trunk/octave-forge/main/control/devel/scale/ trunk/octave-forge/main/control/src/ Modified: trunk/octave-forge/main/control/devel/makefile_all.m =================================================================== --- trunk/octave-forge/main/control/devel/makefile_all.m 2011-06-29 17:59:36 UTC (rev 8363) +++ trunk/octave-forge/main/control/devel/makefile_all.m 2011-06-29 18:18:10 UTC (rev 8364) @@ -21,6 +21,7 @@ makefile_minreal makefile_norm makefile_place +makefile_scale makefile_staircase makefile_zero Copied: trunk/octave-forge/main/control/devel/makefile_scale.m (from rev 8363, trunk/octave-forge/main/control/devel/scale/makefile_scale.m) =================================================================== --- trunk/octave-forge/main/control/devel/makefile_scale.m (rev 0) +++ trunk/octave-forge/main/control/devel/makefile_scale.m 2011-06-29 18:18:10 UTC (rev 8364) @@ -0,0 +1,16 @@ +homedir = pwd (); +develdir = fileparts (which ("makefile_scale")); +srcdir = [develdir, "/../src"]; +cd (srcdir); + +## scaling of state-space models +mkoctfile "-Wl,-framework" "-Wl,vecLib" \ + sltb01id.cc \ + TB01ID.f + +## scaling of descriptor state-space models +mkoctfile "-Wl,-framework" "-Wl,vecLib" \ + sltg01ad.cc \ + TG01AD.f + +cd (homedir); Property changes on: trunk/octave-forge/main/control/devel/scale ___________________________________________________________________ Modified: svn:ignore - TB01ID.oct sltb01id.oct + TB01ID.oct sltb01id.oct sltg01ad.oct Deleted: trunk/octave-forge/main/control/devel/scale/makefile_scale.m =================================================================== --- trunk/octave-forge/main/control/devel/scale/makefile_scale.m 2011-06-29 17:59:36 UTC (rev 8363) +++ trunk/octave-forge/main/control/devel/scale/makefile_scale.m 2011-06-29 18:18:10 UTC (rev 8364) @@ -1,9 +0,0 @@ -## scaling of state-space models -mkoctfile "-Wl,-framework" "-Wl,vecLib" \ - sltb01id.cc \ - TB01ID.f - -## scaling of descriptor state-space models -mkoctfile "-Wl,-framework" "-Wl,vecLib" \ - sltg01ad.cc \ - TG01AD.f Deleted: trunk/octave-forge/main/control/devel/scale/sltb01id.cc =================================================================== --- trunk/octave-forge/main/control/devel/scale/sltb01id.cc 2011-06-29 17:59:36 UTC (rev 8363) +++ trunk/octave-forge/main/control/devel/scale/sltb01id.cc 2011-06-29 18:18:10 UTC (rev 8364) @@ -1,114 +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/>. - -Balance state-space model. -Uses SLICOT TB01ID by courtesy of NICONET e.V. -<http://www.slicot.org> - -Author: Lukas Reichlin <luk...@gm...> -Created: May 2011 -Version: 0.1 - -*/ - -#include <octave/oct.h> -#include <f77-fcn.h> -#include "common.cc" - -extern "C" -{ - int F77_FUNC (tb01id, TB01ID) - (char& JOB, - int& N, int& M, int& P, - double& MAXRED, - double* A, int& LDA, - double* B, int& LDB, - double* C, int& LDC, - double* SCALE, - int& INFO); -} - -DEFUN_DLD (sltb01id, args, nargout, - "-*- texinfo -*-\n\ -Slicot TB01ID Release 5.0\n\ -No argument checking.\n\ -For internal use only.") -{ - int nargin = args.length (); - octave_value_list retval; - - if (nargin != 4) - { - print_usage (); - } - else - { - // arguments in - char job = 'A'; - - Matrix a = args(0).matrix_value (); - Matrix b = args(1).matrix_value (); - Matrix c = args(2).matrix_value (); - double maxred = args(3).double_value (); - - int n = a.rows (); // n: number of states - int m = b.columns (); // m: number of inputs - int p = c.rows (); // p: number of outputs - - int lda = max (1, n); - int ldb = max (1, n); - int ldc = max (1, p); - - - // arguments out - ColumnVector scale (n); - - - // error indicators - int info = 0; - - - // SLICOT routine TB01ID - F77_XFCN (tb01id, TB01ID, - (job, - n, m, p, - maxred, - a.fortran_vec (), lda, - b.fortran_vec (), ldb, - c.fortran_vec (), ldc, - scale.fortran_vec (), - info)); - - if (f77_exception_encountered) - error ("ss: prescale: sltb01id: exception in SLICOT subroutine TB01ID"); - - if (info != 0) - error ("ss: prescale: sltb01id: TB01ID returned info = %d", info); - - - // return values - retval(0) = a; - retval(1) = b; - retval(2) = c; - retval(3) = octave_value (maxred); - retval(4) = scale; - } - - return retval; -} Deleted: trunk/octave-forge/main/control/devel/scale/sltg01ad.cc =================================================================== --- trunk/octave-forge/main/control/devel/scale/sltg01ad.cc 2011-06-29 17:59:36 UTC (rev 8363) +++ trunk/octave-forge/main/control/devel/scale/sltg01ad.cc 2011-06-29 18:18:10 UTC (rev 8364) @@ -1,125 +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/>. - -Balance descriptor state-space model. -Uses SLICOT TG01AD by courtesy of NICONET e.V. -<http://www.slicot.org> - -Author: Lukas Reichlin <luk...@gm...> -Created: June 2011 -Version: 0.1 - -*/ - -#include <octave/oct.h> -#include <f77-fcn.h> -#include "common.cc" - -extern "C" -{ - int F77_FUNC (tg01ad, TG01AD) - (char& JOB, - int& L, int& N, int& M, int& P, - double& TRESH, - double* A, int& LDA, - double* E, int& LDE, - double* B, int& LDB, - double* C, int& LDC, - double* LSCALE, double *RSCALE, - double* DWORK, - int& INFO); -} - -DEFUN_DLD (sltg01ad, args, nargout, - "-*- texinfo -*-\n\ -Slicot TG01AD Release 5.0\n\ -No argument checking.\n\ -For internal use only.") -{ - int nargin = args.length (); - octave_value_list retval; - - if (nargin != 5) - { - print_usage (); - } - else - { - // arguments in - char job = 'A'; - - Matrix a = args(0).matrix_value (); - Matrix e = args(1).matrix_value (); - Matrix b = args(2).matrix_value (); - Matrix c = args(3).matrix_value (); - double tresh = args(4).double_value (); - - int l = a.rows (); - int n = a.columns (); // n: number of states - int m = b.columns (); // m: number of inputs - int p = c.rows (); // p: number of outputs - - int lda = max (1, l); - int lde = max (1, l); - int ldb = max (1, l); - int ldc = max (1, p); - - - // arguments out - ColumnVector lscale (l); - ColumnVector rscale (n); - - // workspace - OCTAVE_LOCAL_BUFFER (double, dwork, 3*(l+n)); - - // error indicators - int info = 0; - - - // SLICOT routine TG01AD - F77_XFCN (tg01ad, TG01AD, - (job, - l, n, m, p, - tresh, - a.fortran_vec (), lda, - e.fortran_vec (), lde, - b.fortran_vec (), ldb, - c.fortran_vec (), ldc, - lscale.fortran_vec (), rscale.fortran_vec (), - dwork, - info)); - - if (f77_exception_encountered) - error ("ss: prescale: sltg01ad: exception in SLICOT subroutine TG01AD"); - - if (info != 0) - error ("ss: prescale: sltg01ad: TG01AD returned info = %d", info); - - - // return values - retval(0) = a; - retval(1) = e; - retval(2) = b; - retval(3) = c; - retval(4) = lscale; - retval(5) = rscale; - } - - return retval; -} Property changes on: trunk/octave-forge/main/control/src ___________________________________________________________________ Modified: svn:ignore - is_real_matrix.oct is_real_scalar.oct is_real_square_matrix.oct is_real_vector.oct slab01od.oct slab08nd.oct slab13ad.oct slab13bd.oct slab13dd.oct slag08bd.oct slsb01bd.oct slsb02od.oct slsb03md.oct slsb03od.oct slsb04md.oct slsb04qd.oct slsb10dd.oct slsb10ed.oct slsb10fd.oct slsb10hd.oct slsg02ad.oct slsg03ad.oct slsg03bd.oct sltb01pd.oct sltg01hd.oct sltg01id.oct sltg01jd.oct sltg04bx.oct + *.oct Modified: trunk/octave-forge/main/control/src/Makefile =================================================================== --- trunk/octave-forge/main/control/src/Makefile 2011-06-29 17:59:36 UTC (rev 8363) +++ trunk/octave-forge/main/control/src/Makefile 2011-06-29 18:18:10 UTC (rev 8364) @@ -2,7 +2,8 @@ slsb01bd.oct slsb10fd.oct slsb10dd.oct slsb03md.oct slsb04md.oct \ slsb04qd.oct slsg03ad.oct slsb02od.oct slab13ad.oct slab01od.oct \ sltb01pd.oct slsb03od.oct slsg03bd.oct slag08bd.oct sltg01jd.oct \ - sltg01hd.oct sltg01id.oct slsg02ad.oct sltg04bx.oct \ + sltg01hd.oct sltg01id.oct slsg02ad.oct sltg04bx.oct sltb01id.oct \ + sltg01ad.oct \ is_real_scalar.oct is_real_vector.oct is_real_matrix.oct \ is_real_square_matrix.oct @@ -171,6 +172,16 @@ mkoctfile sltg04bx.cc \ TG04BX.f MB02RD.f MB02SD.f +# scaling of state-space models +sltb01id.oct: sltb01id.cc + mkoctfile sltb01id.cc \ + TB01ID.f + +# scaling of descriptor state-space models +sltg01ad.oct: sltg01ad.cc + mkoctfile sltg01ad.cc \ + TG01AD.f + # helpers is_real_scalar.oct: is_real_scalar.cc mkoctfile is_real_scalar.cc Copied: trunk/octave-forge/main/control/src/sltb01id.cc (from rev 8363, trunk/octave-forge/main/control/devel/scale/sltb01id.cc) =================================================================== --- trunk/octave-forge/main/control/src/sltb01id.cc (rev 0) +++ trunk/octave-forge/main/control/src/sltb01id.cc 2011-06-29 18:18:10 UTC (rev 8364) @@ -0,0 +1,114 @@ +/* + +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/>. + +Balance state-space model. +Uses SLICOT TB01ID by courtesy of NICONET e.V. +<http://www.slicot.org> + +Author: Lukas Reichlin <luk...@gm...> +Created: May 2011 +Version: 0.1 + +*/ + +#include <octave/oct.h> +#include <f77-fcn.h> +#include "common.cc" + +extern "C" +{ + int F77_FUNC (tb01id, TB01ID) + (char& JOB, + int& N, int& M, int& P, + double& MAXRED, + double* A, int& LDA, + double* B, int& LDB, + double* C, int& LDC, + double* SCALE, + int& INFO); +} + +DEFUN_DLD (sltb01id, args, nargout, + "-*- texinfo -*-\n\ +Slicot TB01ID Release 5.0\n\ +No argument checking.\n\ +For internal use only.") +{ + int nargin = args.length (); + octave_value_list retval; + + if (nargin != 4) + { + print_usage (); + } + else + { + // arguments in + char job = 'A'; + + Matrix a = args(0).matrix_value (); + Matrix b = args(1).matrix_value (); + Matrix c = args(2).matrix_value (); + double maxred = args(3).double_value (); + + int n = a.rows (); // n: number of states + int m = b.columns (); // m: number of inputs + int p = c.rows (); // p: number of outputs + + int lda = max (1, n); + int ldb = max (1, n); + int ldc = max (1, p); + + + // arguments out + ColumnVector scale (n); + + + // error indicators + int info = 0; + + + // SLICOT routine TB01ID + F77_XFCN (tb01id, TB01ID, + (job, + n, m, p, + maxred, + a.fortran_vec (), lda, + b.fortran_vec (), ldb, + c.fortran_vec (), ldc, + scale.fortran_vec (), + info)); + + if (f77_exception_encountered) + error ("ss: prescale: sltb01id: exception in SLICOT subroutine TB01ID"); + + if (info != 0) + error ("ss: prescale: sltb01id: TB01ID returned info = %d", info); + + + // return values + retval(0) = a; + retval(1) = b; + retval(2) = c; + retval(3) = octave_value (maxred); + retval(4) = scale; + } + + return retval; +} Copied: trunk/octave-forge/main/control/src/sltg01ad.cc (from rev 8363, trunk/octave-forge/main/control/devel/scale/sltg01ad.cc) =================================================================== --- trunk/octave-forge/main/control/src/sltg01ad.cc (rev 0) +++ trunk/octave-forge/main/control/src/sltg01ad.cc 2011-06-29 18:18:10 UTC (rev 8364) @@ -0,0 +1,125 @@ +/* + +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/>. + +Balance descriptor state-space model. +Uses SLICOT TG01AD by courtesy of NICONET e.V. +<http://www.slicot.org> + +Author: Lukas Reichlin <luk...@gm...> +Created: June 2011 +Version: 0.1 + +*/ + +#include <octave/oct.h> +#include <f77-fcn.h> +#include "common.cc" + +extern "C" +{ + int F77_FUNC (tg01ad, TG01AD) + (char& JOB, + int& L, int& N, int& M, int& P, + double& TRESH, + double* A, int& LDA, + double* E, int& LDE, + double* B, int& LDB, + double* C, int& LDC, + double* LSCALE, double *RSCALE, + double* DWORK, + int& INFO); +} + +DEFUN_DLD (sltg01ad, args, nargout, + "-*- texinfo -*-\n\ +Slicot TG01AD Release 5.0\n\ +No argument checking.\n\ +For internal use only.") +{ + int nargin = args.length (); + octave_value_list retval; + + if (nargin != 5) + { + print_usage (); + } + else + { + // arguments in + char job = 'A'; + + Matrix a = args(0).matrix_value (); + Matrix e = args(1).matrix_value (); + Matrix b = args(2).matrix_value (); + Matrix c = args(3).matrix_value (); + double tresh = args(4).double_value (); + + int l = a.rows (); + int n = a.columns (); // n: number of states + int m = b.columns (); // m: number of inputs + int p = c.rows (); // p: number of outputs + + int lda = max (1, l); + int lde = max (1, l); + int ldb = max (1, l); + int ldc = max (1, p); + + + // arguments out + ColumnVector lscale (l); + ColumnVector rscale (n); + + // workspace + OCTAVE_LOCAL_BUFFER (double, dwork, 3*(l+n)); + + // error indicators + int info = 0; + + + // SLICOT routine TG01AD + F77_XFCN (tg01ad, TG01AD, + (job, + l, n, m, p, + tresh, + a.fortran_vec (), lda, + e.fortran_vec (), lde, + b.fortran_vec (), ldb, + c.fortran_vec (), ldc, + lscale.fortran_vec (), rscale.fortran_vec (), + dwork, + info)); + + if (f77_exception_encountered) + error ("ss: prescale: sltg01ad: exception in SLICOT subroutine TG01AD"); + + if (info != 0) + error ("ss: prescale: sltg01ad: TG01AD returned info = %d", info); + + + // return values + retval(0) = a; + retval(1) = e; + retval(2) = b; + retval(3) = c; + retval(4) = lscale; + retval(5) = rscale; + } + + return retval; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-06-29 18:43:56
|
Revision: 8366 http://octave.svn.sourceforge.net/octave/?rev=8366&view=rev Author: paramaniac Date: 2011-06-29 18:43:50 +0000 (Wed, 29 Jun 2011) Log Message: ----------- control: activate prescaling for frequency response plots Modified Paths: -------------- trunk/octave-forge/main/control/DESCRIPTION trunk/octave-forge/main/control/INDEX trunk/octave-forge/main/control/inst/@ss/__freqresp__.m trunk/octave-forge/main/control/inst/@ss/__set__.m trunk/octave-forge/main/control/inst/BMWengine.m Modified: trunk/octave-forge/main/control/DESCRIPTION =================================================================== --- trunk/octave-forge/main/control/DESCRIPTION 2011-06-29 18:20:19 UTC (rev 8365) +++ trunk/octave-forge/main/control/DESCRIPTION 2011-06-29 18:43:50 UTC (rev 8366) @@ -1,6 +1,6 @@ Name: Control -Version: 2.0.2 -Date: 2011-03-18 +Version: 2.1.50 +Date: 2011-06-29 Author: Lukas Reichlin <luk...@gm...> Maintainer: Lukas Reichlin <luk...@gm...> Title: Control Systems Modified: trunk/octave-forge/main/control/INDEX =================================================================== --- trunk/octave-forge/main/control/INDEX 2011-06-29 18:20:19 UTC (rev 8365) +++ trunk/octave-forge/main/control/INDEX 2011-06-29 18:43:50 UTC (rev 8366) @@ -16,6 +16,7 @@ @lti/tfdata Model Conversions @lti/c2d + @lti/prescale @lti/xperm Model Interconnections @lti/append Modified: trunk/octave-forge/main/control/inst/@ss/__freqresp__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__freqresp__.m 2011-06-29 18:20:19 UTC (rev 8365) +++ trunk/octave-forge/main/control/inst/@ss/__freqresp__.m 2011-06-29 18:43:50 UTC (rev 8366) @@ -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. ## @@ -20,10 +20,14 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.3 +## Version: 0.4 function H = __freqresp__ (sys, w, resptype = 0, cellflag = false) + if (sys.scaled == false) + sys = prescale (sys); + endif + [a, b, c, d, e, tsam] = dssdata (sys); if (resptype != 0 && columns (b) != rows (c)) Modified: trunk/octave-forge/main/control/inst/@ss/__set__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__set__.m 2011-06-29 18:20:19 UTC (rev 8365) +++ trunk/octave-forge/main/control/inst/@ss/__set__.m 2011-06-29 18:43:50 UTC (rev 8366) @@ -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. ## @@ -20,7 +20,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.2 +## Version: 0.3 function sys = __set__ (sys, prop, val) @@ -56,7 +56,6 @@ case "scaled" if (isscalar (val)) sys.scaled = logical (val); - warning ("ss: set: property ""scaled"" has no influence yet"); else error ("ss: set: property ""scaled"" must be a logical value"); endif Modified: trunk/octave-forge/main/control/inst/BMWengine.m =================================================================== --- trunk/octave-forge/main/control/inst/BMWengine.m 2011-06-29 18:20:19 UTC (rev 8365) +++ trunk/octave-forge/main/control/inst/BMWengine.m 2011-06-29 18:43:50 UTC (rev 8366) @@ -41,7 +41,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: January 2010 -## Version: 0.1 +## Version: 0.1.1 ## TODO: translate German terminology @@ -100,7 +100,7 @@ Cp = [ 0 0 1 0 0 0 0 0 1 0 ]; - sys = ss (Ap, [Bp, Bdp], Cp); + sys = ss (Ap, [Bp, Bdp], Cp, [], "scaled", true); otherwise print_usage (); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-06-30 18:38:31
|
Revision: 8372 http://octave.svn.sourceforge.net/octave/?rev=8372&view=rev Author: paramaniac Date: 2011-06-30 18:38:24 +0000 (Thu, 30 Jun 2011) Log Message: ----------- control: fix thinko in prescale, remove completed tasks from projects file Modified Paths: -------------- trunk/octave-forge/main/control/devel/PROJECTS trunk/octave-forge/main/control/inst/@lti/prescale.m trunk/octave-forge/main/control/inst/@ss/__prescale__.m trunk/octave-forge/main/control/inst/ltimodels.m Modified: trunk/octave-forge/main/control/devel/PROJECTS =================================================================== --- trunk/octave-forge/main/control/devel/PROJECTS 2011-06-30 14:23:23 UTC (rev 8371) +++ trunk/octave-forge/main/control/devel/PROJECTS 2011-06-30 18:38:24 UTC (rev 8372) @@ -51,17 +51,10 @@ State-Space Models: ------------------ - * Scaling: TB01ID (ss) and TG01AD (dss) - * Balancing: TB01TD ? * Use SLICOT TB04BD for @ss/__sys2tf__.m - * Prescaling for __freqresp__.m using TB01ID (ss) and TG01AD (dss) - if property scaled == false. - - * sys = prescale (sys) using TB01ID (ss) and TG01AD (dss) - ------------------------ Transfer Function Models: ------------------------ Modified: trunk/octave-forge/main/control/inst/@lti/prescale.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/prescale.m 2011-06-30 14:23:23 UTC (rev 8371) +++ trunk/octave-forge/main/control/inst/@lti/prescale.m 2011-06-30 18:38:24 UTC (rev 8372) @@ -32,7 +32,7 @@ ## @item scaledsys ## Scaled state-space model. ## @item info -## Structure containig additional information. +## Structure containing additional information. ## @item info.SL ## Left scaling factors. @code{Tl = diag (info.SL)}. ## @item info.SR Modified: trunk/octave-forge/main/control/inst/@ss/__prescale__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__prescale__.m 2011-06-30 14:23:23 UTC (rev 8371) +++ trunk/octave-forge/main/control/inst/@ss/__prescale__.m 2011-06-30 18:38:24 UTC (rev 8372) @@ -16,7 +16,9 @@ ## along with LTI Syncope. If not, see <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## Prescaling +## Prescale state-space model. +## Uses SLICOT TB01ID and TG01AD by courtesy of +## @uref{http://www.slicot.org, NICONET e.V.} ## Author: Lukas Reichlin <luk...@gm...> ## Created: June 2011 @@ -27,7 +29,8 @@ if (isempty (sys.e)) [a, b, c, ~, scale] = sltb01id (sys.a, sys.b, sys.c, optarg); retsys = ss (a, b, c, sys.d); - lscale = rscale = scale; + lscale = scale.^-1; + rscale = scale; else [a, e, b, c, lscale, rscale] = sltg01ad (sys.a, sys.e, sys.b, sys.c, optarg); retsys = dss (a, b, c, sys.d, e); Modified: trunk/octave-forge/main/control/inst/ltimodels.m =================================================================== --- trunk/octave-forge/main/control/inst/ltimodels.m 2011-06-30 14:23:23 UTC (rev 8371) +++ trunk/octave-forge/main/control/inst/ltimodels.m 2011-06-30 18:38:24 UTC (rev 8372) @@ -1123,7 +1123,7 @@ %!assert (Ao, Ae, 1e-4); %!assert (Bo, Be, 1e-4); %!assert (Co, Ce, 1e-4); -%!assert (INFOo.SL, SCALEe.', 1e-4); +%!assert (INFOo.SL.^-1, SCALEe.', 1e-4); %!assert (INFOo.SR, SCALEe.', 1e-4); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-07-06 16:24:24
|
Revision: 8376 http://octave.svn.sourceforge.net/octave/?rev=8376&view=rev Author: paramaniac Date: 2011-07-06 15:44:30 +0000 (Wed, 06 Jul 2011) Log Message: ----------- control: prepare release control-2.1.50 Modified Paths: -------------- trunk/octave-forge/main/control/devel/RELEASE_PACKAGE trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/inst/@lti/prescale.m Modified: trunk/octave-forge/main/control/devel/RELEASE_PACKAGE =================================================================== --- trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-07-05 19:08:00 UTC (rev 8375) +++ trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-07-06 15:44:30 UTC (rev 8376) @@ -16,12 +16,12 @@ rm -R ~/octave/__TEMP__/control/devel cd ~/octave/__TEMP__ grep -i version control/DESCRIPTION -tar czf control-2.0.2.tar.gz control/ -md5 control-2.0.2.tar.gz -md5 control-2.0.2.tar.gz > md5_control_pkg.txt -uuencode control-2.0.2.tar.gz < control-2.0.2.tar.gz > control-2.0.2.tar.gz.uue +tar czf control-2.1.50.tar.gz control/ +md5 control-2.1.50.tar.gz +md5 control-2.1.50.tar.gz > md5_control_pkg.txt +uuencode control-2.1.50.tar.gz < control-2.1.50.tar.gz > control-2.1.50.tar.gz.uue octave -q --eval \ -"pkg install control-2.0.2.tar.gz" +"pkg install control-2.1.50.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 @@ -36,7 +36,7 @@ ===================================================================================== rm -R ~/octave/__TEMP__ -rm -R ~/octave/control-2.0.2 +rm -R ~/octave/control-2.1.50 ===================================================================================== Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-07-05 19:08:00 UTC (rev 8375) +++ trunk/octave-forge/main/control/doc/NEWS 2011-07-06 15:44:30 UTC (rev 8376) @@ -1,4 +1,23 @@ +Summary of important user-visible changes for releases of the control package + =============================================================================== +control-2.1.50 Release Date: 2011-07-06 Release Manager: Lukas Reichlin +=============================================================================== + +** ss.m + -- Support for property "scaled". By default, it is set to "false". + +** @lti/prescale.m + -- Scaling for state-space models (SLICOT TB01ID) and descriptor models + (SLICOT TG01AD). + +** @lti/freqresp.m + -- Scale state-space models using @lti/prescale.m if property "scaled" is + set to "false". Frequency response commands now perform automatic + scaling unless model property "scaled" is set to "true". + + +=============================================================================== control-2.0.2 Release Date: 2011-03-18 Release Manager: Lukas Reichlin =============================================================================== Modified: trunk/octave-forge/main/control/inst/@lti/prescale.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/prescale.m 2011-07-05 19:08:00 UTC (rev 8375) +++ trunk/octave-forge/main/control/inst/@lti/prescale.m 2011-07-06 15:44:30 UTC (rev 8376) @@ -19,7 +19,9 @@ ## @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.} +## @uref{http://www.slicot.org, NICONET e.V.}. +## Frequency response commands perform automatic scaling unless model property +## @var{scaled} is set to @var{true}. ## ## @strong{Inputs} ## @table @var This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-07-19 13:41:17
|
Revision: 8388 http://octave.svn.sourceforge.net/octave/?rev=8388&view=rev Author: paramaniac Date: 2011-07-19 13:41:11 +0000 (Tue, 19 Jul 2011) Log Message: ----------- control: update display routines Modified Paths: -------------- trunk/octave-forge/main/control/devel/@frd/display.m trunk/octave-forge/main/control/inst/@ss/display.m Modified: trunk/octave-forge/main/control/devel/@frd/display.m =================================================================== --- trunk/octave-forge/main/control/devel/@frd/display.m 2011-07-19 10:17:54 UTC (rev 8387) +++ trunk/octave-forge/main/control/devel/@frd/display.m 2011-07-19 13:41:11 UTC (rev 8388) @@ -29,12 +29,15 @@ [inname, m] = __labels__ (inname, "u"); [outname, p] = __labels__ (outname, "y"); + + w = __freq2str__ (sys.w); disp (""); - for i = 1 : m - disp (["Frequency response \"", sysname, "\" from input \"", inname{i}, "\" to output ..."]); - __disp_resp__ (sys.H(:,i,:), sys.w, outname); + for k = 1 : m + disp (["Frequency response \"", sysname, "\" from input \"", inname{k}, "\" to output ..."]); + disp (""); + __disp_resp__ (sys.H(:,k,:), w, outname); endfor display (sys.lti); # display sampling time @@ -50,26 +53,26 @@ endfunction -function __disp_freq__ () +function __disp_resp__ (H, w, outname) -endfunction + p = rows (H); # number of outputs + len = size (H, 3); # number of frequencies - -function __disp_resp__ (H, w, outname) - - len = rows (w); + H = mat2cell (H, ones (1, p), 1, len)(:); + H = cellfun (@__resp2str__, H, outname, "uniformoutput", false); - % Hier kommt H, wie bei ss nur soviele Ausgänge pro Zeile anzeigen wie terminal size - % H kann auch komplex sein --> zwei Kolonnen + tsize = terminal_size (); + + ## TODO: Show as many outputs on one line as the terminal width allows + + for k = 1 : p + disp ([w, H{k}]); + disp (""); + endfor - H = mat2cell (H, ones (1, rows (H)), 1, len)(:); - H = cellfun (@__resp2str__, H, outname, "uniformoutput", false) - endfunction -% Noch nicht in Betrieb, kann in display selbst aufgerufen werden, dann nur einmal aufrufen -% und Resultat immer wieder übergeben function str = __freq2str__ (w, title = "w [rad/s]") len = rows (w); @@ -82,16 +85,17 @@ endfunction -% Für Cellfun function str = __resp2str__ (H, outname) len = length (H); - str = __vec2str__ (H); + real_str = __vec2str__ (real (H), " "); + imag_str = __vec2str__ (imag (H), "i"); + str = [real_str, imag_str]; line = repmat ("-", 1, max (columns (str), columns (outname))); str = strvcat (outname, line, str); - space = repmat (" ", len+2, 1); + space = repmat (" ", len+2, 1); str = [space, str]; - % Noch für complex ergänzen + endfunction Modified: trunk/octave-forge/main/control/inst/@ss/display.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/display.m 2011-07-19 10:17:54 UTC (rev 8387) +++ trunk/octave-forge/main/control/inst/@ss/display.m 2011-07-19 13:41:11 UTC (rev 8388) @@ -76,7 +76,7 @@ mat{k} = strjust (strvcat (acol{:}), "right"); endfor - lcols = cellfun ("size", mat, 2); + lcols = cellfun (@columns, mat); lcols_max = 2 + max (horzcat (lcols, 1)); for k = 1 : mcols This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-07-20 22:27:49
|
Revision: 8395 http://octave.svn.sourceforge.net/octave/?rev=8395&view=rev Author: paramaniac Date: 2011-07-20 22:27:43 +0000 (Wed, 20 Jul 2011) Log Message: ----------- control: move frd models into place Added Paths: ----------- trunk/octave-forge/main/control/inst/@frd/ Removed Paths: ------------- trunk/octave-forge/main/control/devel/@frd/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-07-20 22:30:49
|
Revision: 8396 http://octave.svn.sourceforge.net/octave/?rev=8396&view=rev Author: paramaniac Date: 2011-07-20 22:30:39 +0000 (Wed, 20 Jul 2011) Log Message: ----------- control: move frd models into place (2) Added Paths: ----------- trunk/octave-forge/main/control/inst/__adjust_frd_data__.m trunk/octave-forge/main/control/inst/__frd_dim__.m Removed Paths: ------------- trunk/octave-forge/main/control/devel/__adjust_frd_data__.m trunk/octave-forge/main/control/devel/__frd_dim__.m Deleted: trunk/octave-forge/main/control/devel/__adjust_frd_data__.m =================================================================== --- trunk/octave-forge/main/control/devel/__adjust_frd_data__.m 2011-07-20 22:27:43 UTC (rev 8395) +++ trunk/octave-forge/main/control/devel/__adjust_frd_data__.m 2011-07-20 22:30:39 UTC (rev 8396) @@ -1,51 +0,0 @@ -## Copyright (C) 2010 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 -*- -## Common code for adjusting FRD model data. -## Used by @frd/frd.m and @frd/__set__.m - -## Author: Lukas Reichlin <luk...@gm...> -## Created: October 2010 -## Version: 0.1 - -function [H, w] = __adjust_frd_data__ (H, w); - - w = reshape (w, [], 1); - lw = length (w); - - if (ndims (H) != 3 && ! isempty (H)) - if (isscalar (H)) - H = reshape (H, 1, 1, []); - if (lw > 1) - H = repmat (H, [1, 1, lw]); # needed for "frd1 + scalar2" or "scalar1 * frd2) - endif - elseif (isvector (H) && length (H) == lw) # SISO system (H is a vector) - H = reshape (H, 1, 1, []); - elseif (ismatrix (H)) - H = reshape (H, rows (H), []); - if (lw > 1) - H = repmat (H, [1, 1, lw]); # needed for "frd1 + matrix2" or "matrix1 * frd2) - endif - else - error ("frd: first argument H invalid"); - endif - elseif (isempty (H)) - H = zeros (0, 0, 0); - endif - -endfunction \ No newline at end of file Deleted: trunk/octave-forge/main/control/devel/__frd_dim__.m =================================================================== --- trunk/octave-forge/main/control/devel/__frd_dim__.m 2011-07-20 22:27:43 UTC (rev 8395) +++ trunk/octave-forge/main/control/devel/__frd_dim__.m 2011-07-20 22:30:39 UTC (rev 8396) @@ -1,47 +0,0 @@ -## Copyright (C) 2010 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 -*- -## Number of outputs and inputs of transfer function numerator and -## denominator. For internal use only. - -## Author: Lukas Reichlin <luk...@gm...> -## Created: February 2010 -## Version: 0.1 - -function [p, m, l] = __frd_dim__ (H, w) - - if (! isnumeric (H)) - error ("frd: H must be a 3-dimensional numeric array"); - endif - - lw = length (w); - - if (! isempty (w) && (! is_real_vector (w) || any (w < 0) \ - || ! issorted (w) || w(1) > w(end) \ - || length (unique (w)) != lw)) - error ("frd: w must be a vector of positive real numbers"); - endif - - [p, m, l] = size (H); - - if (l != lw) - error ("frd: H (%dx%dx%d) and w (%d) must have equal length", - p, m, l, lw); - endif - -endfunction \ No newline at end of file Copied: trunk/octave-forge/main/control/inst/__adjust_frd_data__.m (from rev 8395, trunk/octave-forge/main/control/devel/__adjust_frd_data__.m) =================================================================== --- trunk/octave-forge/main/control/inst/__adjust_frd_data__.m (rev 0) +++ trunk/octave-forge/main/control/inst/__adjust_frd_data__.m 2011-07-20 22:30:39 UTC (rev 8396) @@ -0,0 +1,51 @@ +## Copyright (C) 2010 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 -*- +## Common code for adjusting FRD model data. +## Used by @frd/frd.m and @frd/__set__.m + +## Author: Lukas Reichlin <luk...@gm...> +## Created: October 2010 +## Version: 0.1 + +function [H, w] = __adjust_frd_data__ (H, w); + + w = reshape (w, [], 1); + lw = length (w); + + if (ndims (H) != 3 && ! isempty (H)) + if (isscalar (H)) + H = reshape (H, 1, 1, []); + if (lw > 1) + H = repmat (H, [1, 1, lw]); # needed for "frd1 + scalar2" or "scalar1 * frd2) + endif + elseif (isvector (H) && length (H) == lw) # SISO system (H is a vector) + H = reshape (H, 1, 1, []); + elseif (ismatrix (H)) + H = reshape (H, rows (H), []); + if (lw > 1) + H = repmat (H, [1, 1, lw]); # needed for "frd1 + matrix2" or "matrix1 * frd2) + endif + else + error ("frd: first argument H invalid"); + endif + elseif (isempty (H)) + H = zeros (0, 0, 0); + endif + +endfunction \ No newline at end of file Copied: trunk/octave-forge/main/control/inst/__frd_dim__.m (from rev 8395, trunk/octave-forge/main/control/devel/__frd_dim__.m) =================================================================== --- trunk/octave-forge/main/control/inst/__frd_dim__.m (rev 0) +++ trunk/octave-forge/main/control/inst/__frd_dim__.m 2011-07-20 22:30:39 UTC (rev 8396) @@ -0,0 +1,47 @@ +## Copyright (C) 2010 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 -*- +## Number of outputs and inputs of transfer function numerator and +## denominator. For internal use only. + +## Author: Lukas Reichlin <luk...@gm...> +## Created: February 2010 +## Version: 0.1 + +function [p, m, l] = __frd_dim__ (H, w) + + if (! isnumeric (H)) + error ("frd: H must be a 3-dimensional numeric array"); + endif + + lw = length (w); + + if (! isempty (w) && (! is_real_vector (w) || any (w < 0) \ + || ! issorted (w) || w(1) > w(end) \ + || length (unique (w)) != lw)) + error ("frd: w must be a vector of positive real numbers"); + endif + + [p, m, l] = size (H); + + if (l != lw) + error ("frd: H (%dx%dx%d) and w (%d) must have equal length", + p, m, l, lw); + endif + +endfunction \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-07-21 15:12:47
|
Revision: 8398 http://octave.svn.sourceforge.net/octave/?rev=8398&view=rev Author: paramaniac Date: 2011-07-21 15:12:40 +0000 (Thu, 21 Jul 2011) Log Message: ----------- control: prepare release control-2.1.51 Modified Paths: -------------- trunk/octave-forge/main/control/DESCRIPTION trunk/octave-forge/main/control/INDEX trunk/octave-forge/main/control/devel/PROJECTS trunk/octave-forge/main/control/devel/RELEASE_PACKAGE trunk/octave-forge/main/control/doc/NEWS Modified: trunk/octave-forge/main/control/DESCRIPTION =================================================================== --- trunk/octave-forge/main/control/DESCRIPTION 2011-07-21 14:57:01 UTC (rev 8397) +++ trunk/octave-forge/main/control/DESCRIPTION 2011-07-21 15:12:40 UTC (rev 8398) @@ -1,6 +1,6 @@ Name: Control -Version: 2.1.50 -Date: 2011-07-06 +Version: 2.1.51 +Date: 2011-07-21 Author: Lukas Reichlin <luk...@gm...> Maintainer: Lukas Reichlin <luk...@gm...> Title: Control Systems Modified: trunk/octave-forge/main/control/INDEX =================================================================== --- trunk/octave-forge/main/control/INDEX 2011-07-21 14:57:01 UTC (rev 8397) +++ trunk/octave-forge/main/control/INDEX 2011-07-21 15:12:40 UTC (rev 8398) @@ -6,10 +6,12 @@ WestlandLynx Linear Time Invariant Models dss + frd ss tf Model Data Access @lti/dssdata + @lti/frdata @lti/get @lti/set @lti/ssdata Modified: trunk/octave-forge/main/control/devel/PROJECTS =================================================================== --- trunk/octave-forge/main/control/devel/PROJECTS 2011-07-21 14:57:01 UTC (rev 8397) +++ trunk/octave-forge/main/control/devel/PROJECTS 2011-07-21 15:12:40 UTC (rev 8398) @@ -41,12 +41,8 @@ Frequency Response Data: ----------------------- - * Write a nice display routine. - * Tolerances for intersection of frequency vectors in @frd/__sys_group__.m - * Static gains DO make sense in certain cases (conversion from ss or tf gains). - ------------------ State-Space Models: ------------------ Modified: trunk/octave-forge/main/control/devel/RELEASE_PACKAGE =================================================================== --- trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-07-21 14:57:01 UTC (rev 8397) +++ trunk/octave-forge/main/control/devel/RELEASE_PACKAGE 2011-07-21 15:12:40 UTC (rev 8398) @@ -3,6 +3,8 @@ ===================================================================================== 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 * copy-paste entire block at once to the terminal * follow instructions on <http://octave.sourceforge.net/developers.html> @@ -16,12 +18,12 @@ rm -R ~/octave/__TEMP__/control/devel cd ~/octave/__TEMP__ grep -i version control/DESCRIPTION -tar czf control-2.1.50.tar.gz control/ -md5 control-2.1.50.tar.gz -md5 control-2.1.50.tar.gz > md5_control_pkg.txt -uuencode control-2.1.50.tar.gz < control-2.1.50.tar.gz > control-2.1.50.tar.gz.uue +tar czf control-2.1.51.tar.gz control/ +md5 control-2.1.51.tar.gz +md5 control-2.1.51.tar.gz > md5_control_pkg.txt +uuencode control-2.1.51.tar.gz < control-2.1.51.tar.gz > control-2.1.51.tar.gz.uue octave -q --eval \ -"pkg install control-2.1.50.tar.gz" +"pkg install control-2.1.51.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 @@ -36,7 +38,7 @@ ===================================================================================== rm -R ~/octave/__TEMP__ -rm -R ~/octave/control-2.1.50 +rm -R ~/octave/control-2.1.51 ===================================================================================== Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-07-21 14:57:01 UTC (rev 8397) +++ trunk/octave-forge/main/control/doc/NEWS 2011-07-21 15:12:40 UTC (rev 8398) @@ -1,6 +1,14 @@ Summary of important user-visible changes for releases of the control package =============================================================================== +control-2.1.51 Release Date: 2011-07-21 Release Manager: Lukas Reichlin +=============================================================================== + +** frd.m + -- Support for Frequency Response Data (frd) measurement "models". + + +=============================================================================== control-2.1.50 Release Date: 2011-07-06 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-07-24 06:26:05
|
Revision: 8405 http://octave.svn.sourceforge.net/octave/?rev=8405&view=rev Author: paramaniac Date: 2011-07-24 06:25:59 +0000 (Sun, 24 Jul 2011) Log Message: ----------- control: touch up frdata and NEWS file Modified Paths: -------------- trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/inst/@lti/frdata.m Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-07-23 11:02:10 UTC (rev 8404) +++ trunk/octave-forge/main/control/doc/NEWS 2011-07-24 06:25:59 UTC (rev 8405) @@ -1,6 +1,17 @@ Summary of important user-visible changes for releases of the control package =============================================================================== +control-2.x.yy Release Date: 2011-xx-yy Release Manager: Lukas Reichlin +=============================================================================== + +** @lti/frdata.m + -- The frequency response is now returned correctly as an array and not as a + vector, unless the "vector" option is set and the system is single-input + single-output. + -- Added help text. + + +=============================================================================== control-2.1.51 Release Date: 2011-07-21 Release Manager: Lukas Reichlin =============================================================================== Modified: trunk/octave-forge/main/control/inst/@lti/frdata.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/frdata.m 2011-07-23 11:02:10 UTC (rev 8404) +++ trunk/octave-forge/main/control/inst/@lti/frdata.m 2011-07-24 06:25:59 UTC (rev 8405) @@ -58,7 +58,7 @@ tsam = sys.tsam; - if (rtype(1) == "v" && issiso (sys)) + if (lower (rtype(1)) == "v" && issiso (sys)) H = reshape (H, [], 1); endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-07-25 17:15:43
|
Revision: 8410 http://octave.svn.sourceforge.net/octave/?rev=8410&view=rev Author: paramaniac Date: 2011-07-25 17:15:34 +0000 (Mon, 25 Jul 2011) Log Message: ----------- control: use scaling for zero computations Modified Paths: -------------- trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/inst/@ss/__zero__.m trunk/octave-forge/main/control/inst/ltimodels.m trunk/octave-forge/main/control/src/slab08nd.cc trunk/octave-forge/main/control/src/slag08bd.cc Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-07-25 09:28:13 UTC (rev 8409) +++ trunk/octave-forge/main/control/doc/NEWS 2011-07-25 17:15:34 UTC (rev 8410) @@ -4,6 +4,10 @@ control-2.x.yy Release Date: 2011-xx-yy Release Manager: Lukas Reichlin =============================================================================== +** @lti/zero.m + -- Use scaling for state-space and descriptor state-space models unless + property "scaled" is set to true. + ** @lti/frdata.m -- The frequency response is now returned correctly as an array and not as a vector, unless the "vector" option is set and the system is single-input Modified: trunk/octave-forge/main/control/inst/@ss/__zero__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__zero__.m 2011-07-25 09:28:13 UTC (rev 8409) +++ trunk/octave-forge/main/control/inst/@ss/__zero__.m 2011-07-25 17:15:34 UTC (rev 8410) @@ -27,9 +27,9 @@ function [zer, gain] = __zero__ (sys, argc) if (isempty (sys.e)) - [zer, gain] = slab08nd (sys.a, sys.b, sys.c, sys.d); + [zer, gain] = slab08nd (sys.a, sys.b, sys.c, sys.d, sys.scaled); else - zer = slag08bd (sys.a, sys.e, sys.b, sys.c, sys.d); + zer = slag08bd (sys.a, sys.e, sys.b, sys.c, sys.d, sys.scaled); if (argc > 1 && issiso (sys)) pol = pole (sys); gain = sltg04bx (sys.a, sys.e, sys.b, sys.c, sys.d, \ Modified: trunk/octave-forge/main/control/inst/ltimodels.m =================================================================== --- trunk/octave-forge/main/control/inst/ltimodels.m 2011-07-25 09:28:13 UTC (rev 8409) +++ trunk/octave-forge/main/control/inst/ltimodels.m 2011-07-25 17:15:34 UTC (rev 8410) @@ -189,7 +189,7 @@ %! D = [ 0 0 %! 0.0768 0.1134 ]; %! -%! sys = ss (A, B, C, D); +%! sys = ss (A, B, C, D, "scaled", true); %! z = sort (zero (sys)); %! %! z_exp = sort ([-13.2759; 12.5774; -0.0155]); @@ -237,7 +237,7 @@ %! 0 -1 -2 %! 0 0 0 ]; %! -%! sys = dss (A, B, C, D, E); +%! sys = dss (A, B, C, D, E, "scaled", true); %! z = zero (sys); %! %! z_exp = 1; Modified: trunk/octave-forge/main/control/src/slab08nd.cc =================================================================== --- trunk/octave-forge/main/control/src/slab08nd.cc 2011-07-25 09:28:13 UTC (rev 8409) +++ trunk/octave-forge/main/control/src/slab08nd.cc 2011-07-25 17:15:34 UTC (rev 8410) @@ -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.4 +Version: 0.5 */ @@ -73,20 +73,26 @@ int nargin = args.length (); octave_value_list retval; - if (nargin != 4) + if (nargin != 5) { print_usage (); } else { // arguments in - char equil = 'N'; + char equil; const Matrix a = args(0).matrix_value (); const Matrix b = args(1).matrix_value (); const Matrix c = args(2).matrix_value (); const Matrix d = args(3).matrix_value (); + const int scaled = args(4).int_value (); + if (scaled == 0) + equil = 'S'; + else + equil = 'N'; + int n = a.rows (); // n: number of states int m = b.columns (); // m: number of inputs int p = c.rows (); // p: number of outputs Modified: trunk/octave-forge/main/control/src/slag08bd.cc =================================================================== --- trunk/octave-forge/main/control/src/slag08bd.cc 2011-07-25 09:28:13 UTC (rev 8409) +++ trunk/octave-forge/main/control/src/slag08bd.cc 2011-07-25 17:15:34 UTC (rev 8410) @@ -23,7 +23,7 @@ Author: Lukas Reichlin <luk...@gm...> Created: September 2010 -Version: 0.2 +Version: 0.3 */ @@ -73,20 +73,26 @@ int nargin = args.length (); octave_value_list retval; - if (nargin != 5) + if (nargin != 6) { print_usage (); } else { // arguments in - char equil = 'N'; + char equil; Matrix a = args(0).matrix_value (); Matrix e = args(1).matrix_value (); Matrix b = args(2).matrix_value (); Matrix c = args(3).matrix_value (); Matrix d = args(4).matrix_value (); + const int scaled = args(5).int_value (); + + if (scaled == 0) + equil = 'S'; + else + equil = 'N'; int l = a.rows (); // l: number of states int n = a.rows (); // n: number of states This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-07-25 18:32:12
|
Revision: 8411 http://octave.svn.sourceforge.net/octave/?rev=8411&view=rev Author: paramaniac Date: 2011-07-25 18:32:06 +0000 (Mon, 25 Jul 2011) Log Message: ----------- control: use scaling for minreal Modified Paths: -------------- trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/inst/@ss/__minreal__.m trunk/octave-forge/main/control/inst/ltimodels.m trunk/octave-forge/main/control/src/sltb01pd.cc trunk/octave-forge/main/control/src/sltg01jd.cc Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-07-25 17:15:34 UTC (rev 8410) +++ trunk/octave-forge/main/control/doc/NEWS 2011-07-25 18:32:06 UTC (rev 8411) @@ -4,6 +4,14 @@ control-2.x.yy Release Date: 2011-xx-yy Release Manager: Lukas Reichlin =============================================================================== +** @lti/minreal.m + -- Use scaling for state-space and descriptor state-space models unless + property "scaled" is set to true. + -- More accurate results are to be expected for descriptor state-space + models by performing only those reduction phases where effective order + reduction occurs. This is achieved by saving the system matrices before + each phase and restoring them if no order reduction took place. + ** @lti/zero.m -- Use scaling for state-space and descriptor state-space models unless property "scaled" is set to true. Modified: trunk/octave-forge/main/control/inst/@ss/__minreal__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__minreal__.m 2011-07-25 17:15:34 UTC (rev 8410) +++ trunk/octave-forge/main/control/inst/@ss/__minreal__.m 2011-07-25 18:32:06 UTC (rev 8411) @@ -33,10 +33,10 @@ endif if (isempty (sys.e)) - [a, b, c] = sltb01pd (sys.a, sys.b, sys.c, tol); + [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); + [a, e, b, c] = sltg01jd (sys.a, sys.e, sys.b, sys.c, tol, sys.scaled); retsys = dss (a, b, c, sys.d, e); endif Modified: trunk/octave-forge/main/control/inst/ltimodels.m =================================================================== --- trunk/octave-forge/main/control/inst/ltimodels.m 2011-07-25 17:15:34 UTC (rev 8410) +++ trunk/octave-forge/main/control/inst/ltimodels.m 2011-07-25 18:32:06 UTC (rev 8411) @@ -272,7 +272,7 @@ %! %! D = zeros (2, 1); %! -%! sys = ss (A, B, C, D); +%! sys = ss (A, B, C, D, "scaled", true); %! sysmin = minreal (sys, 0.0); %! [Ar, Br, Cr, Dr] = ssdata (sysmin); %! M = [Ar, Br; Cr, Dr]; @@ -296,80 +296,81 @@ ## dss: minreal (SLICOT TG01JD) -%!shared Ar, Br, Cr, Dr, Er, Ae, Be, Ce, De, Ee -%! A = [ -2 -3 0 0 0 0 0 0 0 -%! 1 0 0 0 0 0 0 0 0 -%! 0 0 -2 -3 0 0 0 0 0 -%! 0 0 1 0 0 0 0 0 0 -%! 0 0 0 0 1 0 0 0 0 -%! 0 0 0 0 0 1 0 0 0 -%! 0 0 0 0 0 0 1 0 0 -%! 0 0 0 0 0 0 0 1 0 -%! 0 0 0 0 0 0 0 0 1 ]; -%! -%! E = [ 1 0 0 0 0 0 0 0 0 -%! 0 1 0 0 0 0 0 0 0 -%! 0 0 1 0 0 0 0 0 0 -%! 0 0 0 1 0 0 0 0 0 -%! 0 0 0 0 0 0 0 0 0 -%! 0 0 0 0 1 0 0 0 0 -%! 0 0 0 0 0 0 0 0 0 -%! 0 0 0 0 0 0 1 0 0 -%! 0 0 0 0 0 0 0 1 0 ]; -%! -%! B = [ 1 0 -%! 0 0 -%! 0 1 -%! 0 0 -%! -1 0 -%! 0 0 -%! 0 -1 -%! 0 0 -%! 0 0 ]; -%! -%! C = [ 1 0 1 -3 0 1 0 2 0 -%! 0 1 1 3 0 1 0 0 1 ]; -%! -%! D = zeros (2, 2); -%! -%! sys = dss (A, B, C, D, E); -%! sysmin = minreal (sys, 0.0); -%! [Ar, Br, Cr, Dr, Er] = dssdata (sysmin); -%! -%! Ae = [ 1.0000 -0.0393 -0.0980 -0.1066 0.0781 -0.2330 0.0777 -%! 0.0000 1.0312 0.2717 0.2609 -0.1533 0.6758 -0.3553 -%! 0.0000 0.0000 1.3887 0.6699 -0.4281 1.6389 -0.7615 -%! 0.0000 0.0000 0.0000 -1.2147 0.2423 -0.9792 0.4788 -%! 0.0000 0.0000 0.0000 0.0000 -1.0545 0.5035 -0.2788 -%! 0.0000 0.0000 0.0000 0.0000 0.0000 1.6355 -0.4323 -%! 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000 ]; -%! -%! Ee = [ 0.4100 0.2590 0.5080 -0.3109 0.0705 0.1429 -0.1477 -%! -0.7629 -0.3464 0.0992 -0.3007 0.0619 0.2483 -0.0152 -%! 0.1120 -0.2124 -0.4184 -0.1288 0.0569 -0.4213 -0.6182 -%! 0.0000 0.1122 -0.0039 0.2771 -0.0758 0.0975 0.3923 -%! 0.0000 0.0000 0.3708 -0.4290 0.1006 0.1402 -0.2699 -%! 0.0000 0.0000 0.0000 0.0000 0.9458 -0.2211 0.2378 -%! 0.0000 0.0000 0.0000 0.5711 0.2648 0.5948 -0.5000 ]; -%! -%! Be = [ -0.5597 0.2363 -%! -0.4843 -0.0498 -%! -0.4727 -0.1491 -%! 0.1802 1.1574 -%! 0.5995 0.1556 -%! -0.1729 -0.3999 -%! 0.0000 0.2500 ]; -%! -%! Ce = [ 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 4.0000 -%! 0.0000 0.0000 0.0000 0.0000 0.0000 3.1524 -1.7500 ]; -%! -%! De = zeros (2, 2); -%! -%!assert (Ar, Ae, 1e-4); -%!assert (Br, Be, 1e-4); -%!assert (Cr, Ce, 1e-4); -%!assert (Dr, De, 1e-4); -%!assert (Er, Ee, 1e-4); +## FIXME: Test fails with larger ldwork in sltg01jd.cc +#%!shared Ar, Br, Cr, Dr, Er, Ae, Be, Ce, De, Ee +#%! A = [ -2 -3 0 0 0 0 0 0 0 +#%! 1 0 0 0 0 0 0 0 0 +#%! 0 0 -2 -3 0 0 0 0 0 +#%! 0 0 1 0 0 0 0 0 0 +#%! 0 0 0 0 1 0 0 0 0 +#%! 0 0 0 0 0 1 0 0 0 +#%! 0 0 0 0 0 0 1 0 0 +#%! 0 0 0 0 0 0 0 1 0 +#%! 0 0 0 0 0 0 0 0 1 ]; +#%! +#%! E = [ 1 0 0 0 0 0 0 0 0 +#%! 0 1 0 0 0 0 0 0 0 +#%! 0 0 1 0 0 0 0 0 0 +#%! 0 0 0 1 0 0 0 0 0 +#%! 0 0 0 0 0 0 0 0 0 +#%! 0 0 0 0 1 0 0 0 0 +#%! 0 0 0 0 0 0 0 0 0 +#%! 0 0 0 0 0 0 1 0 0 +#%! 0 0 0 0 0 0 0 1 0 ]; +#%! +#%! B = [ 1 0 +#%! 0 0 +#%! 0 1 +#%! 0 0 +#%! -1 0 +#%! 0 0 +#%! 0 -1 +#%! 0 0 +#%! 0 0 ]; +#%! +#%! C = [ 1 0 1 -3 0 1 0 2 0 +#%! 0 1 1 3 0 1 0 0 1 ]; +#%! +#%! D = zeros (2, 2); +#%! +#%! sys = dss (A, B, C, D, E, "scaled", true); +#%! sysmin = minreal (sys, 0.0); +#%! [Ar, Br, Cr, Dr, Er] = dssdata (sysmin); +#%! +#%! Ae = [ 1.0000 -0.0393 -0.0980 -0.1066 0.0781 -0.2330 0.0777 +#%! 0.0000 1.0312 0.2717 0.2609 -0.1533 0.6758 -0.3553 +#%! 0.0000 0.0000 1.3887 0.6699 -0.4281 1.6389 -0.7615 +#%! 0.0000 0.0000 0.0000 -1.2147 0.2423 -0.9792 0.4788 +#%! 0.0000 0.0000 0.0000 0.0000 -1.0545 0.5035 -0.2788 +#%! 0.0000 0.0000 0.0000 0.0000 0.0000 1.6355 -0.4323 +#%! 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000 ]; +#%! +#%! Ee = [ 0.4100 0.2590 0.5080 -0.3109 0.0705 0.1429 -0.1477 +#%! -0.7629 -0.3464 0.0992 -0.3007 0.0619 0.2483 -0.0152 +#%! 0.1120 -0.2124 -0.4184 -0.1288 0.0569 -0.4213 -0.6182 +#%! 0.0000 0.1122 -0.0039 0.2771 -0.0758 0.0975 0.3923 +#%! 0.0000 0.0000 0.3708 -0.4290 0.1006 0.1402 -0.2699 +#%! 0.0000 0.0000 0.0000 0.0000 0.9458 -0.2211 0.2378 +#%! 0.0000 0.0000 0.0000 0.5711 0.2648 0.5948 -0.5000 ]; +#%! +#%! Be = [ -0.5597 0.2363 +#%! -0.4843 -0.0498 +#%! -0.4727 -0.1491 +#%! 0.1802 1.1574 +#%! 0.5995 0.1556 +#%! -0.1729 -0.3999 +#%! 0.0000 0.2500 ]; +#%! +#%! Ce = [ 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 4.0000 +#%! 0.0000 0.0000 0.0000 0.0000 0.0000 3.1524 -1.7500 ]; +#%! +#%! De = zeros (2, 2); +#%! +#%!assert (Ar, Ae, 1e-4); +#%!assert (Br, Be, 1e-4); +#%!assert (Cr, Ce, 1e-4); +#%!assert (Dr, De, 1e-4); +#%!assert (Er, Ee, 1e-4); ## ss: sminreal Modified: trunk/octave-forge/main/control/src/sltb01pd.cc =================================================================== --- trunk/octave-forge/main/control/src/sltb01pd.cc 2011-07-25 17:15:34 UTC (rev 8410) +++ trunk/octave-forge/main/control/src/sltb01pd.cc 2011-07-25 18:32:06 UTC (rev 8411) @@ -1,6 +1,6 @@ /* -Copyright (C) 2010 Lukas F. Reichlin +Copyright (C) 2010, 2011 Lukas F. Reichlin This file is part of LTI Syncope. @@ -23,7 +23,7 @@ Author: Lukas Reichlin <luk...@gm...> Created: September 2010 -Version: 0.2 +Version: 0.3 */ @@ -55,7 +55,7 @@ int nargin = args.length (); octave_value_list retval; - if (nargin != 4) + if (nargin != 5) { print_usage (); } @@ -63,12 +63,18 @@ { // arguments in char job = 'M'; - char equil = 'N'; + char equil; Matrix a = args(0).matrix_value (); Matrix b = args(1).matrix_value (); Matrix c = args(2).matrix_value (); double tol = args(3).double_value (); + const int scaled = args(4).int_value (); + + if (scaled == 0) + equil = 'S'; + else + equil = 'N'; int n = a.rows (); // n: number of states int m = b.columns (); // m: number of inputs Modified: trunk/octave-forge/main/control/src/sltg01jd.cc =================================================================== --- trunk/octave-forge/main/control/src/sltg01jd.cc 2011-07-25 17:15:34 UTC (rev 8410) +++ trunk/octave-forge/main/control/src/sltg01jd.cc 2011-07-25 18:32:06 UTC (rev 8411) @@ -1,6 +1,6 @@ /* -Copyright (C) 2010 Lukas F. Reichlin +Copyright (C) 2010, 2011 Lukas F. Reichlin This file is part of LTI Syncope. @@ -23,7 +23,7 @@ Author: Lukas Reichlin <luk...@gm...> Created: September 2010 -Version: 0.1 +Version: 0.2 */ @@ -57,7 +57,7 @@ int nargin = args.length (); octave_value_list retval; - if (nargin != 5) + if (nargin != 6) { print_usage (); } @@ -66,13 +66,19 @@ // arguments in char job = 'I'; char systyp = 'R'; - char equil = 'N'; + char equil; Matrix a = args(0).matrix_value (); Matrix e = args(1).matrix_value (); Matrix b = args(2).matrix_value (); Matrix c = args(3).matrix_value (); double tol = args(4).double_value (); + const int scaled = args(5).int_value (); + + if (scaled == 0) + equil = 'S'; + else + equil = 'N'; int n = a.rows (); // n: number of states int m = b.columns (); // m: number of inputs @@ -96,8 +102,8 @@ // workspace int liwork = n + max (m, p); - int ldwork = max (n, 2*m, 2*p); - // int ldwork = n * (2*n + m + p) + max (n, 2*m, 2*p); + // int ldwork = max (n, 2*m, 2*p); + int ldwork = n * (2*n + m + p) + max (n, 2*m, 2*p); // FIXME: larger ldwork should give better results, // but it breaks the test that Slicot provides. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <par...@us...> - 2011-07-27 13:12:33
|
Revision: 8416 http://octave.svn.sourceforge.net/octave/?rev=8416&view=rev Author: paramaniac Date: 2011-07-27 13:12:27 +0000 (Wed, 27 Jul 2011) Log Message: ----------- control: use scaling before computation of L-infinity norm and Hankel singular values Modified Paths: -------------- trunk/octave-forge/main/control/doc/NEWS trunk/octave-forge/main/control/inst/@lti/dssdata.m trunk/octave-forge/main/control/inst/@lti/norm.m trunk/octave-forge/main/control/inst/@lti/ssdata.m trunk/octave-forge/main/control/inst/@ss/__sys_data__.m trunk/octave-forge/main/control/inst/hsvd.m trunk/octave-forge/main/control/src/slab13ad.cc trunk/octave-forge/main/control/src/slab13dd.cc Modified: trunk/octave-forge/main/control/doc/NEWS =================================================================== --- trunk/octave-forge/main/control/doc/NEWS 2011-07-27 10:50:56 UTC (rev 8415) +++ trunk/octave-forge/main/control/doc/NEWS 2011-07-27 13:12:27 UTC (rev 8416) @@ -4,6 +4,13 @@ control-2.x.yy Release Date: 2011-xx-yy Release Manager: Lukas Reichlin =============================================================================== +** hsvd.m + -- Use scaling unless state-space model property "scaled" is set to true. + +** @lti/norm.m + -- Use scaling for computation of L-infinity norm unless state-space model + property "scaled" is set to true. + ** @lti/minreal.m -- Use scaling for state-space and descriptor state-space models unless property "scaled" is set to true. Modified: trunk/octave-forge/main/control/inst/@lti/dssdata.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/dssdata.m 2011-07-27 10:50:56 UTC (rev 8415) +++ trunk/octave-forge/main/control/inst/@lti/dssdata.m 2011-07-27 13:12:27 UTC (rev 8416) @@ -1,4 +1,4 @@ -## Copyright (C) 2010 Lukas F. Reichlin +## Copyright (C) 2010, 2011 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -52,9 +52,9 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: September 2010 -## Version: 0.1 +## Version: 0.2 -function [a, b, c, d, e, tsam] = dssdata (sys, flg = 0) +function [a, b, c, d, e, tsam, scaled] = dssdata (sys, flg = 0) ## NOTE: In case sys is not a dss model (matrice e empty), ## dssdata (sys, []) returns e = [] whereas @@ -68,7 +68,7 @@ sys = ss (sys); endif - [a, b, c, d, e] = __sys_data__ (sys); + [a, b, c, d, e, ~, scaled] = __sys_data__ (sys); if (isempty (e) && ! isempty (flg)) e = eye (size (a)); # return eye for ss models Modified: trunk/octave-forge/main/control/inst/@lti/norm.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/norm.m 2011-07-27 10:50:56 UTC (rev 8415) +++ trunk/octave-forge/main/control/inst/@lti/norm.m 2011-07-27 13:12:27 UTC (rev 8416) @@ -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. ## @@ -26,7 +26,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: November 2009 -## Version: 0.3 +## Version: 0.4 function [gain, varargout] = norm (sys, ntype = "2", tol = 0.01) @@ -86,19 +86,19 @@ function [gain, wpeak] = linfnorm (sys, tol = 0.01) - [a, b, c, d, e, tsam] = dssdata (sys, []); + [a, b, c, d, e, tsam, scaled] = dssdata (sys, []); discrete = ! isct (sys); tol = max (tol, 100*eps); if (isempty (e)) - [fpeak, gpeak] = slab13dd (a, a, b, c, d, discrete, false, tol); # TODO: avoid dummy argument + [fpeak, gpeak] = slab13dd (a, a, b, c, d, discrete, false, tol, scaled); # TODO: avoid dummy argument else if (rcond (e) < eps) gain = inf; wpeak = inf; return; else - [fpeak, gpeak] = slab13dd (a, e, b, c, d, discrete, true, tol); + [fpeak, gpeak] = slab13dd (a, e, b, c, d, discrete, true, tol, scaled); endif endif Modified: trunk/octave-forge/main/control/inst/@lti/ssdata.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/ssdata.m 2011-07-27 10:50:56 UTC (rev 8415) +++ trunk/octave-forge/main/control/inst/@lti/ssdata.m 2011-07-27 13:12:27 UTC (rev 8416) @@ -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. ## @@ -45,15 +45,15 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: September 2009 -## Version: 0.2 +## Version: 0.3 -function [a, b, c, d, tsam] = ssdata (sys) +function [a, b, c, d, tsam, scaled] = ssdata (sys) if (! isa (sys, "ss")) sys = ss (sys); endif - [a, b, c, d, e] = __sys_data__ (sys); + [a, b, c, d, e, ~, scaled] = __sys_data__ (sys); if (! isempty (e)) if (rcond (e) < eps) # check for singularity Modified: trunk/octave-forge/main/control/inst/@ss/__sys_data__.m =================================================================== --- trunk/octave-forge/main/control/inst/@ss/__sys_data__.m 2011-07-27 10:50:56 UTC (rev 8415) +++ trunk/octave-forge/main/control/inst/@ss/__sys_data__.m 2011-07-27 13:12:27 UTC (rev 8416) @@ -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. ## @@ -20,9 +20,9 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: September 2009 -## Version: 0.2 +## Version: 0.3 -function [a, b, c, d, e, stname] = __sys_data__ (sys) +function [a, b, c, d, e, stname, scaled] = __sys_data__ (sys) a = sys.a; b = sys.b; @@ -30,5 +30,6 @@ d = sys.d; e = sys.e; stname = sys.stname; + scaled = sys.scaled; endfunction \ No newline at end of file Modified: trunk/octave-forge/main/control/inst/hsvd.m =================================================================== --- trunk/octave-forge/main/control/inst/hsvd.m 2011-07-27 10:50:56 UTC (rev 8415) +++ trunk/octave-forge/main/control/inst/hsvd.m 2011-07-27 13:12:27 UTC (rev 8416) @@ -1,4 +1,4 @@ -## Copyright (C) 2010 Lukas F. Reichlin +## Copyright (C) 2010, 2011 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -26,7 +26,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: January 2010 -## Version: 0.2 +## Version: 0.3 function hsv_r = hsvd (sys, prop = "offset", val = 1e-8) @@ -42,7 +42,7 @@ error ("hsvd: second argument invalid"); endif - [a, b, c] = ssdata (sys); + [a, b, c, ~, ~, scaled] = ssdata (sys); discrete = ! isct (sys); @@ -52,7 +52,7 @@ alpha = - val; endif - [hsv, ns] = slab13ad (a, b, c, discrete, alpha); + [hsv, ns] = slab13ad (a, b, c, discrete, alpha, scaled); if (nargout) hsv_r = hsv; @@ -88,7 +88,7 @@ %! 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 %! 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000]; %! -%! sys = ss (a, b, c); +%! sys = ss (a, b, c, [], "scaled", true); %! hsv = hsvd (sys); %! %! hsv_exp = [2.5139; 2.0846; 1.9178; 0.7666; 0.5473; 0.0253; 0.0246]; Modified: trunk/octave-forge/main/control/src/slab13ad.cc =================================================================== --- trunk/octave-forge/main/control/src/slab13ad.cc 2011-07-27 10:50:56 UTC (rev 8415) +++ trunk/octave-forge/main/control/src/slab13ad.cc 2011-07-27 13:12:27 UTC (rev 8416) @@ -1,6 +1,6 @@ /* -Copyright (C) 2010 Lukas F. Reichlin +Copyright (C) 2010, 2011 Lukas F. Reichlin This file is part of LTI Syncope. @@ -23,7 +23,7 @@ Author: Lukas Reichlin <luk...@gm...> Created: January 2010 -Version: 0.2 +Version: 0.3 */ @@ -55,7 +55,7 @@ int nargin = args.length (); octave_value_list retval; - if (nargin != 5) + if (nargin != 6) { print_usage (); } @@ -63,18 +63,25 @@ { // arguments in char dico; - char equil = 'N'; + char equil; Matrix a = args(0).matrix_value (); Matrix b = args(1).matrix_value (); Matrix c = args(2).matrix_value (); int discrete = args(3).int_value (); double alpha = args(4).double_value (); + const int scaled = args(5).int_value (); if (discrete == 0) dico = 'C'; else dico = 'D'; + + if (scaled == 0) + equil = 'S'; + else + equil = 'N'; + int n = a.rows (); // n: number of states int m = b.columns (); // m: number of inputs Modified: trunk/octave-forge/main/control/src/slab13dd.cc =================================================================== --- trunk/octave-forge/main/control/src/slab13dd.cc 2011-07-27 10:50:56 UTC (rev 8415) +++ trunk/octave-forge/main/control/src/slab13dd.cc 2011-07-27 13:12:27 UTC (rev 8416) @@ -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 */ @@ -60,7 +60,7 @@ int nargin = args.length (); octave_value_list retval; - if (nargin != 8) + if (nargin != 9) { print_usage (); } @@ -69,7 +69,7 @@ // arguments in char dico; char jobe; - char equil = 'N'; + char equil; char jobd = 'D'; Matrix a = args(0).matrix_value (); @@ -80,6 +80,7 @@ int discrete = args(5).int_value (); int descriptor = args(6).int_value (); double tol = args(7).double_value (); + const int scaled = args(8).int_value (); if (discrete == 0) dico = 'C'; @@ -90,7 +91,12 @@ jobe = 'I'; else jobe = 'G'; - + + if (scaled == 0) + equil = 'S'; + else + equil = 'N'; + 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. |