This list is closed, nobody may subscribe to it.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(10) |
Aug
(5) |
Sep
(3) |
Oct
(41) |
Nov
(41) |
Dec
(33) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(75) |
Feb
(10) |
Mar
(170) |
Apr
(174) |
May
(66) |
Jun
(11) |
Jul
(10) |
Aug
(44) |
Sep
(73) |
Oct
(28) |
Nov
(139) |
Dec
(52) |
| 2003 |
Jan
(35) |
Feb
(93) |
Mar
(62) |
Apr
(10) |
May
(55) |
Jun
(70) |
Jul
(37) |
Aug
(16) |
Sep
(56) |
Oct
(31) |
Nov
(57) |
Dec
(83) |
| 2004 |
Jan
(85) |
Feb
(67) |
Mar
(27) |
Apr
(37) |
May
(75) |
Jun
(85) |
Jul
(160) |
Aug
(68) |
Sep
(104) |
Oct
(25) |
Nov
(39) |
Dec
(23) |
| 2005 |
Jan
(10) |
Feb
(45) |
Mar
(43) |
Apr
(19) |
May
(108) |
Jun
(31) |
Jul
(41) |
Aug
(23) |
Sep
(65) |
Oct
(58) |
Nov
(44) |
Dec
(54) |
| 2006 |
Jan
(96) |
Feb
(27) |
Mar
(69) |
Apr
(59) |
May
(67) |
Jun
(35) |
Jul
(13) |
Aug
(461) |
Sep
(160) |
Oct
(399) |
Nov
(32) |
Dec
(72) |
| 2007 |
Jan
(316) |
Feb
(305) |
Mar
(318) |
Apr
(54) |
May
(194) |
Jun
(173) |
Jul
(282) |
Aug
(91) |
Sep
(227) |
Oct
(365) |
Nov
(168) |
Dec
(18) |
| 2008 |
Jan
(71) |
Feb
(111) |
Mar
(155) |
Apr
(173) |
May
(70) |
Jun
(67) |
Jul
(55) |
Aug
(83) |
Sep
(32) |
Oct
(68) |
Nov
(80) |
Dec
(29) |
| 2009 |
Jan
(46) |
Feb
(18) |
Mar
(95) |
Apr
(76) |
May
(140) |
Jun
(98) |
Jul
(84) |
Aug
(123) |
Sep
(94) |
Oct
(131) |
Nov
(142) |
Dec
(125) |
| 2010 |
Jan
(128) |
Feb
(158) |
Mar
(172) |
Apr
(134) |
May
(94) |
Jun
(84) |
Jul
(32) |
Aug
(127) |
Sep
(167) |
Oct
(109) |
Nov
(69) |
Dec
(78) |
| 2011 |
Jan
(39) |
Feb
(58) |
Mar
(52) |
Apr
(47) |
May
(56) |
Jun
(76) |
Jul
(55) |
Aug
(54) |
Sep
(165) |
Oct
(255) |
Nov
(328) |
Dec
(263) |
| 2012 |
Jan
(82) |
Feb
(147) |
Mar
(400) |
Apr
(216) |
May
(209) |
Jun
(160) |
Jul
(86) |
Aug
(141) |
Sep
(156) |
Oct
(6) |
Nov
|
Dec
|
| 2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
(1) |
Dec
(2) |
| 2016 |
Jan
|
Feb
(2) |
Mar
(2) |
Apr
(1) |
May
(1) |
Jun
(2) |
Jul
(1) |
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2019 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2021 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
(4) |
Jun
(8) |
Jul
(2) |
Aug
(5) |
Sep
(9) |
Oct
|
Nov
|
Dec
|
|
From: <jo...@us...> - 2012-09-14 19:36:50
|
Revision: 11023
http://octave.svn.sourceforge.net/octave/?rev=11023&view=rev
Author: jordigh
Date: 2012-09-14 19:36:44 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
Fix typo in iscolormap.m
Modified Paths:
--------------
trunk/octave-forge/main/image/inst/iscolormap.m
Modified: trunk/octave-forge/main/image/inst/iscolormap.m
===================================================================
--- trunk/octave-forge/main/image/inst/iscolormap.m 2012-09-14 19:32:33 UTC (rev 11022)
+++ trunk/octave-forge/main/image/inst/iscolormap.m 2012-09-14 19:36:44 UTC (rev 11023)
@@ -31,7 +31,7 @@
endif
bool = false;
- if (ismatrix (cm) && isreal (cm) isnumeric (cm) && columns(cm) == 3 &&
+ if (ismatrix (cm) && isreal (cm) && isnumeric (cm) && columns(cm) == 3 &&
ndims (cm) == 2 && strcmp (class (cm), "double") &&
min (cm(:)) >= 0 && max (cm(:)) <= 1)
bool = true;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 19:32:42
|
Revision: 11022
http://octave.svn.sourceforge.net/octave/?rev=11022&view=rev
Author: paramaniac
Date: 2012-09-14 19:32:33 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: finish sigma (completely :-)
Modified Paths:
--------------
trunk/octave-forge/main/control/inst/sigma.m
Modified: trunk/octave-forge/main/control/inst/sigma.m
===================================================================
--- trunk/octave-forge/main/control/inst/sigma.m 2012-09-14 19:23:03 UTC (rev 11021)
+++ trunk/octave-forge/main/control/inst/sigma.m 2012-09-14 19:32:33 UTC (rev 11022)
@@ -105,18 +105,19 @@
legend_args{k} = inputname(sys_idx(k)); # watch out for sigma (lticell{:})
endfor
- ## FIXME: legend color is mostly blue if the first system is MIMO
- ## maybe we can plot each line of sv individually
+ ## adjust line colors in legend
+ idx = horzcat (1, cellfun (@rows, sv_db)(1:end-1));
+ idx = cumsum (idx);
## plot results
- semilogx (plot_args{:})
+ h = semilogx (plot_args{:});
axis ("tight")
ylim (__axis_margin__ (ylim))
grid ("on")
title ("Singular Values")
xlabel ("Frequency [rad/s]")
ylabel ("Singular Values [dB]")
- legend (legend_args)
+ legend (h(idx), legend_args)
else # return values
sv_r = sv{1};
w_r = reshape (w{1}, [], 1);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 19:23:09
|
Revision: 11021
http://octave.svn.sourceforge.net/octave/?rev=11021&view=rev
Author: paramaniac
Date: 2012-09-14 19:23:03 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: finish sigma (almost)
Modified Paths:
--------------
trunk/octave-forge/main/control/NEWS
trunk/octave-forge/main/control/inst/sigma.m
Modified: trunk/octave-forge/main/control/NEWS
===================================================================
--- trunk/octave-forge/main/control/NEWS 2012-09-14 18:54:35 UTC (rev 11020)
+++ trunk/octave-forge/main/control/NEWS 2012-09-14 19:23:03 UTC (rev 11021)
@@ -4,6 +4,11 @@
control-2.3.54 Release Date: 2012-xx-yy Release Manager: Lukas Reichlin
===============================================================================
+** Multiplot feature for frequency-domain plotting:
+
+ bode nichols pzmap
+ bodemag nyquist sigma
+
** plot
A selection of experiments from iddata identification datasets can be
plotted by plot (dat, exp) instead of plot (dat(:,:,:,exp)).
Modified: trunk/octave-forge/main/control/inst/sigma.m
===================================================================
--- trunk/octave-forge/main/control/inst/sigma.m 2012-09-14 18:54:35 UTC (rev 11020)
+++ trunk/octave-forge/main/control/inst/sigma.m 2012-09-14 19:23:03 UTC (rev 11021)
@@ -86,18 +86,28 @@
len = numel (H);
plot_args = {};
legend_args = cell (len, 1);
+ colororder = get (gca, "colororder");
+ rc = rows (colororder);
for k = 1:len
+ col = colororder(1+rem (k-1, rc), :);
if (k == len)
lim = nargin;
else
lim = sys_idx(k+1);
endif
style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
- plot_args = cat (2, plot_args, w(k), sv_db(k), style);
+ if (isempty (style))
+ plot_args = cat (2, plot_args, w(k), sv_db(k), {"-", "color", col});
+ else
+ plot_args = cat (2, plot_args, w(k), sv_db(k), style);
+ endif
legend_args{k} = inputname(sys_idx(k)); # watch out for sigma (lticell{:})
endfor
+ ## FIXME: legend color is mostly blue if the first system is MIMO
+ ## maybe we can plot each line of sv individually
+
## plot results
semilogx (plot_args{:})
axis ("tight")
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 18:54:41
|
Revision: 11020
http://octave.svn.sourceforge.net/octave/?rev=11020&view=rev
Author: paramaniac
Date: 2012-09-14 18:54:35 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: finish pzmap
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/test_pzmap.m
trunk/octave-forge/main/control/inst/pzmap.m
Removed Paths:
-------------
trunk/octave-forge/main/control/devel/pzmap2.m
Deleted: trunk/octave-forge/main/control/devel/pzmap2.m
===================================================================
--- trunk/octave-forge/main/control/devel/pzmap2.m 2012-09-14 18:38:01 UTC (rev 11019)
+++ trunk/octave-forge/main/control/devel/pzmap2.m 2012-09-14 18:54:35 UTC (rev 11020)
@@ -1,86 +0,0 @@
-## Copyright (C) 2009, 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} pzmap (@var{sys})
-## @deftypefnx {Function File} {[@var{p}, @var{z}] =} pzmap (@var{sys})
-## Plot the poles and zeros of an LTI system in the complex plane.
-## If no output arguments are given, the result is plotted on the screen.
-## Otherwise, the poles and zeros are computed and returned.
-##
-## @strong{Inputs}
-## @table @var
-## @item sys
-## LTI model.
-## @end table
-##
-## @strong{Outputs}
-## @table @var
-## @item p
-## Poles of @var{sys}.
-## @item z
-## Transmission zeros of @var{sys}.
-## @end table
-## @end deftypefn
-
-## Author: Lukas Reichlin <luk...@gm...>
-## Created: November 2009
-## Version: 0.1
-
-function [pol_r, zer_r] = pzmap2 (varargin)
-
- ## TODO: multiplot feature: pzmap (sys1, "b", sys2, "r", ...)
-
- if (nargin == 0)
- print_usage ();
- endif
-
- % if (! isa (sys, "lti"))
- % error ("pzmap: argument must be an LTI system");
- % endif
-
- pol = cellfun ("@lti/pole", varargin, "uniformoutput", false);
- zer = cellfun ("@lti/zero", varargin, "uniformoutput", false);
-
- if (! nargout)
- pol_re = cellfun (@real, pol, "uniformoutput", false);
- pol_im = cellfun (@imag, pol, "uniformoutput", false);
- zer_re = cellfun (@real, zer, "uniformoutput", false);
- zer_im = cellfun (@imag, zer, "uniformoutput", false);
-
- len = numel (pol);
- plot_args = {};
- legend_args = cell (len, 1);
- colororder = get (gca, "colororder");
- for k = 1 : len
- plot_args = cat (2, plot_args, pol_re(k), pol_im(k), {"x", "color", colororder(k,:)}, \
- zer_re(k), zer_im(k), {"o", "color", colororder(k,:)});
- legend_args{k} = inputname(k);
- endfor
-
- h = plot (plot_args{:});
- grid ("on")
- title ("Pole-Zero Map")
- xlabel ("Real Axis")
- ylabel ("Imaginary Axis")
- legend (h(1:2:2*len), legend_args)
- else
- pol_r = pol{1};
- zer_r = zer{1};
- endif
-
-endfunction
Modified: trunk/octave-forge/main/control/devel/test_pzmap.m
===================================================================
--- trunk/octave-forge/main/control/devel/test_pzmap.m 2012-09-14 18:38:01 UTC (rev 11019)
+++ trunk/octave-forge/main/control/devel/test_pzmap.m 2012-09-14 18:54:35 UTC (rev 11020)
@@ -1,4 +1,4 @@
-pzmap2 (WestlandLynx, Boeing707, BMWengine)
+pzmap (WestlandLynx, Boeing707, BMWengine)
%__next_line_color__ ("reset")
Modified: trunk/octave-forge/main/control/inst/pzmap.m
===================================================================
--- trunk/octave-forge/main/control/inst/pzmap.m 2012-09-14 18:38:01 UTC (rev 11019)
+++ trunk/octave-forge/main/control/inst/pzmap.m 2012-09-14 18:54:35 UTC (rev 11020)
@@ -1,4 +1,4 @@
-## Copyright (C) 2009 Lukas F. Reichlin
+## Copyright (C) 2009, 2011, 2012 Lukas F. Reichlin
##
## This file is part of LTI Syncope.
##
@@ -39,37 +39,66 @@
## Author: Lukas Reichlin <luk...@gm...>
## Created: November 2009
-## Version: 0.1
+## Version: 0.2
-function [pol_r, zer_r] = pzmap (sys)
+function [pol_r, zer_r] = pzmap (varargin)
- ## TODO: multiplot feature: pzmap (sys1, "b", sys2, "r", ...)
-
- if (nargin != 1)
+ if (nargin == 0)
print_usage ();
endif
- if (! isa (sys, "lti"))
- error ("pzmap: argument must be an LTI system");
- endif
+ sys_idx = cellfun (@isa, varargin, {"lti"}); # look for LTI models
- pol = pole (sys);
- zer = zero (sys);
+ pol = cellfun (@pole, varargin(sys_idx), "uniformoutput", false);
+ zer = cellfun (@zero, varargin(sys_idx), "uniformoutput", false);
if (! nargout)
- pol_re = real (pol);
- pol_im = imag (pol);
- zer_re = real (zer);
- zer_im = imag (zer);
+ pol_re = cellfun (@real, pol, "uniformoutput", false);
+ pol_im = cellfun (@imag, pol, "uniformoutput", false);
+ zer_re = cellfun (@real, zer, "uniformoutput", false);
+ zer_im = cellfun (@imag, zer, "uniformoutput", false);
+
+ sys_idx = find (sys_idx);
+ tmp = cellfun (@ischar, varargin);
+ style_idx = find (tmp);
- plot (pol_re, pol_im, "xb", zer_re, zer_im, "or")
+ len = numel (pol);
+ pol_args = {};
+ zer_args = {};
+ legend_args = cell (len, 1);
+ colororder = get (gca, "colororder");
+ rc = rows (colororder);
+
+ for k = 1 : len
+ col = colororder(1+rem (k-1, rc), :);
+ if (k == len)
+ lim = nargin;
+ else
+ lim = sys_idx(k+1);
+ endif
+ style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
+ if (isempty (style))
+ pol_args = cat (2, pol_args, pol_re{k}, pol_im{k}, {"x", "color", col});
+ zer_args = cat (2, zer_args, zer_re{k}, zer_im{k}, {"o", "color", col});
+ else
+ pol_args = cat (2, pol_args, pol_re{k}, pol_im{k}, style);
+ zer_args = cat (2, zer_args, zer_re{k}, zer_im{k}, style);
+ endif
+
+ ## FIXME: try to combine "x", "o" and style for custom colors
+
+ legend_args{k} = inputname(sys_idx(k));
+ endfor
+
+ h = plot (pol_args{:}, zer_args{:});
grid ("on")
- title (["Pole-Zero Map of ", inputname(1)])
+ title ("Pole-Zero Map")
xlabel ("Real Axis")
ylabel ("Imaginary Axis")
+ legend (h(1:len), legend_args)
else
- pol_r = pol;
- zer_r = zer;
+ pol_r = pol{1};
+ zer_r = zer{1};
endif
endfunction
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 18:38:07
|
Revision: 11019
http://octave.svn.sourceforge.net/octave/?rev=11019&view=rev
Author: paramaniac
Date: 2012-09-14 18:38:01 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: fix margin
Modified Paths:
--------------
trunk/octave-forge/main/control/inst/__frequency_response__.m
trunk/octave-forge/main/control/inst/margin.m
Modified: trunk/octave-forge/main/control/inst/__frequency_response__.m
===================================================================
--- trunk/octave-forge/main/control/inst/__frequency_response__.m 2012-09-14 18:20:47 UTC (rev 11018)
+++ trunk/octave-forge/main/control/inst/__frequency_response__.m 2012-09-14 18:38:01 UTC (rev 11019)
@@ -25,10 +25,12 @@
function [H, w] = __frequency_response__ (args, mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
- %if (! iscell (args))
- % args = {args};
- %endif
+ isc = iscell (args);
+ if (! isc)
+ args = {args};
+ endif
+
sys_idx = cellfun (@isa, args, {"lti"}); # look for LTI models
w_idx = cellfun (@(x) is_real_vector (x) && length (x) > 1, args); # look for frequency vectors
r_idx = cellfun (@iscell, args); # look for frequency ranges {wmin, wmax}
@@ -65,4 +67,9 @@
## restore frequency vectors of FRD models in w
w(frd_idx) = w_frd;
+ if (! isc) # for old non-multiplot functions
+ H = H{1};
+ w = w{1};
+ endif
+
endfunction
Modified: trunk/octave-forge/main/control/inst/margin.m
===================================================================
--- trunk/octave-forge/main/control/inst/margin.m 2012-09-14 18:20:47 UTC (rev 11018)
+++ trunk/octave-forge/main/control/inst/margin.m 2012-09-14 18:38:01 UTC (rev 11019)
@@ -269,7 +269,7 @@
if (nargout == 0) # show bode diagram
- [H, w] = __frequency_response__ (sys, [], false, 0, "std");
+ [H, w] = __frequency_response__ (sys, false, 0, "std");
H = reshape (H, [], 1);
mag_db = 20 * log10 (abs (H));
@@ -301,14 +301,14 @@
endif
subplot (2, 1, 1)
- semilogx (w, mag_db, "b", wv, [0, 0], ":k", wgm, mgmh, ":k", wgm, mgm, "r", wpm, mpm, ":k")
+ semilogx (w, mag_db, "b", wv, [0, 0], "-.k", wgm, mgmh, "-.k", wgm, mgm, "r", wpm, mpm, "-.k")
axis (ax_vec_mag)
grid ("on")
title (title_str)
ylabel ("Magnitude [dB]")
subplot (2, 1, 2)
- semilogx (w, pha, "b", wv, [-180, -180], ":k", wgm, pgm, ":k", wpm, ppmh, ":k", wpm, ppm, "r")
+ semilogx (w, pha, "b", wv, [-180, -180], "-.k", wgm, pgm, "-.k", wpm, ppmh, "-.k", wpm, ppm, "r")
axis (ax_vec_pha)
grid ("on")
xlabel (xl_str)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 18:20:53
|
Revision: 11018
http://octave.svn.sourceforge.net/octave/?rev=11018&view=rev
Author: paramaniac
Date: 2012-09-14 18:20:47 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: finish nichols
Modified Paths:
--------------
trunk/octave-forge/main/control/inst/nichols.m
Modified: trunk/octave-forge/main/control/inst/nichols.m
===================================================================
--- trunk/octave-forge/main/control/inst/nichols.m 2012-09-14 17:08:00 UTC (rev 11017)
+++ trunk/octave-forge/main/control/inst/nichols.m 2012-09-14 18:20:47 UTC (rev 11018)
@@ -48,37 +48,56 @@
## Author: Lukas Reichlin <luk...@gm...>
## Created: November 2009
-## Version: 0.4
+## Version: 0.5
-function [mag_r, pha_r, w_r] = nichols (sys, w = [])
+function [mag_r, pha_r, w_r] = nichols (varargin)
- ## TODO: multiplot feature: nichols (sys1, "b", sys2, "r", ...)
-
- if (nargin == 0 || nargin > 2)
+ if (nargin == 0)
print_usage ();
endif
- [H, w] = __frequency_response__ (sys, w, false, 0, "ext");
+ [H, w] = __frequency_response__ (varargin, false, 0, "ext");
- H = reshape (H, [], 1);
- mag = abs (H);
- pha = unwrap (arg (H)) * 180 / pi;
+ H = cellfun (@reshape, H, {[]}, {1}, "uniformoutput", false);
+ mag = cellfun (@abs, H, "uniformoutput", false);
+ pha = cellfun (@(H) unwrap (arg (H)) * 180 / pi, H, "uniformoutput", false);
if (! nargout)
- mag_db = 20 * log10 (mag);
+ mag_db = cellfun (@(mag) 20 * log10 (mag), mag, "uniformoutput", false);
- plot (pha, mag_db)
+ tmp = cellfun (@isa, varargin, {"lti"});
+ sys_idx = find (tmp);
+ tmp = cellfun (@ischar, varargin);
+ style_idx = find (tmp);
+
+ len = numel (H);
+ plot_args = {};
+ legend_args = cell (len, 1);
+
+ for k = 1:len
+ if (k == len)
+ lim = nargin;
+ else
+ lim = sys_idx(k+1);
+ endif
+ style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
+ plot_args = cat (2, plot_args, pha(k), mag_db(k), style);
+ legend_args{k} = inputname(sys_idx(k)); # watch out for nichols (lticell{:})
+ endfor
+
+ plot (plot_args{:})
axis ("tight")
xlim (__axis_margin__ (xlim))
ylim (__axis_margin__ (ylim))
grid ("on")
- title (["Nichols Chart of ", inputname(1)])
+ title ("Nichols Chart")
xlabel ("Phase [deg]")
ylabel ("Magnitude [dB]")
+ legend (legend_args)
else
- mag_r = mag;
- pha_r = pha;
- w_r = w;
+ mag_r = mag{1};
+ pha_r = pha{1};
+ w_r = w{1};
endif
-endfunction
\ No newline at end of file
+endfunction
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 17:08:07
|
Revision: 11017
http://octave.svn.sourceforge.net/octave/?rev=11017&view=rev
Author: paramaniac
Date: 2012-09-14 17:08:00 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: finish bodemag
Modified Paths:
--------------
trunk/octave-forge/main/control/inst/bodemag.m
Modified: trunk/octave-forge/main/control/inst/bodemag.m
===================================================================
--- trunk/octave-forge/main/control/inst/bodemag.m 2012-09-14 17:01:20 UTC (rev 11016)
+++ trunk/octave-forge/main/control/inst/bodemag.m 2012-09-14 17:08:00 UTC (rev 11017)
@@ -46,40 +46,53 @@
## Author: Lukas Reichlin <luk...@gm...>
## Created: November 2009
-## Version: 0.4
+## Version: 0.5
-function [mag_r, w_r] = bodemag (sys, w = [])
+function [mag_r, w_r] = bodemag (varargin)
- ## TODO: multiplot feature: bodemag (sys1, "b", sys2, "r", ...)
-
- if (nargin == 0 || nargin > 2)
+ if (nargin == 0)
print_usage ();
endif
- [H, w] = __frequency_response__ (sys, w, false, 0, "std");
+ [H, w] = __frequency_response__ (varargin, false, 0, "std");
- H = reshape (H, [], 1);
- mag = abs (H);
+ H = cellfun (@reshape, H, {[]}, {1}, "uniformoutput", false);
+ mag = cellfun (@abs, H, "uniformoutput", false);
if (! nargout)
- mag_db = 20 * log10 (mag);
+ mag_db = cellfun (@(mag) 20 * log10 (mag), mag, "uniformoutput", false);
- if (isct (sys))
- xl_str = "Frequency [rad/s]";
- else
- xl_str = sprintf ("Frequency [rad/s] w_N = %g", pi / get (sys, "tsam"));
- endif
+ tmp = cellfun (@isa, varargin, {"lti"});
+ sys_idx = find (tmp);
+ tmp = cellfun (@ischar, varargin);
+ style_idx = find (tmp);
- semilogx (w, mag_db)
+ len = numel (H);
+ mag_args = {};
+ legend_args = cell (len, 1);
+
+ for k = 1:len
+ if (k == len)
+ lim = nargin;
+ else
+ lim = sys_idx(k+1);
+ endif
+ style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
+ mag_args = cat (2, mag_args, w(k), mag_db(k), style);
+ legend_args{k} = inputname(sys_idx(k)); # watch out for bode (lticell{:})
+ endfor
+
+ semilogx (mag_args{:})
axis ("tight")
ylim (__axis_margin__ (ylim))
grid ("on")
- title (["Bode Magnitude Diagram of ", inputname(1)])
- xlabel (xl_str)
+ title ("Bode Magnitude Diagram")
+ xlabel ("Frequency [rad/s]")
ylabel ("Magnitude [dB]")
+ legend (legend_args)
else
- mag_r = mag;
- w_r = w;
+ mag_r = mag{1};
+ w_r = w{1};
endif
-endfunction
\ No newline at end of file
+endfunction
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 17:01:30
|
Revision: 11016
http://octave.svn.sourceforge.net/octave/?rev=11016&view=rev
Author: paramaniac
Date: 2012-09-14 17:01:20 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: fix bug
Modified Paths:
--------------
trunk/octave-forge/main/control/inst/__frequency_vector__.m
trunk/octave-forge/main/control/inst/nyquist.m
Modified: trunk/octave-forge/main/control/inst/__frequency_vector__.m
===================================================================
--- trunk/octave-forge/main/control/inst/__frequency_vector__.m 2012-09-14 14:31:20 UTC (rev 11015)
+++ trunk/octave-forge/main/control/inst/__frequency_vector__.m 2012-09-14 17:01:20 UTC (rev 11016)
@@ -42,7 +42,7 @@
isc = iscell (sys_cell);
if (! isc) # __sys2frd__ methods pass LTI models not in cells
- sys_cell = {sys_cell}
+ sys_cell = {sys_cell};
endif
idx = cellfun (@(x) isa (x, "lti"), sys_cell);
@@ -53,14 +53,12 @@
if (strcmpi (wbounds, "std")) # plots with explicit frequencies
- if (nargin == 2)
- dec_min = min (cell2mat (dec_min));
- dec_max = max (cell2mat (dec_max));
- elseif (nargin == 4) # w = {wmin, wmax}
+ if (nargin == 4) # w = {wmin, wmax}
dec_min = log10 (wmin);
dec_max = log10 (wmax);
else
- print_usage ();
+ dec_min = min (cell2mat (dec_min));
+ dec_max = max (cell2mat (dec_max));
endif
zp = horzcat (zp{:});
Modified: trunk/octave-forge/main/control/inst/nyquist.m
===================================================================
--- trunk/octave-forge/main/control/inst/nyquist.m 2012-09-14 14:31:20 UTC (rev 11015)
+++ trunk/octave-forge/main/control/inst/nyquist.m 2012-09-14 17:01:20 UTC (rev 11016)
@@ -50,7 +50,7 @@
## Created: November 2009
## Version: 0.4
-function [re_r, im_r, w_r] = nyquist2 (varargin)
+function [re_r, im_r, w_r] = nyquist (varargin)
if (nargin == 0)
print_usage ();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 14:31:31
|
Revision: 11015
http://octave.svn.sourceforge.net/octave/?rev=11015&view=rev
Author: paramaniac
Date: 2012-09-14 14:31:20 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: quicksave work on further multiplot features
Modified Paths:
--------------
trunk/octave-forge/main/control/inst/__frequency_response__.m
trunk/octave-forge/main/control/inst/bode.m
trunk/octave-forge/main/control/inst/sigma.m
Added Paths:
-----------
trunk/octave-forge/main/control/devel/MDSSystem2.m
Added: trunk/octave-forge/main/control/devel/MDSSystem2.m
===================================================================
--- trunk/octave-forge/main/control/devel/MDSSystem2.m (rev 0)
+++ trunk/octave-forge/main/control/devel/MDSSystem2.m 2012-09-14 14:31:20 UTC (rev 11015)
@@ -0,0 +1,154 @@
+%% -*- texinfo -*-
+%% Robust control of a mass-damper-spring system.
+%% Type @code{which MDSSystem} to locate,
+%% @code{edit MDSSystem} to open and simply
+%% @code{MDSSystem} to run the example file.
+
+% ===============================================================================
+% Robust Control of a Mass-Damper-Spring System Lukas Reichlin August 2011
+% ===============================================================================
+% Reference: Gu, D.W., Petkov, P.Hr. and Konstantinov, M.M.
+% Robust Control Design with Matlab, Springer 2005
+% ===============================================================================
+
+% Tabula Rasa
+clear all, close all, clc
+
+% ===============================================================================
+% System Model
+% ===============================================================================
+% +---------------+
+% | d_m 0 0 |
+% +-----| 0 d_c 0 |<----+
+% u_m | | 0 0 d_k | | y_m
+% u_c | +---------------+ | y_c
+% u_k | | y_k
+% | +---------------+ |
+% +---->| |-----+
+% | G_nom |
+% u ----->| |-----> y
+% +---------------+
+
+% Nominal Values
+m_nom = 3; % mass
+c_nom = 1; % damping coefficient
+k_nom = 2; % spring stiffness
+
+% Perturbations
+p_m = 0.4; % 40% uncertainty in the mass
+p_c = 0.2; % 20% uncertainty in the damping coefficient
+p_k = 0.3; % 30% uncertainty in the spring stiffness
+
+% State-Space Representation
+A = [ 0, 1
+ -k_nom/m_nom, -c_nom/m_nom ];
+
+B1 = [ 0, 0, 0
+ -p_m, -p_c/m_nom, -p_k/m_nom ];
+
+B2 = [ 0
+ 1/m_nom ];
+
+C1 = [ -k_nom/m_nom, -c_nom/m_nom
+ 0, c_nom
+ k_nom, 0 ];
+
+C2 = [ 1, 0 ];
+
+D11 = [ -p_m, -p_c/m_nom, -p_k/m_nom
+ 0, 0, 0
+ 0, 0, 0 ];
+
+D12 = [ 1/m_nom
+ 0
+ 0 ];
+
+D21 = [ 0, 0, 0 ];
+
+D22 = [ 0 ];
+
+inname = {'u_m', 'u_c', 'u_k', 'u'}; % input names
+outname = {'y_m', 'y_c', 'y_k', 'y'}; % output names
+
+G_nom = ss (A, [B1, B2], [C1; C2], [D11, D12; D21, D22], ...
+ 'inputname', inname, 'outputname', outname);
+
+G = G_nom(4, 4); % extract output y and input u
+
+
+% ===============================================================================
+% Frequency Analysis of Uncertain System
+% ===============================================================================
+
+% Uncertainties: -1 <= delta_m, delta_c, delta_k <= 1
+[delta_m, delta_c, delta_k] = ndgrid ([-1, 0, 1], [-1, 0, 1], [-1, 0, 1]);
+
+% Bode Plots of Perturbed Plants
+w = logspace (-1, 1, 100); % frequency vector
+Delta = arrayfun (@(m, c, k) diag ([m, c, k]), delta_m(:), delta_c(:), delta_k(:), 'uniformoutput', false);
+G_per = cellfun (@lft, Delta, {G_nom}, 'uniformoutput', false);
+
+figure (1)
+bode (G_per{:}, w);
+
+
+% ===============================================================================
+% Mixed Sensitivity H-infinity Controller Design (S over KS Method)
+% ===============================================================================
+% +-------+
+% +--------------------->| W_p |----------> e_p
+% | +-------+
+% | +-------+
+% | +---->| W_u |----------> e_u
+% | | +-------+
+% | | +---------+
+% | | ->| |->
+% r + e | +-------+ u | | G_nom |
+% ----->(+)---+-->| K |----+--->| |----+----> y
+% ^ - +-------+ +---------+ |
+% | |
+% +-----------------------------------------+
+
+% Weighting Functions
+s = tf ('s'); % transfer function variable
+W_p = 0.95 * (s^2 + 1.8*s + 10) / (s^2 + 8.0*s + 0.01); % performance weighting
+W_u = 10^-2; % control weighting
+
+% Synthesis
+K_mix = mixsyn (G, W_p, W_u); % mixed-sensitivity H-infinity synthesis
+
+% Interconnections
+L_mix = G * K_mix; % open loop
+T_mix = feedback (L_mix); % closed loop
+
+
+% ===============================================================================
+% H-infinity Loop-Shaping Design (Normalized Coprime Factor Perturbations)
+% ===============================================================================
+
+% Settings
+W1 = 8 * (2*s + 1) / (0.9*s); % precompensator
+W2 = 1; % postcompensator
+factor = 1.1; % suboptimal controller
+
+% Synthesis
+K_ncf = ncfsyn (G, W1, W2, factor); % positive feedback controller
+
+% Interconnections
+K_ncf = -K_ncf; % negative feedback controller
+L_ncf = G * K_ncf; % open loop
+T_ncf = feedback (L_ncf); % closed loop
+
+% ===============================================================================
+
+% Plotting
+figure (2)
+bode (K_mix, K_ncf) % bode plot
+
+figure (3)
+step (T_mix, 10) % step response for 10 seconds
+
+figure (4)
+step (T_ncf, 10) % step response for 10 seconds
+
+% ===============================================================================
Modified: trunk/octave-forge/main/control/inst/__frequency_response__.m
===================================================================
--- trunk/octave-forge/main/control/inst/__frequency_response__.m 2012-09-14 12:02:15 UTC (rev 11014)
+++ trunk/octave-forge/main/control/inst/__frequency_response__.m 2012-09-14 14:31:20 UTC (rev 11015)
@@ -30,7 +30,7 @@
%endif
sys_idx = cellfun (@isa, args, {"lti"}); # look for LTI models
- w_idx = cellfun (@is_real_vector, args); # look for frequency vectors
+ w_idx = cellfun (@(x) is_real_vector (x) && length (x) > 1, args); # look for frequency vectors
r_idx = cellfun (@iscell, args); # look for frequency ranges {wmin, wmax}
sys_cell = args(sys_idx); # extract LTI models
@@ -50,7 +50,8 @@
error ("frequency_response: invalid cell");
endif
elseif (any (w_idx)) # are there any frequency vectors?
- w = args(w_idx)(end);
+ w = args(w_idx){end};
+ w = repmat ({w}, 1, numel (sys_cell));
else # there are neither frequency ranges nor vectors
w = __frequency_vector__ (sys_cell, wbounds);
endif
Modified: trunk/octave-forge/main/control/inst/bode.m
===================================================================
--- trunk/octave-forge/main/control/inst/bode.m 2012-09-14 12:02:15 UTC (rev 11014)
+++ trunk/octave-forge/main/control/inst/bode.m 2012-09-14 14:31:20 UTC (rev 11015)
@@ -84,7 +84,7 @@
style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
mag_args = cat (2, mag_args, w(k), mag_db(k), style);
pha_args = cat (2, pha_args, w(k), pha(k), style);
- legend_args{k} = inputname(sys_idx(k));
+ legend_args{k} = inputname(sys_idx(k)); # watch out for bode (lticell{:})
endfor
subplot (2, 1, 1)
Modified: trunk/octave-forge/main/control/inst/sigma.m
===================================================================
--- trunk/octave-forge/main/control/inst/sigma.m 2012-09-14 12:02:15 UTC (rev 11014)
+++ trunk/octave-forge/main/control/inst/sigma.m 2012-09-14 14:31:20 UTC (rev 11015)
@@ -60,44 +60,56 @@
## Author: Lukas Reichlin <luk...@gm...>
## Created: May 2009
-## Version: 0.6
+## Version: 0.7
-function [sv_r, w_r] = sigma (sys, w = [], resptype = 0)
+function [sv_r, w_r] = sigma (varargin)
- ## TODO: multiplot feature: sigma (sys1, "b", sys2, "r", ...)
-
- if (nargin == 0 || nargin > 3)
+ if (nargin == 0)
print_usage ();
endif
+resptype = 0;
+ [H, w] = __frequency_response__ (varargin, true, resptype, "std", true);
- [H, w] = __frequency_response__ (sys, w, true, resptype, "std", true);
+ sv = cellfun (@(H) cellfun (@svd, H, "uniformoutput", false), H, "uniformoutput", false);
+ sv = cellfun (@(sv) horzcat (sv{:}), sv, "uniformoutput", false);
- sv = cellfun (@svd, H, "uniformoutput", false);
- sv = horzcat (sv{:});
-
if (! nargout) # plot the information
## convert to dB for plotting
- sv_db = 20 * log10 (sv);
+ sv_db = cellfun (@(sv) 20 * log10 (sv), sv, "uniformoutput", false);
- ## determine xlabel
- if (isct (sys))
- xl_str = "Frequency [rad/s]";
- else
- xl_str = sprintf ("Frequency [rad/s] w_N = %g", pi / get (sys, "tsam"));
- endif
+ tmp = cellfun (@isa, varargin, {"lti"});
+ sys_idx = find (tmp);
+ tmp = cellfun (@ischar, varargin);
+ style_idx = find (tmp);
+ len = numel (H);
+ plot_args = {};
+ legend_args = cell (len, 1);
+
+ for k = 1:len
+ if (k == len)
+ lim = nargin;
+ else
+ lim = sys_idx(k+1);
+ endif
+ style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
+ plot_args = cat (2, plot_args, w(k), sv_db(k), style);
+ legend_args{k} = inputname(sys_idx(k)); # watch out for sigma (lticell{:})
+ endfor
+
## plot results
- semilogx (w, sv_db, "b")
+ semilogx (plot_args{:})
axis ("tight")
ylim (__axis_margin__ (ylim))
grid ("on")
- title (["Singular Values of ", inputname(1)])
- xlabel (xl_str)
+ title ("Singular Values")
+ xlabel ("Frequency [rad/s]")
ylabel ("Singular Values [dB]")
+ legend (legend_args)
else # return values
- sv_r = sv;
- w_r = reshape (w, [], 1);
+ sv_r = sv{1};
+ w_r = reshape (w{1}, [], 1);
endif
endfunction
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 12:02:21
|
Revision: 11014
http://octave.svn.sourceforge.net/octave/?rev=11014&view=rev
Author: paramaniac
Date: 2012-09-14 12:02:15 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: use new multiplot bode in example MDSSystem.m
Modified Paths:
--------------
trunk/octave-forge/main/control/inst/MDSSystem.m
Modified: trunk/octave-forge/main/control/inst/MDSSystem.m
===================================================================
--- trunk/octave-forge/main/control/inst/MDSSystem.m 2012-09-14 11:55:40 UTC (rev 11013)
+++ trunk/octave-forge/main/control/inst/MDSSystem.m 2012-09-14 12:02:15 UTC (rev 11014)
@@ -127,14 +127,7 @@
L_mix = G * K_mix; % open loop
T_mix = feedback (L_mix); % closed loop
-% Plotting
-figure (2)
-bode (K_mix) % bode plot
-figure (3)
-step (T_mix, 10) % step response for 10 seconds
-
-
% ===============================================================================
% H-infinity Loop-Shaping Design (Normalized Coprime Factor Perturbations)
% ===============================================================================
@@ -152,11 +145,16 @@
L_ncf = G * K_ncf; % open loop
T_ncf = feedback (L_ncf); % closed loop
+% ===============================================================================
+
% Plotting
-figure (4)
-bode (K_ncf) % bode plot
+figure (2)
+bode (K_mix, K_ncf) % bode plot
-figure (5)
+figure (3)
+step (T_mix, 10) % step response for 10 seconds
+
+figure (4)
step (T_ncf, 10) % step response for 10 seconds
% ===============================================================================
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 11:55:49
|
Revision: 11013
http://octave.svn.sourceforge.net/octave/?rev=11013&view=rev
Author: paramaniac
Date: 2012-09-14 11:55:40 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: fix bug, use new multiplot bode in example Madievski.m
Modified Paths:
--------------
trunk/octave-forge/main/control/inst/Madievski.m
trunk/octave-forge/main/control/inst/__frequency_response__.m
Modified: trunk/octave-forge/main/control/inst/Madievski.m
===================================================================
--- trunk/octave-forge/main/control/inst/Madievski.m 2012-09-14 11:44:35 UTC (rev 11012)
+++ trunk/octave-forge/main/control/inst/Madievski.m 2012-09-14 11:55:40 UTC (rev 11013)
@@ -86,30 +86,7 @@
w = {1e-2, 1e1};
% Bode Plot of Controller
-[mag, pha, w] = bode (K, w);
-[magr4, phar4, wr4] = bode (Kr4, w);
-[magr2, phar2, wr2] = bode (Kr2, w);
-
-mag = 20 * log10 (mag);
-magr4 = 20 * log10 (magr4);
-magr2 = 20 * log10 (magr2);
-
-figure (1)
-subplot (2, 1, 1)
-semilogx (w, mag, wr4, magr4, wr2, magr2)
-axis ('tight')
-ylim (__axis_margin__ (ylim))
-grid ('on')
-title ('Bode Diagrams of K and Kr')
-ylabel ('Magnitude [dB]')
-
-subplot (2, 1, 2)
-semilogx (w, pha, wr4, phar4, wr2, phar2)
-axis ('tight')
-ylim (__axis_margin__ (ylim))
-grid ('on')
-xlabel ('Frequency [rad/s]')
-ylabel ('Phase [deg]')
+bode (K, Kr4, Kr2, w)
legend ('K (8 states)', 'Kr (4 states)', 'Kr (2 states)', 'location', 'southwest')
% Step Response of Closed Loop
Modified: trunk/octave-forge/main/control/inst/__frequency_response__.m
===================================================================
--- trunk/octave-forge/main/control/inst/__frequency_response__.m 2012-09-14 11:44:35 UTC (rev 11012)
+++ trunk/octave-forge/main/control/inst/__frequency_response__.m 2012-09-14 11:55:40 UTC (rev 11013)
@@ -50,7 +50,7 @@
error ("frequency_response: invalid cell");
endif
elseif (any (w_idx)) # are there any frequency vectors?
- w = args(w_idx){end};
+ w = args(w_idx)(end);
else # there are neither frequency ranges nor vectors
w = __frequency_vector__ (sys_cell, wbounds);
endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 11:44:46
|
Revision: 11012
http://octave.svn.sourceforge.net/octave/?rev=11012&view=rev
Author: paramaniac
Date: 2012-09-14 11:44:35 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: cleaning up
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/multiplot.m
trunk/octave-forge/main/control/devel/multiplot2.m
Removed Paths:
-------------
trunk/octave-forge/main/control/devel/__frequency_response_2__.m
trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
trunk/octave-forge/main/control/devel/bode2.m
trunk/octave-forge/main/control/devel/nyquist2.m
Deleted: trunk/octave-forge/main/control/devel/__frequency_response_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-14 11:40:39 UTC (rev 11011)
+++ trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-14 11:44:35 UTC (rev 11012)
@@ -1,67 +0,0 @@
-## Copyright (C) 2009, 2010, 2012 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 -*-
-## Return frequency response H and frequency vector w.
-## If w is empty, it will be calculated by __frequency_vector__.
-
-## Author: Lukas Reichlin <luk...@gm...>
-## Created: November 2009
-## Version: 0.5
-
-function [H, w] = __frequency_response_2__ (args, mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
-
- %if (! iscell (args))
- % args = {args};
- %endif
-
- sys_idx = cellfun (@isa, args, {"lti"}); # look for LTI models
- w_idx = cellfun (@is_real_vector, args); # look for frequency vectors
- r_idx = cellfun (@iscell, args); # look for frequency ranges {wmin, wmax}
-
- sys_cell = args(sys_idx); # extract LTI models
- frd_idx = cellfun (@isa, sys_cell, {"frd"}); # look for FRD models
-
- ## check arguments
- if (! mimoflag && ! all (cellfun (@issiso, sys_cell)))
- error ("frequency_response: require SISO systems");
- endif
-
- ## determine frequencies
- if (any (r_idx)) # if there are frequency ranges
- r = args(r_idx){end}; # take the last one
- if (numel (r) == 2 && issample (r{1}) && issample (r{2}))
- w = __frequency_vector_2__ (sys_cell, wbounds, r{1}, r{2});
- else
- error ("frequency_response: invalid cell");
- endif
- elseif (any (w_idx)) # are there any frequency vectors?
- w = args(w_idx){end};
- else # there are neither frequency ranges nor vectors
- w = __frequency_vector_2__ (sys_cell, wbounds);
- endif
-
- w_frd = w(frd_idx); # temporarily save frequency vectors of FRD models
- w(frd_idx) = {[]}; # freqresp returns all frequencies of FRD models for w=[]
-
- ## compute frequency response H for all LTI models
- H = cellfun (@__freqresp__, sys_cell, w, {resptype}, {cellflag}, "uniformoutput", false);
-
- ## restore frequency vectors of FRD models in w
- w(frd_idx) = w_frd;
-
-endfunction
Deleted: trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-14 11:40:39 UTC (rev 11011)
+++ trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-14 11:44:35 UTC (rev 11012)
@@ -1,196 +0,0 @@
-## Copyright (C) 1996, 2000, 2004, 2005, 2006, 2007
-## Auburn University. All rights reserved.
-## Copyright (C) 2009 - 2012 Lukas F. Reichlin
-##
-## This program 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.
-##
-## This program 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 this program; see the file COPYING. If not, see
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {@var{w} =} __frequency_vector__ (@var{sys})
-## Get default range of frequencies based on cutoff frequencies of system
-## poles and zeros.
-## Frequency range is the interval
-## @iftex
-## @tex
-## $ [ 10^{w_{min}}, 10^{w_{max}} ] $
-## @end tex
-## @end iftex
-## @ifnottex
-## [10^@var{wmin}, 10^@var{wmax}]
-## @end ifnottex
-##
-## Used by @command{__frequency_response__}
-## @end deftypefn
-
-## Adapted-By: Lukas Reichlin <luk...@gm...>
-## Date: October 2009
-## Version: 0.3
-
-function w = __frequency_vector_2__ (sys_cell, wbounds = "std", wmin, wmax)
-
- isc = iscell (sys_cell);
-
- if (! isc) # __sys2frd__ methods pass LTI models not in cells
- sys_cell = {sys_cell}
- endif
-
- idx = cellfun (@(x) isa (x, "lti"), sys_cell);
- sys_cell = sys_cell(idx);
- len = numel (sys_cell);
-
- [dec_min, dec_max, zp] = cellfun (@__frequency_range__, sys_cell, {wbounds}, "uniformoutput", false);
-
- if (strcmpi (wbounds, "std")) # plots with explicit frequencies
-
- if (nargin == 2)
- dec_min = min (cell2mat (dec_min));
- dec_max = max (cell2mat (dec_max));
- elseif (nargin == 4) # w = {wmin, wmax}
- dec_min = log10 (wmin);
- dec_max = log10 (wmax);
- else
- print_usage ();
- endif
-
- zp = horzcat (zp{:});
-
- ## include zeros and poles for nice peaks in plots
- idx = find (zp > 10^dec_min & zp < 10^dec_max);
- zp = zp(idx);
-
- w = logspace (dec_min, dec_max, 500);
- w = unique ([w, zp]); # unique also sorts frequency vector
-
- w = repmat ({w}, 1, len); # return cell of frequency vectors
-
- elseif (strcmpi (wbounds, "ext")) # plots with implicit frequencies
-
- if (nargin == 4)
- dec_min = repmat ({log10 (wmin)}, 1, len);
- dec_max = repmat ({log10 (wmax)}, 1, len);
- endif
-
- idx = cellfun (@(zp, dec_min, dec_max) find (zp > 10^dec_min & zp < 10^dec_max), \
- zp, dec_min, dec_max, "uniformoutput", false);
- zp = cellfun (@(zp, idx) zp(idx), zp, idx, "uniformoutput", false);
-
- w = cellfun (@logspace, dec_min, dec_max, {500}, "uniformoutput", false);
- w = cellfun (@(w, zp) unique ([w, zp]), w, zp, "uniformoutput", false);
- ## unique also sorts frequency vector
-
- else
- error ("frequency_vector: invalid argument 'wbounds'");
- endif
-
- if (! isc) # for __sys2frd__ methods
- w = w{1};
- endif
-
-endfunction
-
-
-function [dec_min, dec_max, zp] = __frequency_range__ (sys, wbounds = "std")
-
- if (isa (sys, "frd"))
- w = get (sys, "w");
- dec_min = log10 (w(1));
- dec_max = log10 (w(end));
- zp = [];
- return;
- endif
-
- zer = zero (sys);
- pol = pole (sys);
- tsam = abs (get (sys, "tsam")); # tsam could be -1
- discrete = ! isct (sys); # static gains (tsam = -2) are assumed continuous
-
- ## make sure zer, pol are row vectors
- pol = reshape (pol, 1, []);
- zer = reshape (zer, 1, []);
-
- ## check for natural frequencies away from omega = 0
- if (discrete)
- ## The 2nd conditions prevents log(0) in the next log command
- iiz = find (abs(zer-1) > norm(zer)*eps && abs(zer) > norm(zer)*eps);
- iip = find (abs(pol-1) > norm(pol)*eps && abs(pol) > norm(pol)*eps);
-
- ## avoid dividing empty matrices, it would work but looks nasty
- if (! isempty (iiz))
- czer = log (zer(iiz))/tsam;
- else
- czer = [];
- endif
-
- if (! isempty (iip))
- cpol = log (pol(iip))/tsam;
- else
- cpol = [];
- endif
- else
- ## continuous
- iip = find (abs(pol) > norm(pol)*eps);
- iiz = find (abs(zer) > norm(zer)*eps);
-
- if (! isempty (zer))
- czer = zer(iiz);
- else
- czer = [];
- endif
- if (! isempty (pol))
- cpol = pol(iip);
- else
- cpol = [];
- endif
- endif
-
- if (isempty (iip) && isempty (iiz))
- ## no poles/zeros away from omega = 0; pick defaults
- dec_min = 0; # -1
- dec_max = 2; # 3
- else
- dec_min = floor (log10 (min (abs ([cpol, czer]))));
- dec_max = ceil (log10 (max (abs ([cpol, czer]))));
- endif
-
- ## expand to show the entirety of the "interesting" portion of the plot
- switch (wbounds)
- case "std" # standard
- if (dec_min == dec_max)
- dec_min -= 2;
- dec_max += 2;
- else
- dec_min--;
- dec_max++;
- endif
- case "ext" # extended (for nyquist)
- if (any (abs (pol) < sqrt (eps))) # look for integrators
- ## dec_min -= 0.5;
- dec_max += 2;
- else
- dec_min -= 2;
- dec_max += 2;
- endif
- otherwise
- error ("frequency_range: second argument invalid");
- endswitch
-
- ## run discrete frequency all the way to pi
- if (discrete)
- dec_max = log10 (pi/tsam);
- endif
-
- ## include zeros and poles for nice peaks in plots
- zp = [abs(zer), abs(pol)];
-
-endfunction
Deleted: trunk/octave-forge/main/control/devel/bode2.m
===================================================================
--- trunk/octave-forge/main/control/devel/bode2.m 2012-09-14 11:40:39 UTC (rev 11011)
+++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-14 11:44:35 UTC (rev 11012)
@@ -1,112 +0,0 @@
-## Copyright (C) 2009, 2010, 2011, 2012 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{mag}, @var{pha}, @var{w}] =} bode (@var{sys})
-## @deftypefnx {Function File} {[@var{mag}, @var{pha}, @var{w}] =} bode (@var{sys}, @var{w})
-## Bode diagram of frequency response. If no output arguments are given,
-## the response is printed on the screen.
-##
-## @strong{Inputs}
-## @table @var
-## @item sys
-## LTI system. Must be a single-input and single-output (SISO) system.
-## @item w
-## Optional vector of frequency values. If @var{w} is not specified,
-## it is calculated by the zeros and poles of the system.
-## Alternatively, the cell @code{@{wmin, wmax@}} specifies a frequency range,
-## where @var{wmin} and @var{wmax} denote minimum and maximum frequencies
-## in rad/s.
-## @end table
-##
-## @strong{Outputs}
-## @table @var
-## @item mag
-## Vector of magnitude. Has length of frequency vector @var{w}.
-## @item pha
-## Vector of phase. Has length of frequency vector @var{w}.
-## @item w
-## Vector of frequency values used.
-## @end table
-##
-## @seealso{nichols, nyquist, sigma}
-## @end deftypefn
-
-## Author: Lukas Reichlin <luk...@gm...>
-## Created: November 2009
-## Version: 0.5
-
-function [mag_r, pha_r, w_r] = bode2 (varargin)
-
- if (nargin == 0)
- print_usage ();
- endif
-
- [H, w] = __frequency_response_2__ (varargin, false, 0, "std", false);
-
- H = cellfun (@reshape, H, {[]}, {1}, "uniformoutput", false);
- mag = cellfun (@abs, H, "uniformoutput", false);
- pha = cellfun (@(H) unwrap (arg (H)) * 180 / pi, H, "uniformoutput", false);
-
- if (! nargout)
- mag_db = cellfun (@(mag) 20 * log10 (mag), mag, "uniformoutput", false);
-
- tmp = cellfun (@isa, varargin, {"lti"});
- sys_idx = find (tmp);
- tmp = cellfun (@ischar, varargin);
- style_idx = find (tmp);
-
- len = numel (H);
- mag_args = {};
- pha_args = {};
- legend_args = cell (len, 1);
-
- for k = 1:len
- if (k == len)
- lim = nargin;
- else
- lim = sys_idx(k+1);
- endif
- style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
- mag_args = cat (2, mag_args, w(k), mag_db(k), style);
- pha_args = cat (2, pha_args, w(k), pha(k), style);
- legend_args{k} = inputname(sys_idx(k));
- endfor
-
- subplot (2, 1, 1)
- semilogx (mag_args{:})
- axis ("tight")
- ylim (__axis_margin__ (ylim))
- grid ("on")
- title ("Bode Diagram")
- ylabel ("Magnitude [dB]")
-
- subplot (2, 1, 2)
- semilogx (pha_args{:})
- axis ("tight")
- ylim (__axis_margin__ (ylim))
- grid ("on")
- xlabel ("Frequency [rad/s]")
- ylabel ("Phase [deg]")
- legend (legend_args)
- else
- mag_r = mag{1};
- pha_r = pha{1};
- w_r = w{1};
- endif
-
-endfunction
Modified: trunk/octave-forge/main/control/devel/multiplot.m
===================================================================
--- trunk/octave-forge/main/control/devel/multiplot.m 2012-09-14 11:40:39 UTC (rev 11011)
+++ trunk/octave-forge/main/control/devel/multiplot.m 2012-09-14 11:44:35 UTC (rev 11012)
@@ -1,21 +1,21 @@
load tfs.dat
figure (1)
-bode2 (C_AH, C_opt)
+bode (C_AH, C_opt)
figure (2)
-bode2 (5*C_AH, frd (C_AH), frd (C_opt))
+bode (5*C_AH, frd (C_AH), frd (C_opt))
% bode2 (5*C_AH, frd (C_AH, 1:10), frd (C_opt, 11:20))
figure (3)
-bode2 (5*C_AH, '*r', C_AH, 'xb', C_opt, 'ok')
+bode (5*C_AH, '*r', C_AH, 'xb', C_opt, 'ok')
figure (4)
-nyquist2 (C_AH, C_opt)
+nyquist (C_AH, C_opt)
figure (5)
-nyquist2 (C_AH, "xr", C_opt, "ob")
+nyquist (C_AH, "xr", C_opt, "ob")
legend ("Test C_AH", "Test C_opt")
\ No newline at end of file
Modified: trunk/octave-forge/main/control/devel/multiplot2.m
===================================================================
--- trunk/octave-forge/main/control/devel/multiplot2.m 2012-09-14 11:40:39 UTC (rev 11011)
+++ trunk/octave-forge/main/control/devel/multiplot2.m 2012-09-14 11:44:35 UTC (rev 11012)
@@ -90,8 +90,8 @@
% Bode Plot of Controller
figure (1)
-bode2 (K, Kr4, Kr2, w)
-title ('Bode Diagrams of K and Kr')
+bode (K, Kr4, Kr2, w)
+% title ('Bode Diagrams of K and Kr')
legend ('K (8 states)', 'Kr (4 states)', 'Kr (2 states)', 'location', 'southwest')
%{
Deleted: trunk/octave-forge/main/control/devel/nyquist2.m
===================================================================
--- trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 11:40:39 UTC (rev 11011)
+++ trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 11:44:35 UTC (rev 11012)
@@ -1,115 +0,0 @@
-## Copyright (C) 2009, 2010, 2012 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{re}, @var{im}, @var{w}] =} nyquist (@var{sys})
-## @deftypefnx {Function File} {[@var{re}, @var{im}, @var{w}] =} nyquist (@var{sys}, @var{w})
-## Nyquist diagram of frequency response. If no output arguments are given,
-## the response is printed on the screen.
-##
-## @strong{Inputs}
-## @table @var
-## @item sys
-## LTI system. Must be a single-input and single-output (SISO) system.
-## @item w
-## Optional vector of frequency values. If @var{w} is not specified,
-## it is calculated by the zeros and poles of the system.
-## Alternatively, the cell @code{@{wmin, wmax@}} specifies a frequency range,
-## where @var{wmin} and @var{wmax} denote minimum and maximum frequencies
-## in rad/s.
-## @end table
-##
-## @strong{Outputs}
-## @table @var
-## @item re
-## Vector of real parts. Has length of frequency vector @var{w}.
-## @item im
-## Vector of imaginary parts. Has length of frequency vector @var{w}.
-## @item w
-## Vector of frequency values used.
-## @end table
-##
-## @seealso{bode, nichols, sigma}
-## @end deftypefn
-
-## Author: Lukas Reichlin <luk...@gm...>
-## Created: November 2009
-## Version: 0.4
-
-function [re_r, im_r, w_r] = nyquist2 (varargin)
-
- if (nargin == 0)
- print_usage ();
- endif
-
- [H, w] = __frequency_response_2__ (varargin, false, 0, "ext");
-
- H = cellfun (@reshape, H, {[]}, {1}, "uniformoutput", false);
- re = cellfun (@real, H, "uniformoutput", false);
- im = cellfun (@imag, H, "uniformoutput", false);
-
- if (! nargout)
- tmp = cellfun (@isa, varargin, {"lti"});
- sys_idx = find (tmp);
- tmp = cellfun (@ischar, varargin);
- style_idx = find (tmp);
-
- len = numel (H);
- pos_args = {};
- neg_args = {};
- legend_args = cell (len, 1);
- colororder = get (gca, "colororder");
- rc = rows (colororder);
-
- for k = 1:len
- col = colororder(1+rem (k-1, rc), :);
- if (k == len)
- lim = nargin;
- else
- lim = sys_idx(k+1);
- endif
- style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
- if (isempty (style))
- pos_args = cat (2, pos_args, re{k}, im{k}, {"-", "color", col});
- neg_args = cat (2, neg_args, re{k}, -im{k}, {"-.", "color", col});
- else
- pos_args = cat (2, pos_args, re{k}, im{k}, style);
- neg_args = cat (2, neg_args, re{k}, -im{k}, style);
- endif
- legend_args{k} = inputname(sys_idx(k));
- endfor
-
- ## FIXME: pos_args = cat (2, pos_args, re{k}, im{k}, {"-", "color", col}, style);
- ## doesn't work! it would be nice to have default arguments that can be
- ## (partially) overwritten by user-specified plot styles.
-
- h = plot (pos_args{:}, neg_args{:});
- axis ("tight")
- xlim (__axis_margin__ (xlim))
- ylim (__axis_margin__ (ylim))
- grid ("on")
- title ("Nyquist Diagram")
- xlabel ("Real Axis")
- ylabel ("Imaginary Axis")
- legend (h(1:len), legend_args)
- else
- re_r = re{1};
- im_r = im{1};
- w_r = w{1};
- endif
-
-endfunction
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 11:40:49
|
Revision: 11011
http://octave.svn.sourceforge.net/octave/?rev=11011&view=rev
Author: paramaniac
Date: 2012-09-14 11:40:39 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: move multiplot functions into place
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/bode2.m
trunk/octave-forge/main/control/inst/__frequency_response__.m
trunk/octave-forge/main/control/inst/__frequency_vector__.m
trunk/octave-forge/main/control/inst/bode.m
trunk/octave-forge/main/control/inst/nyquist.m
Modified: trunk/octave-forge/main/control/devel/bode2.m
===================================================================
--- trunk/octave-forge/main/control/devel/bode2.m 2012-09-14 11:33:41 UTC (rev 11010)
+++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-14 11:40:39 UTC (rev 11011)
@@ -109,4 +109,4 @@
w_r = w{1};
endif
-endfunction
\ No newline at end of file
+endfunction
Modified: trunk/octave-forge/main/control/inst/__frequency_response__.m
===================================================================
--- trunk/octave-forge/main/control/inst/__frequency_response__.m 2012-09-14 11:33:41 UTC (rev 11010)
+++ trunk/octave-forge/main/control/inst/__frequency_response__.m 2012-09-14 11:40:39 UTC (rev 11011)
@@ -21,35 +21,47 @@
## Author: Lukas Reichlin <luk...@gm...>
## Created: November 2009
-## Version: 0.4
+## Version: 0.5
-function [H, w] = __frequency_response__ (sys, w = [], mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
+function [H, w] = __frequency_response__ (args, mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
+ %if (! iscell (args))
+ % args = {args};
+ %endif
+
+ sys_idx = cellfun (@isa, args, {"lti"}); # look for LTI models
+ w_idx = cellfun (@is_real_vector, args); # look for frequency vectors
+ r_idx = cellfun (@iscell, args); # look for frequency ranges {wmin, wmax}
+
+ sys_cell = args(sys_idx); # extract LTI models
+ frd_idx = cellfun (@isa, sys_cell, {"frd"}); # look for FRD models
+
## check arguments
- if(! isa (sys, "lti"))
- error ("frequency_response: first argument sys must be an LTI system");
+ if (! mimoflag && ! all (cellfun (@issiso, sys_cell)))
+ error ("frequency_response: require SISO systems");
endif
- if (! mimoflag && ! issiso (sys))
- error ("frequency_response: require SISO system");
- endif
-
- if (isa (sys, "frd"))
- if (! isempty (w))
- warning ("frequency_response: second argument w is ignored");
+ ## determine frequencies
+ if (any (r_idx)) # if there are frequency ranges
+ r = args(r_idx){end}; # take the last one
+ if (numel (r) == 2 && issample (r{1}) && issample (r{2}))
+ w = __frequency_vector__ (sys_cell, wbounds, r{1}, r{2});
+ else
+ error ("frequency_response: invalid cell");
endif
- w = get (sys, "w");
- H = __freqresp__ (sys, [], resptype, cellflag);
- elseif (isempty (w)) # find interesting frequency range w if not specified
- w = __frequency_vector__ (sys, wbounds);
- H = __freqresp__ (sys, w, resptype, cellflag);
- elseif (iscell (w) && numel (w) == 2 && issample (w{1}) && issample (w{2}))
- w = __frequency_vector__ (sys, wbounds, w{1}, w{2});
- H = __freqresp__ (sys, w, resptype, cellflag);
- elseif (! is_real_vector (w))
- error ("frequency_response: second argument w must be a vector of frequencies");
- else
- H = __freqresp__ (sys, w, resptype, cellflag);
+ elseif (any (w_idx)) # are there any frequency vectors?
+ w = args(w_idx){end};
+ else # there are neither frequency ranges nor vectors
+ w = __frequency_vector__ (sys_cell, wbounds);
endif
+ w_frd = w(frd_idx); # temporarily save frequency vectors of FRD models
+ w(frd_idx) = {[]}; # freqresp returns all frequencies of FRD models for w=[]
+
+ ## compute frequency response H for all LTI models
+ H = cellfun (@__freqresp__, sys_cell, w, {resptype}, {cellflag}, "uniformoutput", false);
+
+ ## restore frequency vectors of FRD models in w
+ w(frd_idx) = w_frd;
+
endfunction
Modified: trunk/octave-forge/main/control/inst/__frequency_vector__.m
===================================================================
--- trunk/octave-forge/main/control/inst/__frequency_vector__.m 2012-09-14 11:33:41 UTC (rev 11010)
+++ trunk/octave-forge/main/control/inst/__frequency_vector__.m 2012-09-14 11:40:39 UTC (rev 11011)
@@ -1,7 +1,7 @@
## Copyright (C) 1996, 2000, 2004, 2005, 2006, 2007
## Auburn University. All rights reserved.
+## Copyright (C) 2009 - 2012 Lukas F. Reichlin
##
-##
## This program 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
@@ -35,14 +35,85 @@
## Adapted-By: Lukas Reichlin <luk...@gm...>
## Date: October 2009
-## Version: 0.3
+## Version: 0.4
-function w = __frequency_vector__ (sys, wbounds = "std", wmin, wmax)
+function w = __frequency_vector__ (sys_cell, wbounds = "std", wmin, wmax)
+ isc = iscell (sys_cell);
+
+ if (! isc) # __sys2frd__ methods pass LTI models not in cells
+ sys_cell = {sys_cell}
+ endif
+
+ idx = cellfun (@(x) isa (x, "lti"), sys_cell);
+ sys_cell = sys_cell(idx);
+ len = numel (sys_cell);
+
+ [dec_min, dec_max, zp] = cellfun (@__frequency_range__, sys_cell, {wbounds}, "uniformoutput", false);
+
+ if (strcmpi (wbounds, "std")) # plots with explicit frequencies
+
+ if (nargin == 2)
+ dec_min = min (cell2mat (dec_min));
+ dec_max = max (cell2mat (dec_max));
+ elseif (nargin == 4) # w = {wmin, wmax}
+ dec_min = log10 (wmin);
+ dec_max = log10 (wmax);
+ else
+ print_usage ();
+ endif
+
+ zp = horzcat (zp{:});
+
+ ## include zeros and poles for nice peaks in plots
+ idx = find (zp > 10^dec_min & zp < 10^dec_max);
+ zp = zp(idx);
+
+ w = logspace (dec_min, dec_max, 500);
+ w = unique ([w, zp]); # unique also sorts frequency vector
+
+ w = repmat ({w}, 1, len); # return cell of frequency vectors
+
+ elseif (strcmpi (wbounds, "ext")) # plots with implicit frequencies
+
+ if (nargin == 4)
+ dec_min = repmat ({log10 (wmin)}, 1, len);
+ dec_max = repmat ({log10 (wmax)}, 1, len);
+ endif
+
+ idx = cellfun (@(zp, dec_min, dec_max) find (zp > 10^dec_min & zp < 10^dec_max), \
+ zp, dec_min, dec_max, "uniformoutput", false);
+ zp = cellfun (@(zp, idx) zp(idx), zp, idx, "uniformoutput", false);
+
+ w = cellfun (@logspace, dec_min, dec_max, {500}, "uniformoutput", false);
+ w = cellfun (@(w, zp) unique ([w, zp]), w, zp, "uniformoutput", false);
+ ## unique also sorts frequency vector
+
+ else
+ error ("frequency_vector: invalid argument 'wbounds'");
+ endif
+
+ if (! isc) # for __sys2frd__ methods
+ w = w{1};
+ endif
+
+endfunction
+
+
+function [dec_min, dec_max, zp] = __frequency_range__ (sys, wbounds = "std")
+
+ if (isa (sys, "frd"))
+ w = get (sys, "w");
+ dec_min = log10 (w(1));
+ dec_max = log10 (w(end));
+ zp = [];
+ return;
+ endif
+
zer = zero (sys);
pol = pole (sys);
- tsam = abs (get (sys, "tsam")); # tsam could be -1
- discrete = ! isct (sys); # static gains (tsam = -2) are assumed continuous
+ tsam = abs (get (sys, "tsam")); # tsam could be -1
+ discrete = ! isct (sys); # static gains (tsam = -2) are assumed continuous
## make sure zer, pol are row vectors
pol = reshape (pol, 1, []);
@@ -85,8 +156,8 @@
if (isempty (iip) && isempty (iiz))
## no poles/zeros away from omega = 0; pick defaults
- dec_min = 0; # -1
- dec_max = 2; # 3
+ dec_min = 0; # -1
+ dec_max = 2; # 3
else
dec_min = floor (log10 (min (abs ([cpol, czer]))));
dec_max = ceil (log10 (max (abs ([cpol, czer]))));
@@ -94,7 +165,7 @@
## expand to show the entirety of the "interesting" portion of the plot
switch (wbounds)
- case "std" # standard
+ case "std" # standard
if (dec_min == dec_max)
dec_min -= 2;
dec_max += 2;
@@ -102,8 +173,8 @@
dec_min--;
dec_max++;
endif
- case "ext" # extended (for nyquist)
- if (any (abs (pol) < sqrt (eps))) # look for integrators
+ case "ext" # extended (for nyquist)
+ if (any (abs (pol) < sqrt (eps))) # look for integrators
## dec_min -= 0.5;
dec_max += 2;
else
@@ -119,17 +190,7 @@
dec_max = log10 (pi/tsam);
endif
- if (nargin == 4) # w = {wmin, wmax}
- dec_min = log10 (wmin);
- dec_max = log10 (wmax);
- endif
-
- ## create frequency vector
+ ## include zeros and poles for nice peaks in plots
zp = [abs(zer), abs(pol)];
- idx = find (zp > 10^dec_min & zp < 10^dec_max);
- zp = zp(idx);
- w = logspace (dec_min, dec_max, 500);
- w = unique ([w, zp]); # unique also sorts frequency vector
-
endfunction
Modified: trunk/octave-forge/main/control/inst/bode.m
===================================================================
--- trunk/octave-forge/main/control/inst/bode.m 2012-09-14 11:33:41 UTC (rev 11010)
+++ trunk/octave-forge/main/control/inst/bode.m 2012-09-14 11:40:39 UTC (rev 11011)
@@ -48,50 +48,65 @@
## Author: Lukas Reichlin <luk...@gm...>
## Created: November 2009
-## Version: 0.4
+## Version: 0.5
-function [mag_r, pha_r, w_r] = bode (sys, w = [])
+function [mag_r, pha_r, w_r] = bode (varargin)
- ## TODO: multiplot feature: bode (sys1, "b", sys2, "r", ...)
-
- if (nargin == 0 || nargin > 2)
+ if (nargin == 0)
print_usage ();
endif
- [H, w] = __frequency_response__ (sys, w, false, 0, "std");
+ [H, w] = __frequency_response__ (varargin, false, 0, "std", false);
+
+ H = cellfun (@reshape, H, {[]}, {1}, "uniformoutput", false);
+ mag = cellfun (@abs, H, "uniformoutput", false);
+ pha = cellfun (@(H) unwrap (arg (H)) * 180 / pi, H, "uniformoutput", false);
- H = reshape (H, [], 1);
- mag = abs (H);
- pha = unwrap (arg (H)) * 180 / pi;
-
if (! nargout)
- mag_db = 20 * log10 (mag);
+ mag_db = cellfun (@(mag) 20 * log10 (mag), mag, "uniformoutput", false);
- if (isct (sys))
- xl_str = "Frequency [rad/s]";
- else
- xl_str = sprintf ("Frequency [rad/s] w_N = %g", pi / get (sys, "tsam"));
- endif
+ tmp = cellfun (@isa, varargin, {"lti"});
+ sys_idx = find (tmp);
+ tmp = cellfun (@ischar, varargin);
+ style_idx = find (tmp);
+ len = numel (H);
+ mag_args = {};
+ pha_args = {};
+ legend_args = cell (len, 1);
+
+ for k = 1:len
+ if (k == len)
+ lim = nargin;
+ else
+ lim = sys_idx(k+1);
+ endif
+ style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
+ mag_args = cat (2, mag_args, w(k), mag_db(k), style);
+ pha_args = cat (2, pha_args, w(k), pha(k), style);
+ legend_args{k} = inputname(sys_idx(k));
+ endfor
+
subplot (2, 1, 1)
- semilogx (w, mag_db)
+ semilogx (mag_args{:})
axis ("tight")
ylim (__axis_margin__ (ylim))
grid ("on")
- title (["Bode Diagram of ", inputname(1)])
+ title ("Bode Diagram")
ylabel ("Magnitude [dB]")
subplot (2, 1, 2)
- semilogx (w, pha)
+ semilogx (pha_args{:})
axis ("tight")
ylim (__axis_margin__ (ylim))
grid ("on")
- xlabel (xl_str)
+ xlabel ("Frequency [rad/s]")
ylabel ("Phase [deg]")
+ legend (legend_args)
else
- mag_r = mag;
- pha_r = pha;
- w_r = w;
+ mag_r = mag{1};
+ pha_r = pha{1};
+ w_r = w{1};
endif
-endfunction
\ No newline at end of file
+endfunction
Modified: trunk/octave-forge/main/control/inst/nyquist.m
===================================================================
--- trunk/octave-forge/main/control/inst/nyquist.m 2012-09-14 11:33:41 UTC (rev 11010)
+++ trunk/octave-forge/main/control/inst/nyquist.m 2012-09-14 11:40:39 UTC (rev 11011)
@@ -48,35 +48,68 @@
## Author: Lukas Reichlin <luk...@gm...>
## Created: November 2009
-## Version: 0.3
+## Version: 0.4
-function [re_r, im_r, w_r] = nyquist (sys, w = [])
+function [re_r, im_r, w_r] = nyquist2 (varargin)
- ## TODO: multiplot feature: nyquist (sys1, "b", sys2, "r", ...)
-
- if (nargin == 0 || nargin > 2)
+ if (nargin == 0)
print_usage ();
endif
- [H, w] = __frequency_response__ (sys, w, false, 0, "ext");
+ [H, w] = __frequency_response__ (varargin, false, 0, "ext");
- H = reshape (H, [], 1);
- re = real (H);
- im = imag (H);
+ H = cellfun (@reshape, H, {[]}, {1}, "uniformoutput", false);
+ re = cellfun (@real, H, "uniformoutput", false);
+ im = cellfun (@imag, H, "uniformoutput", false);
if (! nargout)
- plot (re, im, "b", re, -im, "r")
+ tmp = cellfun (@isa, varargin, {"lti"});
+ sys_idx = find (tmp);
+ tmp = cellfun (@ischar, varargin);
+ style_idx = find (tmp);
+
+ len = numel (H);
+ pos_args = {};
+ neg_args = {};
+ legend_args = cell (len, 1);
+ colororder = get (gca, "colororder");
+ rc = rows (colororder);
+
+ for k = 1:len
+ col = colororder(1+rem (k-1, rc), :);
+ if (k == len)
+ lim = nargin;
+ else
+ lim = sys_idx(k+1);
+ endif
+ style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
+ if (isempty (style))
+ pos_args = cat (2, pos_args, re{k}, im{k}, {"-", "color", col});
+ neg_args = cat (2, neg_args, re{k}, -im{k}, {"-.", "color", col});
+ else
+ pos_args = cat (2, pos_args, re{k}, im{k}, style);
+ neg_args = cat (2, neg_args, re{k}, -im{k}, style);
+ endif
+ legend_args{k} = inputname(sys_idx(k));
+ endfor
+
+ ## FIXME: pos_args = cat (2, pos_args, re{k}, im{k}, {"-", "color", col}, style);
+ ## doesn't work! it would be nice to have default arguments that can be
+ ## (partially) overwritten by user-specified plot styles.
+
+ h = plot (pos_args{:}, neg_args{:});
axis ("tight")
xlim (__axis_margin__ (xlim))
ylim (__axis_margin__ (ylim))
grid ("on")
- title (["Nyquist Diagram of ", inputname(1)])
+ title ("Nyquist Diagram")
xlabel ("Real Axis")
ylabel ("Imaginary Axis")
+ legend (h(1:len), legend_args)
else
- re_r = re;
- im_r = im;
- w_r = w;
+ re_r = re{1};
+ im_r = im{1};
+ w_r = w{1};
endif
-endfunction
\ No newline at end of file
+endfunction
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 11:33:50
|
Revision: 11010
http://octave.svn.sourceforge.net/octave/?rev=11010&view=rev
Author: paramaniac
Date: 2012-09-14 11:33:41 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: finish multiplot bode
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/bode2.m
trunk/octave-forge/main/control/devel/nyquist2.m
Modified: trunk/octave-forge/main/control/devel/bode2.m
===================================================================
--- trunk/octave-forge/main/control/devel/bode2.m 2012-09-14 10:07:29 UTC (rev 11009)
+++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-14 11:33:41 UTC (rev 11010)
@@ -65,16 +65,27 @@
if (! nargout)
mag_db = cellfun (@(mag) 20 * log10 (mag), mag, "uniformoutput", false);
- style = repmat ({""}, 1, numel (H));
-
+ tmp = cellfun (@isa, varargin, {"lti"});
+ sys_idx = find (tmp);
tmp = cellfun (@ischar, varargin);
- char_idx = find (tmp);
- char_idx = char_idx(1:min (numel (H), end));
+ style_idx = find (tmp);
- style(1:length (char_idx)) = varargin(char_idx);
+ len = numel (H);
+ mag_args = {};
+ pha_args = {};
+ legend_args = cell (len, 1);
- mag_args = vertcat (w, mag_db, style)(:);
- pha_args = vertcat (w, pha, style)(:);
+ for k = 1:len
+ if (k == len)
+ lim = nargin;
+ else
+ lim = sys_idx(k+1);
+ endif
+ style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
+ mag_args = cat (2, mag_args, w(k), mag_db(k), style);
+ pha_args = cat (2, pha_args, w(k), pha(k), style);
+ legend_args{k} = inputname(sys_idx(k));
+ endfor
subplot (2, 1, 1)
semilogx (mag_args{:})
@@ -91,6 +102,7 @@
grid ("on")
xlabel ("Frequency [rad/s]")
ylabel ("Phase [deg]")
+ legend (legend_args)
else
mag_r = mag{1};
pha_r = pha{1};
Modified: trunk/octave-forge/main/control/devel/nyquist2.m
===================================================================
--- trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 10:07:29 UTC (rev 11009)
+++ trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 11:33:41 UTC (rev 11010)
@@ -69,8 +69,8 @@
style_idx = find (tmp);
len = numel (H);
- plot_args_pos = {};
- plot_args_neg = {};
+ pos_args = {};
+ neg_args = {};
legend_args = cell (len, 1);
colororder = get (gca, "colororder");
rc = rows (colororder);
@@ -84,16 +84,20 @@
endif
style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
if (isempty (style))
- plot_args_pos = cat (2, plot_args_pos, re{k}, im{k}, {"-", "color", col});
- plot_args_neg = cat (2, plot_args_neg, re{k}, -im{k}, {"-.", "color", col});
+ pos_args = cat (2, pos_args, re{k}, im{k}, {"-", "color", col});
+ neg_args = cat (2, neg_args, re{k}, -im{k}, {"-.", "color", col});
else
- plot_args_pos = cat (2, plot_args_pos, re{k}, im{k}, style);
- plot_args_neg = cat (2, plot_args_neg, re{k}, -im{k}, style);
+ pos_args = cat (2, pos_args, re{k}, im{k}, style);
+ neg_args = cat (2, neg_args, re{k}, -im{k}, style);
endif
legend_args{k} = inputname(sys_idx(k));
endfor
+
+ ## FIXME: pos_args = cat (2, pos_args, re{k}, im{k}, {"-", "color", col}, style);
+ ## doesn't work! it would be nice to have default arguments that can be
+ ## (partially) overwritten by user-specified plot styles.
- h = plot (plot_args_pos{:}, plot_args_neg{:});
+ h = plot (pos_args{:}, neg_args{:});
axis ("tight")
xlim (__axis_margin__ (xlim))
ylim (__axis_margin__ (ylim))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 10:07:40
|
Revision: 11009
http://octave.svn.sourceforge.net/octave/?rev=11009&view=rev
Author: paramaniac
Date: 2012-09-14 10:07:29 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: finish multiplot nyquist
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/multiplot.m
trunk/octave-forge/main/control/devel/nyquist2.m
Modified: trunk/octave-forge/main/control/devel/multiplot.m
===================================================================
--- trunk/octave-forge/main/control/devel/multiplot.m 2012-09-14 09:45:19 UTC (rev 11008)
+++ trunk/octave-forge/main/control/devel/multiplot.m 2012-09-14 10:07:29 UTC (rev 11009)
@@ -17,4 +17,5 @@
figure (5)
-nyquist2 (C_AH, "r-", C_opt, "b:")
+nyquist2 (C_AH, "xr", C_opt, "ob")
+legend ("Test C_AH", "Test C_opt")
\ No newline at end of file
Modified: trunk/octave-forge/main/control/devel/nyquist2.m
===================================================================
--- trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 09:45:19 UTC (rev 11008)
+++ trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 10:07:29 UTC (rev 11009)
@@ -64,9 +64,9 @@
if (! nargout)
tmp = cellfun (@isa, varargin, {"lti"});
- sys_idx = find (tmp)
+ sys_idx = find (tmp);
tmp = cellfun (@ischar, varargin);
- style_idx = find (tmp)
+ style_idx = find (tmp);
len = numel (H);
plot_args_pos = {};
@@ -82,12 +82,17 @@
else
lim = sys_idx(k+1);
endif
- style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim))
- plot_args_pos = cat (2, plot_args_pos, re{k}, im{k}, {"-", "color", col}, style);
- plot_args_neg = cat (2, plot_args_neg, re{k}, -im{k}, {"-.", "color", col}, style);
+ style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim));
+ if (isempty (style))
+ plot_args_pos = cat (2, plot_args_pos, re{k}, im{k}, {"-", "color", col});
+ plot_args_neg = cat (2, plot_args_neg, re{k}, -im{k}, {"-.", "color", col});
+ else
+ plot_args_pos = cat (2, plot_args_pos, re{k}, im{k}, style);
+ plot_args_neg = cat (2, plot_args_neg, re{k}, -im{k}, style);
+ endif
legend_args{k} = inputname(sys_idx(k));
endfor
-%plot_args_pos
+
h = plot (plot_args_pos{:}, plot_args_neg{:});
axis ("tight")
xlim (__axis_margin__ (xlim))
@@ -97,7 +102,6 @@
xlabel ("Real Axis")
ylabel ("Imaginary Axis")
legend (h(1:len), legend_args)
- % legend (h(1:2:2*len), legend_args)
else
re_r = re{1};
im_r = im{1};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 09:45:26
|
Revision: 11008
http://octave.svn.sourceforge.net/octave/?rev=11008&view=rev
Author: paramaniac
Date: 2012-09-14 09:45:19 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: quicksave multiplot nyquist (2)
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/multiplot.m
trunk/octave-forge/main/control/devel/nyquist2.m
Modified: trunk/octave-forge/main/control/devel/multiplot.m
===================================================================
--- trunk/octave-forge/main/control/devel/multiplot.m 2012-09-14 08:57:52 UTC (rev 11007)
+++ trunk/octave-forge/main/control/devel/multiplot.m 2012-09-14 09:45:19 UTC (rev 11008)
@@ -13,4 +13,8 @@
figure (4)
-nyquist2 (C_AH, C_opt)
\ No newline at end of file
+nyquist2 (C_AH, C_opt)
+
+
+figure (5)
+nyquist2 (C_AH, "r-", C_opt, "b:")
Modified: trunk/octave-forge/main/control/devel/nyquist2.m
===================================================================
--- trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 08:57:52 UTC (rev 11007)
+++ trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 09:45:19 UTC (rev 11008)
@@ -64,9 +64,9 @@
if (! nargout)
tmp = cellfun (@isa, varargin, {"lti"});
- sys_idx = find (tmp);
+ sys_idx = find (tmp)
tmp = cellfun (@ischar, varargin);
- style_idx = find (tmp);
+ style_idx = find (tmp)
len = numel (H);
plot_args_pos = {};
@@ -77,11 +77,17 @@
for k = 1:len
col = colororder(1+rem (k-1, rc), :);
- plot_args_pos = cat (2, plot_args_pos, re{k}, im{k}, {"-", "color", col});
- plot_args_neg = cat (2, plot_args_neg, re{k}, -im{k}, {"-.", "color", col});
+ if (k == len)
+ lim = nargin;
+ else
+ lim = sys_idx(k+1);
+ endif
+ style = varargin(style_idx(style_idx > sys_idx(k) & style_idx <= lim))
+ plot_args_pos = cat (2, plot_args_pos, re{k}, im{k}, {"-", "color", col}, style);
+ plot_args_neg = cat (2, plot_args_neg, re{k}, -im{k}, {"-.", "color", col}, style);
legend_args{k} = inputname(sys_idx(k));
endfor
-
+%plot_args_pos
h = plot (plot_args_pos{:}, plot_args_neg{:});
axis ("tight")
xlim (__axis_margin__ (xlim))
@@ -98,4 +104,4 @@
w_r = w{1};
endif
-endfunction
\ No newline at end of file
+endfunction
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 08:58:03
|
Revision: 11007
http://octave.svn.sourceforge.net/octave/?rev=11007&view=rev
Author: paramaniac
Date: 2012-09-14 08:57:52 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: quicksave multiplot nyquist
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/nyquist2.m
Modified: trunk/octave-forge/main/control/devel/nyquist2.m
===================================================================
--- trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 08:24:31 UTC (rev 11006)
+++ trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-14 08:57:52 UTC (rev 11007)
@@ -65,17 +65,24 @@
if (! nargout)
tmp = cellfun (@isa, varargin, {"lti"});
sys_idx = find (tmp);
+ tmp = cellfun (@ischar, varargin);
+ style_idx = find (tmp);
len = numel (H);
- plot_args = {};
+ plot_args_pos = {};
+ plot_args_neg = {};
legend_args = cell (len, 1);
-
+ colororder = get (gca, "colororder");
+ rc = rows (colororder);
+
for k = 1:len
- plot_args = cat (2, plot_args, re{k}, im{k}, "-", re{k}, -im{k}, "-.");
+ col = colororder(1+rem (k-1, rc), :);
+ plot_args_pos = cat (2, plot_args_pos, re{k}, im{k}, {"-", "color", col});
+ plot_args_neg = cat (2, plot_args_neg, re{k}, -im{k}, {"-.", "color", col});
legend_args{k} = inputname(sys_idx(k));
endfor
- h = plot (plot_args{:});
+ h = plot (plot_args_pos{:}, plot_args_neg{:});
axis ("tight")
xlim (__axis_margin__ (xlim))
ylim (__axis_margin__ (ylim))
@@ -83,7 +90,8 @@
title ("Nyquist Diagram")
xlabel ("Real Axis")
ylabel ("Imaginary Axis")
- legend (h(1:2:2*len), legend_args)
+ legend (h(1:len), legend_args)
+ % legend (h(1:2:2*len), legend_args)
else
re_r = re{1};
im_r = im{1};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-14 08:24:42
|
Revision: 11006
http://octave.svn.sourceforge.net/octave/?rev=11006&view=rev
Author: paramaniac
Date: 2012-09-14 08:24:31 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
control: handle plots with implicit frequencies in backend of multiplot feature
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/__frequency_response_2__.m
trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
Modified: trunk/octave-forge/main/control/devel/__frequency_response_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-13 18:01:43 UTC (rev 11005)
+++ trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-14 08:24:31 UTC (rev 11006)
@@ -55,44 +55,13 @@
w = __frequency_vector_2__ (sys_cell, wbounds);
endif
- w = repmat ({w}, 1, numel (sys_cell)); # return cell of frequency vectors
+ w_frd = w(frd_idx); # temporarily save frequency vectors of FRD models
w(frd_idx) = {[]}; # freqresp returns all frequencies of FRD models for w=[]
## compute frequency response H for all LTI models
H = cellfun (@__freqresp__, sys_cell, w, {resptype}, {cellflag}, "uniformoutput", false);
- ## save frequency vectors of FRD models in w
- w_frd = cellfun (@get, sys_cell(frd_idx), {"w"}, "uniformoutput", false);
+ ## restore frequency vectors of FRD models in w
w(frd_idx) = w_frd;
-%{
- ## check arguments
- if(! isa (sys, "lti"))
- error ("frequency_response: first argument sys must be an LTI system");
- endif
-
- if (! mimoflag && ! issiso (sys))
- error ("frequency_response: require SISO system");
- endif
-
- if (isa (sys, "frd"))
- if (! isempty (w))
- warning ("frequency_response: second argument w is ignored");
- endif
- w = get (sys, "w");
- H = __freqresp__ (sys, [], resptype, cellflag);
- elseif (isempty (w)) # find interesting frequency range w if not specified
- w = __frequency_vector__ (sys, wbounds);
- H = __freqresp__ (sys, w, resptype, cellflag);
- elseif (iscell (w) && numel (w) == 2 && issample (w{1}) && issample (w{2}))
- w = __frequency_vector__ (sys, wbounds, w{1}, w{2});
- H = __freqresp__ (sys, w, resptype, cellflag);
- elseif (! is_real_vector (w))
- error ("frequency_response: second argument w must be a vector of frequencies");
- else
- H = __freqresp__ (sys, w, resptype, cellflag);
- endif
-
-%}
-
endfunction
Modified: trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-13 18:01:43 UTC (rev 11005)
+++ trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-14 08:24:31 UTC (rev 11006)
@@ -35,44 +35,68 @@
## Adapted-By: Lukas Reichlin <luk...@gm...>
## Date: October 2009
-## Version: 0.2
+## Version: 0.3
function w = __frequency_vector_2__ (sys_cell, wbounds = "std", wmin, wmax)
- if (! iscell (sys_cell))
+ isc = iscell (sys_cell);
+
+ if (! isc) # __sys2frd__ methods pass LTI models not in cells
sys_cell = {sys_cell}
endif
idx = cellfun (@(x) isa (x, "lti"), sys_cell);
sys_cell = sys_cell(idx);
+ len = numel (sys_cell);
[dec_min, dec_max, zp] = cellfun (@__frequency_range__, sys_cell, {wbounds}, "uniformoutput", false);
- if (nargin == 2)
- dec_min = min (cell2mat (dec_min));
- dec_max = max (cell2mat (dec_max));
- elseif (nargin == 4) # w = {wmin, wmax}
- dec_min = log10 (wmin);
- dec_max = log10 (wmax);
+ if (strcmpi (wbounds, "std")) # plots with explicit frequencies
+
+ if (nargin == 2)
+ dec_min = min (cell2mat (dec_min));
+ dec_max = max (cell2mat (dec_max));
+ elseif (nargin == 4) # w = {wmin, wmax}
+ dec_min = log10 (wmin);
+ dec_max = log10 (wmax);
+ else
+ print_usage ();
+ endif
+
+ zp = horzcat (zp{:});
+
+ ## include zeros and poles for nice peaks in plots
+ idx = find (zp > 10^dec_min & zp < 10^dec_max);
+ zp = zp(idx);
+
+ w = logspace (dec_min, dec_max, 500);
+ w = unique ([w, zp]); # unique also sorts frequency vector
+
+ w = repmat ({w}, 1, len); # return cell of frequency vectors
+
+ elseif (strcmpi (wbounds, "ext")) # plots with implicit frequencies
+
+ if (nargin == 4)
+ dec_min = repmat ({log10 (wmin)}, 1, len);
+ dec_max = repmat ({log10 (wmax)}, 1, len);
+ endif
+
+ idx = cellfun (@(zp, dec_min, dec_max) find (zp > 10^dec_min & zp < 10^dec_max), \
+ zp, dec_min, dec_max, "uniformoutput", false);
+ zp = cellfun (@(zp, idx) zp(idx), zp, idx, "uniformoutput", false);
+
+ w = cellfun (@logspace, dec_min, dec_max, {500}, "uniformoutput", false);
+ w = cellfun (@(w, zp) unique ([w, zp]), w, zp, "uniformoutput", false);
+ ## unique also sorts frequency vector
+
else
- print_usage ();
+ error ("frequency_vector: invalid argument 'wbounds'");
endif
- zp = horzcat (zp{:});
-
- ## include zeros and poles for nice peaks in plots
- idx = find (zp > 10^dec_min & zp < 10^dec_max);
- zp = zp(idx);
+ if (! isc) # for __sys2frd__ methods
+ w = w{1};
+ endif
- w = logspace (dec_min, dec_max, 500);
- w = unique ([w, zp]); # unique also sorts frequency vector
-
- ## TODO: nyquist diagrams may need individual dec_min and dec_max
- ## if curve goes to infinity
-
- ## TODO: handle FRD models (they have fixed w), maybe frequency_response
- ## is a better place for this?
-
endfunction
@@ -88,8 +112,8 @@
zer = zero (sys);
pol = pole (sys);
- tsam = abs (get (sys, "tsam")); # tsam could be -1
- discrete = ! isct (sys); # static gains (tsam = -2) are assumed continuous
+ tsam = abs (get (sys, "tsam")); # tsam could be -1
+ discrete = ! isct (sys); # static gains (tsam = -2) are assumed continuous
## make sure zer, pol are row vectors
pol = reshape (pol, 1, []);
@@ -132,8 +156,8 @@
if (isempty (iip) && isempty (iiz))
## no poles/zeros away from omega = 0; pick defaults
- dec_min = 0; # -1
- dec_max = 2; # 3
+ dec_min = 0; # -1
+ dec_max = 2; # 3
else
dec_min = floor (log10 (min (abs ([cpol, czer]))));
dec_max = ceil (log10 (max (abs ([cpol, czer]))));
@@ -141,7 +165,7 @@
## expand to show the entirety of the "interesting" portion of the plot
switch (wbounds)
- case "std" # standard
+ case "std" # standard
if (dec_min == dec_max)
dec_min -= 2;
dec_max += 2;
@@ -149,8 +173,8 @@
dec_min--;
dec_max++;
endif
- case "ext" # extended (for nyquist)
- if (any (abs (pol) < sqrt (eps))) # look for integrators
+ case "ext" # extended (for nyquist)
+ if (any (abs (pol) < sqrt (eps))) # look for integrators
## dec_min -= 0.5;
dec_max += 2;
else
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-13 18:01:50
|
Revision: 11005
http://octave.svn.sourceforge.net/octave/?rev=11005&view=rev
Author: paramaniac
Date: 2012-09-13 18:01:43 +0000 (Thu, 13 Sep 2012)
Log Message:
-----------
control: add legend to multiplot nyquist
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/nyquist2.m
Modified: trunk/octave-forge/main/control/devel/nyquist2.m
===================================================================
--- trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-13 17:50:58 UTC (rev 11004)
+++ trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-13 18:01:43 UTC (rev 11005)
@@ -63,12 +63,19 @@
im = cellfun (@imag, H, "uniformoutput", false);
if (! nargout)
- args = {};
- for k = 1 : numel (H)
- args = cat (2, args, re{k}, im{k}, "-", re{k}, -im{k}, "-.");
+ tmp = cellfun (@isa, varargin, {"lti"});
+ sys_idx = find (tmp);
+
+ len = numel (H);
+ plot_args = {};
+ legend_args = cell (len, 1);
+
+ for k = 1:len
+ plot_args = cat (2, plot_args, re{k}, im{k}, "-", re{k}, -im{k}, "-.");
+ legend_args{k} = inputname(sys_idx(k));
endfor
- plot (args{:})
+ h = plot (plot_args{:});
axis ("tight")
xlim (__axis_margin__ (xlim))
ylim (__axis_margin__ (ylim))
@@ -76,6 +83,7 @@
title ("Nyquist Diagram")
xlabel ("Real Axis")
ylabel ("Imaginary Axis")
+ legend (h(1:2:2*len), legend_args)
else
re_r = re{1};
im_r = im{1};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-13 17:51:09
|
Revision: 11004
http://octave.svn.sourceforge.net/octave/?rev=11004&view=rev
Author: paramaniac
Date: 2012-09-13 17:50:58 +0000 (Thu, 13 Sep 2012)
Log Message:
-----------
control: first draft code for multiplot nyquist
Modified Paths:
--------------
trunk/octave-forge/main/control/NEWS
trunk/octave-forge/main/control/devel/bode2.m
trunk/octave-forge/main/control/devel/multiplot.m
Added Paths:
-----------
trunk/octave-forge/main/control/devel/nyquist2.m
Modified: trunk/octave-forge/main/control/NEWS
===================================================================
--- trunk/octave-forge/main/control/NEWS 2012-09-13 16:47:24 UTC (rev 11003)
+++ trunk/octave-forge/main/control/NEWS 2012-09-13 17:50:58 UTC (rev 11004)
@@ -11,8 +11,11 @@
** sensitivity
Fixed a problem where an error was raised about an undefined function
"issiso".
-
+** All SLICOT function names have now leading and trailing underscores to
+ emphasize their private nature.
+
+
===============================================================================
control-2.3.53 Release Date: 2012-08-27 Release Manager: Lukas Reichlin
===============================================================================
Modified: trunk/octave-forge/main/control/devel/bode2.m
===================================================================
--- trunk/octave-forge/main/control/devel/bode2.m 2012-09-13 16:47:24 UTC (rev 11003)
+++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-13 17:50:58 UTC (rev 11004)
@@ -94,7 +94,7 @@
else
mag_r = mag{1};
pha_r = pha{1};
- w_r = w;
+ w_r = w{1};
endif
endfunction
\ No newline at end of file
Modified: trunk/octave-forge/main/control/devel/multiplot.m
===================================================================
--- trunk/octave-forge/main/control/devel/multiplot.m 2012-09-13 16:47:24 UTC (rev 11003)
+++ trunk/octave-forge/main/control/devel/multiplot.m 2012-09-13 17:50:58 UTC (rev 11004)
@@ -9,4 +9,8 @@
% bode2 (5*C_AH, frd (C_AH, 1:10), frd (C_opt, 11:20))
figure (3)
-bode2 (5*C_AH, '*r', C_AH, ':b', C_opt, '-.k')
\ No newline at end of file
+bode2 (5*C_AH, '*r', C_AH, 'xb', C_opt, 'ok')
+
+
+figure (4)
+nyquist2 (C_AH, C_opt)
\ No newline at end of file
Added: trunk/octave-forge/main/control/devel/nyquist2.m
===================================================================
--- trunk/octave-forge/main/control/devel/nyquist2.m (rev 0)
+++ trunk/octave-forge/main/control/devel/nyquist2.m 2012-09-13 17:50:58 UTC (rev 11004)
@@ -0,0 +1,85 @@
+## Copyright (C) 2009, 2010, 2012 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{re}, @var{im}, @var{w}] =} nyquist (@var{sys})
+## @deftypefnx {Function File} {[@var{re}, @var{im}, @var{w}] =} nyquist (@var{sys}, @var{w})
+## Nyquist diagram of frequency response. If no output arguments are given,
+## the response is printed on the screen.
+##
+## @strong{Inputs}
+## @table @var
+## @item sys
+## LTI system. Must be a single-input and single-output (SISO) system.
+## @item w
+## Optional vector of frequency values. If @var{w} is not specified,
+## it is calculated by the zeros and poles of the system.
+## Alternatively, the cell @code{@{wmin, wmax@}} specifies a frequency range,
+## where @var{wmin} and @var{wmax} denote minimum and maximum frequencies
+## in rad/s.
+## @end table
+##
+## @strong{Outputs}
+## @table @var
+## @item re
+## Vector of real parts. Has length of frequency vector @var{w}.
+## @item im
+## Vector of imaginary parts. Has length of frequency vector @var{w}.
+## @item w
+## Vector of frequency values used.
+## @end table
+##
+## @seealso{bode, nichols, sigma}
+## @end deftypefn
+
+## Author: Lukas Reichlin <luk...@gm...>
+## Created: November 2009
+## Version: 0.4
+
+function [re_r, im_r, w_r] = nyquist2 (varargin)
+
+ if (nargin == 0)
+ print_usage ();
+ endif
+
+ [H, w] = __frequency_response_2__ (varargin, false, 0, "ext");
+
+ H = cellfun (@reshape, H, {[]}, {1}, "uniformoutput", false);
+ re = cellfun (@real, H, "uniformoutput", false);
+ im = cellfun (@imag, H, "uniformoutput", false);
+
+ if (! nargout)
+ args = {};
+ for k = 1 : numel (H)
+ args = cat (2, args, re{k}, im{k}, "-", re{k}, -im{k}, "-.");
+ endfor
+
+ plot (args{:})
+ axis ("tight")
+ xlim (__axis_margin__ (xlim))
+ ylim (__axis_margin__ (ylim))
+ grid ("on")
+ title ("Nyquist Diagram")
+ xlabel ("Real Axis")
+ ylabel ("Imaginary Axis")
+ else
+ re_r = re{1};
+ im_r = im{1};
+ w_r = w{1};
+ 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...> - 2012-09-13 16:47:35
|
Revision: 11003
http://octave.svn.sourceforge.net/octave/?rev=11003&view=rev
Author: paramaniac
Date: 2012-09-13 16:47:24 +0000 (Thu, 13 Sep 2012)
Log Message:
-----------
control: support plot styles (very basic)
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/__frequency_response_2__.m
trunk/octave-forge/main/control/devel/bode2.m
trunk/octave-forge/main/control/devel/multiplot.m
Modified: trunk/octave-forge/main/control/devel/__frequency_response_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-13 14:34:26 UTC (rev 11002)
+++ trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-13 16:47:24 UTC (rev 11003)
@@ -21,11 +21,14 @@
## Author: Lukas Reichlin <luk...@gm...>
## Created: November 2009
-## Version: 0.4
+## Version: 0.5
-% function [H, w] = __frequency_response__ (sys, w = [], mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
function [H, w] = __frequency_response_2__ (args, mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
+ %if (! iscell (args))
+ % args = {args};
+ %endif
+
sys_idx = cellfun (@isa, args, {"lti"}); # look for LTI models
w_idx = cellfun (@is_real_vector, args); # look for frequency vectors
r_idx = cellfun (@iscell, args); # look for frequency ranges {wmin, wmax}
@@ -33,6 +36,12 @@
sys_cell = args(sys_idx); # extract LTI models
frd_idx = cellfun (@isa, sys_cell, {"frd"}); # look for FRD models
+ ## check arguments
+ if (! mimoflag && ! all (cellfun (@issiso, sys_cell)))
+ error ("frequency_response: require SISO systems");
+ endif
+
+ ## determine frequencies
if (any (r_idx)) # if there are frequency ranges
r = args(r_idx){end}; # take the last one
if (numel (r) == 2 && issample (r{1}) && issample (r{2}))
@@ -55,11 +64,7 @@
## save frequency vectors of FRD models in w
w_frd = cellfun (@get, sys_cell(frd_idx), {"w"}, "uniformoutput", false);
w(frd_idx) = w_frd;
-%w
-%w = get (sys, "w");
-%args{sys_idx}
-
%{
## check arguments
if(! isa (sys, "lti"))
Modified: trunk/octave-forge/main/control/devel/bode2.m
===================================================================
--- trunk/octave-forge/main/control/devel/bode2.m 2012-09-13 14:34:26 UTC (rev 11002)
+++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-13 16:47:24 UTC (rev 11003)
@@ -48,12 +48,10 @@
## Author: Lukas Reichlin <luk...@gm...>
## Created: November 2009
-## Version: 0.4
+## Version: 0.5
function [mag_r, pha_r, w_r] = bode2 (varargin)
- ## TODO: multiplot feature: bode (sys1, "b", sys2, "r", ...)
-
if (nargin == 0)
print_usage ();
endif
@@ -67,23 +65,23 @@
if (! nargout)
mag_db = cellfun (@(mag) 20 * log10 (mag), mag, "uniformoutput", false);
- %w_cell = repmat ({w}, 1, numel (H));
+ style = repmat ({""}, 1, numel (H));
- mag_args = vertcat (w, mag_db)(:);
- pha_args = vertcat (w, pha)(:);
-
- %if (isct (sys))
- xl_str = "Frequency [rad/s]";
- %else
- % xl_str = sprintf ("Frequency [rad/s] w_N = %g", pi / get (sys, "tsam"));
- %endif
+ tmp = cellfun (@ischar, varargin);
+ char_idx = find (tmp);
+ char_idx = char_idx(1:min (numel (H), end));
+ style(1:length (char_idx)) = varargin(char_idx);
+
+ mag_args = vertcat (w, mag_db, style)(:);
+ pha_args = vertcat (w, pha, style)(:);
+
subplot (2, 1, 1)
semilogx (mag_args{:})
axis ("tight")
ylim (__axis_margin__ (ylim))
grid ("on")
- title (["Bode Diagram of ", inputname(1)])
+ title ("Bode Diagram")
ylabel ("Magnitude [dB]")
subplot (2, 1, 2)
@@ -91,7 +89,7 @@
axis ("tight")
ylim (__axis_margin__ (ylim))
grid ("on")
- xlabel (xl_str)
+ xlabel ("Frequency [rad/s]")
ylabel ("Phase [deg]")
else
mag_r = mag{1};
Modified: trunk/octave-forge/main/control/devel/multiplot.m
===================================================================
--- trunk/octave-forge/main/control/devel/multiplot.m 2012-09-13 14:34:26 UTC (rev 11002)
+++ trunk/octave-forge/main/control/devel/multiplot.m 2012-09-13 16:47:24 UTC (rev 11003)
@@ -6,4 +6,7 @@
figure (2)
bode2 (5*C_AH, frd (C_AH), frd (C_opt))
-% bode2 (5*C_AH, frd (C_AH, 1:10), frd (C_opt, 11:20))
\ No newline at end of file
+% bode2 (5*C_AH, frd (C_AH, 1:10), frd (C_opt, 11:20))
+
+figure (3)
+bode2 (5*C_AH, '*r', C_AH, ':b', C_opt, '-.k')
\ 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...> - 2012-09-13 14:34:37
|
Revision: 11002
http://octave.svn.sourceforge.net/octave/?rev=11002&view=rev
Author: paramaniac
Date: 2012-09-13 14:34:26 +0000 (Thu, 13 Sep 2012)
Log Message:
-----------
control: handle FRD models in multiplot function
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/__frequency_response_2__.m
trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
trunk/octave-forge/main/control/devel/bode2.m
trunk/octave-forge/main/control/devel/multiplot.m
Modified: trunk/octave-forge/main/control/devel/__frequency_response_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-13 08:09:07 UTC (rev 11001)
+++ trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-13 14:34:26 UTC (rev 11002)
@@ -26,32 +26,40 @@
% function [H, w] = __frequency_response__ (sys, w = [], mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
function [H, w] = __frequency_response_2__ (args, mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
- sys_idx = cellfun (@isa, args, {"lti"}); # true or false
- w_idx = cellfun (@is_real_vector, args); # look for frequency vectors
- c_idx = cellfun (@iscell, args);
- % args(?) (end)
+ sys_idx = cellfun (@isa, args, {"lti"}); # look for LTI models
+ w_idx = cellfun (@is_real_vector, args); # look for frequency vectors
+ r_idx = cellfun (@iscell, args); # look for frequency ranges {wmin, wmax}
+
+ sys_cell = args(sys_idx); # extract LTI models
+ frd_idx = cellfun (@isa, sys_cell, {"frd"}); # look for FRD models
-
-% w_idx(end)
-
- if (any (c_idx))
- w = args(c_idx){end};
- if (numel (w) == 2 && issample (w{1}) && issample (w{2}))
- w = __frequency_vector_2__ (args(sys_idx), wbounds, w{1}, w{2});
+ if (any (r_idx)) # if there are frequency ranges
+ r = args(r_idx){end}; # take the last one
+ if (numel (r) == 2 && issample (r{1}) && issample (r{2}))
+ w = __frequency_vector_2__ (sys_cell, wbounds, r{1}, r{2});
else
error ("frequency_response: invalid cell");
endif
- elseif (any (w_idx))
+ elseif (any (w_idx)) # are there any frequency vectors?
w = args(w_idx){end};
- else
- w = __frequency_vector_2__ (args(sys_idx), wbounds);
+ else # there are neither frequency ranges nor vectors
+ w = __frequency_vector_2__ (sys_cell, wbounds);
endif
-%args{sys_idx}
+ w = repmat ({w}, 1, numel (sys_cell)); # return cell of frequency vectors
+ w(frd_idx) = {[]}; # freqresp returns all frequencies of FRD models for w=[]
+ ## compute frequency response H for all LTI models
+ H = cellfun (@__freqresp__, sys_cell, w, {resptype}, {cellflag}, "uniformoutput", false);
- H = cellfun (@__freqresp__, args(sys_idx), {w}, {resptype}, {cellflag}, "uniformoutput", false);
+ ## save frequency vectors of FRD models in w
+ w_frd = cellfun (@get, sys_cell(frd_idx), {"w"}, "uniformoutput", false);
+ w(frd_idx) = w_frd;
+%w
+%w = get (sys, "w");
+%args{sys_idx}
+
%{
## check arguments
if(! isa (sys, "lti"))
Modified: trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-13 08:09:07 UTC (rev 11001)
+++ trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-13 14:34:26 UTC (rev 11002)
@@ -46,7 +46,7 @@
idx = cellfun (@(x) isa (x, "lti"), sys_cell);
sys_cell = sys_cell(idx);
- [dec_min, dec_max, zp] = cellfun (@(x) __frequency_range__ (x, wbounds), sys_cell, "uniformoutput", false);
+ [dec_min, dec_max, zp] = cellfun (@__frequency_range__, sys_cell, {wbounds}, "uniformoutput", false);
if (nargin == 2)
dec_min = min (cell2mat (dec_min));
@@ -78,6 +78,14 @@
function [dec_min, dec_max, zp] = __frequency_range__ (sys, wbounds = "std")
+ if (isa (sys, "frd"))
+ w = get (sys, "w");
+ dec_min = log10 (w(1));
+ dec_max = log10 (w(end));
+ zp = [];
+ return;
+ endif
+
zer = zero (sys);
pol = pole (sys);
tsam = abs (get (sys, "tsam")); # tsam could be -1
Modified: trunk/octave-forge/main/control/devel/bode2.m
===================================================================
--- trunk/octave-forge/main/control/devel/bode2.m 2012-09-13 08:09:07 UTC (rev 11001)
+++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-13 14:34:26 UTC (rev 11002)
@@ -67,10 +67,10 @@
if (! nargout)
mag_db = cellfun (@(mag) 20 * log10 (mag), mag, "uniformoutput", false);
- w_cell = repmat ({w}, 1, numel (H));
+ %w_cell = repmat ({w}, 1, numel (H));
- mag_args = vertcat (w_cell, mag_db)(:);
- pha_args = vertcat (w_cell, pha)(:);
+ mag_args = vertcat (w, mag_db)(:);
+ pha_args = vertcat (w, pha)(:);
%if (isct (sys))
xl_str = "Frequency [rad/s]";
Modified: trunk/octave-forge/main/control/devel/multiplot.m
===================================================================
--- trunk/octave-forge/main/control/devel/multiplot.m 2012-09-13 08:09:07 UTC (rev 11001)
+++ trunk/octave-forge/main/control/devel/multiplot.m 2012-09-13 14:34:26 UTC (rev 11002)
@@ -1,3 +1,9 @@
load tfs.dat
-bode2 (C_AH, C_opt)
\ No newline at end of file
+figure (1)
+bode2 (C_AH, C_opt)
+
+figure (2)
+bode2 (5*C_AH, frd (C_AH), frd (C_opt))
+
+% bode2 (5*C_AH, frd (C_AH, 1:10), frd (C_opt, 11:20))
\ 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...> - 2012-09-13 08:09:18
|
Revision: 11001
http://octave.svn.sourceforge.net/octave/?rev=11001&view=rev
Author: paramaniac
Date: 2012-09-13 08:09:07 +0000 (Thu, 13 Sep 2012)
Log Message:
-----------
control: work on multiplot feature
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/__frequency_response_2__.m
trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
trunk/octave-forge/main/control/devel/bode2.m
Added Paths:
-----------
trunk/octave-forge/main/control/devel/multiplot2.m
Modified: trunk/octave-forge/main/control/devel/__frequency_response_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-12 19:03:09 UTC (rev 11000)
+++ trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-13 08:09:07 UTC (rev 11001)
@@ -24,24 +24,33 @@
## Version: 0.4
% function [H, w] = __frequency_response__ (sys, w = [], mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
-function [H, w] = __frequency_response_2__ (mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false, varargin)
+function [H, w] = __frequency_response_2__ (args, mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
- sys_idx = cellfun (@isa, varargin, {"lti"}); # true or false
- w_idx = cellfun (@is_real_vector, varargin); # look for frequency vectors
- % ? = cellfun (@iscell, varargin)
- % varargin(?) (end)
+ sys_idx = cellfun (@isa, args, {"lti"}); # true or false
+ w_idx = cellfun (@is_real_vector, args); # look for frequency vectors
+ c_idx = cellfun (@iscell, args);
+ % args(?) (end)
% w_idx(end)
- if (! any (w_idx))
- w = __frequency_vector_2__ (varargin(sys_idx), wbounds);
+ if (any (c_idx))
+ w = args(c_idx){end};
+ if (numel (w) == 2 && issample (w{1}) && issample (w{2}))
+ w = __frequency_vector_2__ (args(sys_idx), wbounds, w{1}, w{2});
+ else
+ error ("frequency_response: invalid cell");
+ endif
+ elseif (any (w_idx))
+ w = args(w_idx){end};
+ else
+ w = __frequency_vector_2__ (args(sys_idx), wbounds);
endif
-%varargin{sys_idx}
+%args{sys_idx}
- H = cellfun (@__freqresp__, varargin(sys_idx), {w}, {resptype}, {cellflag}, "uniformoutput", false);
+ H = cellfun (@__freqresp__, args(sys_idx), {w}, {resptype}, {cellflag}, "uniformoutput", false);
%{
## check arguments
Modified: trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-12 19:03:09 UTC (rev 11000)
+++ trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-13 08:09:07 UTC (rev 11001)
@@ -37,7 +37,7 @@
## Date: October 2009
## Version: 0.2
-function w = __frequency_vector_2__ (sys_cell, wbounds = "std")
+function w = __frequency_vector_2__ (sys_cell, wbounds = "std", wmin, wmax)
if (! iscell (sys_cell))
sys_cell = {sys_cell}
@@ -48,8 +48,16 @@
[dec_min, dec_max, zp] = cellfun (@(x) __frequency_range__ (x, wbounds), sys_cell, "uniformoutput", false);
- dec_min = min (cell2mat (dec_min));
- dec_max = max (cell2mat (dec_max));
+ if (nargin == 2)
+ dec_min = min (cell2mat (dec_min));
+ dec_max = max (cell2mat (dec_max));
+ elseif (nargin == 4) # w = {wmin, wmax}
+ dec_min = log10 (wmin);
+ dec_max = log10 (wmax);
+ else
+ print_usage ();
+ endif
+
zp = horzcat (zp{:});
## include zeros and poles for nice peaks in plots
Modified: trunk/octave-forge/main/control/devel/bode2.m
===================================================================
--- trunk/octave-forge/main/control/devel/bode2.m 2012-09-12 19:03:09 UTC (rev 11000)
+++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-13 08:09:07 UTC (rev 11001)
@@ -58,7 +58,7 @@
print_usage ();
endif
- [H, w] = __frequency_response_2__ (false, 0, "std", false, varargin{:});
+ [H, w] = __frequency_response_2__ (varargin, false, 0, "std", false);
H = cellfun (@reshape, H, {[]}, {1}, "uniformoutput", false);
mag = cellfun (@abs, H, "uniformoutput", false);
Added: trunk/octave-forge/main/control/devel/multiplot2.m
===================================================================
--- trunk/octave-forge/main/control/devel/multiplot2.m (rev 0)
+++ trunk/octave-forge/main/control/devel/multiplot2.m 2012-09-13 08:09:07 UTC (rev 11001)
@@ -0,0 +1,110 @@
+%% -*- texinfo -*-
+%% Frequency-weighted controller reduction.
+
+% ===============================================================================
+% Frequency Weighted Controller Reduction Lukas Reichlin December 2011
+% ===============================================================================
+% Reference: Madievski, A.G. and Anderson, B.D.O.
+% Sampled-Data Controller Reduction Procedure
+% IEEE Transactions of Automatic Control
+% Vol. 40, No. 11, November 1995
+% ===============================================================================
+
+% Tabula Rasa
+clear all, close all, clc
+
+% Plant
+Ap1 = [ 0.0 1.0
+ 0.0 0.0 ];
+
+Ap2 = [ -0.015 0.765
+ -0.765 -0.015 ];
+
+Ap3 = [ -0.028 1.410
+ -1.410 -0.028 ];
+
+Ap4 = [ -0.04 1.85
+ -1.85 -0.04 ];
+
+Ap = blkdiag (Ap1, Ap2, Ap3, Ap4);
+
+Bp = [ 0.026
+ -0.251
+ 0.033
+ -0.886
+ -4.017
+ 0.145
+ 3.604
+ 0.280 ];
+
+Cp = [ -0.996 -0.105 0.261 0.009 -0.001 -0.043 0.002 -0.026 ];
+
+Dp = [ 0.0 ];
+
+P = ss (Ap, Bp, Cp, Dp);
+
+% Controller
+Ac = [ -0.4077 0.9741 0.1073 0.0131 0.0023 -0.0186 -0.0003 -0.0098
+ -0.0977 -0.1750 0.0215 -0.0896 -0.0260 0.0057 0.0109 -0.0105
+ 0.0011 0.0218 -0.0148 0.7769 0.0034 -0.0013 -0.0014 0.0011
+ -0.0361 -0.5853 -0.7701 -0.3341 -0.0915 0.0334 0.0378 -0.0290
+ -0.1716 -2.6546 -0.0210 -1.4467 -0.4428 1.5611 0.1715 -0.1318
+ -0.0020 0.0950 0.0029 0.0523 -1.3950 -0.0338 -0.0062 0.0045
+ 0.1607 2.3824 0.0170 1.2979 0.3721 -0.1353 -0.1938 1.9685
+ -0.0006 0.1837 0.0048 0.1010 0.0289 -0.0111 -1.8619 -0.0311 ];
+
+Bc = [ -0.4105
+ -0.0868
+ -0.0004
+ 0.0036
+ 0.0081
+ -0.0085
+ -0.0004
+ -0.0132 ];
+
+Cc = [ -0.0447 -0.6611 -0.0047 -0.3601 -0.1033 0.0375 0.0427 -0.0329 ];
+
+Dc = [ 0.0 ];
+
+K = ss (Ac, Bc, Cc, Dc);
+
+% Controller Reduction
+Kr4 = spaconred (P, K, 4, 'feedback', '-')
+Kr2 = spaconred (P, K, 2, 'feedback', '-')
+
+%{
+% Open Loop
+L = P * K;
+Lr4 = P * Kr4;
+Lr2 = P * Kr2;
+
+% Closed Loop
+T = feedback (L);
+Tr4 = feedback (Lr4);
+Tr2 = feedback (Lr2);
+%}
+
+% Frequency Range
+w = {1e-2, 1e1};
+% w = logspace (-2, 1, 500);
+
+% Bode Plot of Controller
+figure (1)
+bode2 (K, Kr4, Kr2, w)
+title ('Bode Diagrams of K and Kr')
+legend ('K (8 states)', 'Kr (4 states)', 'Kr (2 states)', 'location', 'southwest')
+
+%{
+% Step Response of Closed Loop
+[y, t] = step (T, 100);
+[yr4, tr4] = step (Tr4, 100);
+[yr2, tr2] = step (Tr2, 100);
+
+figure (2)
+plot (t, y, tr4, yr4, tr2, yr2)
+grid ('on')
+title ('Step Response of Closed Loop')
+xlabel ('Time [s]')
+ylabel ('Output [-]')
+legend ('K (8 states)', 'Kr (4 states)', 'Kr (2 states)', 'Location', 'SouthEast')
+%}
\ 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...> - 2012-09-12 19:03:20
|
Revision: 11000
http://octave.svn.sourceforge.net/octave/?rev=11000&view=rev
Author: paramaniac
Date: 2012-09-12 19:03:09 +0000 (Wed, 12 Sep 2012)
Log Message:
-----------
control: clean up draft code
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/bode2.m
Modified: trunk/octave-forge/main/control/devel/bode2.m
===================================================================
--- trunk/octave-forge/main/control/devel/bode2.m 2012-09-12 14:42:16 UTC (rev 10999)
+++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-12 19:03:09 UTC (rev 11000)
@@ -54,9 +54,9 @@
## TODO: multiplot feature: bode (sys1, "b", sys2, "r", ...)
-% if (nargin == 0 || nargin > 2)
-% print_usage ();
-% endif
+ if (nargin == 0)
+ print_usage ();
+ endif
[H, w] = __frequency_response_2__ (false, 0, "std", false, varargin{:});
@@ -71,9 +71,6 @@
mag_args = vertcat (w_cell, mag_db)(:);
pha_args = vertcat (w_cell, pha)(:);
-
- %mag_args = cellfun (@horzcat, {w}, mag_db, "uniformoutput", false);
- %pha_args = cellfun (@horzcat, {w}, pha, "uniformoutput", false);
%if (isct (sys))
xl_str = "Frequency [rad/s]";
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <par...@us...> - 2012-09-12 14:42:28
|
Revision: 10999
http://octave.svn.sourceforge.net/octave/?rev=10999&view=rev
Author: paramaniac
Date: 2012-09-12 14:42:16 +0000 (Wed, 12 Sep 2012)
Log Message:
-----------
control: get multiplot draft code working \ o /
Modified Paths:
--------------
trunk/octave-forge/main/control/devel/__frequency_response_2__.m
trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
trunk/octave-forge/main/control/devel/bode2.m
Added Paths:
-----------
trunk/octave-forge/main/control/devel/multiplot.m
trunk/octave-forge/main/control/devel/tfs.dat
Modified: trunk/octave-forge/main/control/devel/__frequency_response_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-12 11:20:19 UTC (rev 10998)
+++ trunk/octave-forge/main/control/devel/__frequency_response_2__.m 2012-09-12 14:42:16 UTC (rev 10999)
@@ -26,21 +26,24 @@
% function [H, w] = __frequency_response__ (sys, w = [], mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false)
function [H, w] = __frequency_response_2__ (mimoflag = 0, resptype = 0, wbounds = "std", cellflag = false, varargin)
- sys_vec = cellfun (@(x) isa (x, "lti"), varargin) # true or false
- sys_idx = find (sys_vec)
+ sys_idx = cellfun (@isa, varargin, {"lti"}); # true or false
+ w_idx = cellfun (@is_real_vector, varargin); # look for frequency vectors
+ % ? = cellfun (@iscell, varargin)
+ % varargin(?) (end)
- w_vec = cellfun (@is_real_vector, varargin)
- w_idx = find (w_vec)
% w_idx(end)
- if (isempty (w_idx))
- w = __frequency_vector_2__ (wbounds, varargin{sys_idx})
+ if (! any (w_idx))
+ w = __frequency_vector_2__ (varargin(sys_idx), wbounds);
endif
-varargin{sys_idx}
+%varargin{sys_idx}
+ H = cellfun (@__freqresp__, varargin(sys_idx), {w}, {resptype}, {cellflag}, "uniformoutput", false);
+
+%{
## check arguments
if(! isa (sys, "lti"))
error ("frequency_response: first argument sys must be an LTI system");
@@ -67,5 +70,7 @@
else
H = __freqresp__ (sys, w, resptype, cellflag);
endif
+
+%}
endfunction
Modified: trunk/octave-forge/main/control/devel/__frequency_vector_2__.m
===================================================================
--- trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-12 11:20:19 UTC (rev 10998)
+++ trunk/octave-forge/main/control/devel/__frequency_vector_2__.m 2012-09-12 14:42:16 UTC (rev 10999)
@@ -37,7 +37,7 @@
## Date: October 2009
## Version: 0.2
-function w = __frequency_vector__ (sys_cell, wbounds = "std")
+function w = __frequency_vector_2__ (sys_cell, wbounds = "std")
if (! iscell (sys_cell))
sys_cell = {sys_cell}
Modified: trunk/octave-forge/main/control/devel/bode2.m
===================================================================
--- trunk/octave-forge/main/control/devel/bode2.m 2012-09-12 11:20:19 UTC (rev 10998)
+++ trunk/octave-forge/main/control/devel/bode2.m 2012-09-12 14:42:16 UTC (rev 10999)
@@ -59,22 +59,30 @@
% endif
[H, w] = __frequency_response_2__ (false, 0, "std", false, varargin{:});
+
+ H = cellfun (@reshape, H, {[]}, {1}, "uniformoutput", false);
+ mag = cellfun (@abs, H, "uniformoutput", false);
+ pha = cellfun (@(H) unwrap (arg (H)) * 180 / pi, H, "uniformoutput", false);
- H = reshape (H, [], 1);
- mag = abs (H);
- pha = unwrap (arg (H)) * 180 / pi;
-
if (! nargout)
- mag_db = 20 * log10 (mag);
+ mag_db = cellfun (@(mag) 20 * log10 (mag), mag, "uniformoutput", false);
- if (isct (sys))
+ w_cell = repmat ({w}, 1, numel (H));
+
+ mag_args = vertcat (w_cell, mag_db)(:);
+ pha_args = vertcat (w_cell, pha)(:);
+
+ %mag_args = cellfun (@horzcat, {w}, mag_db, "uniformoutput", false);
+ %pha_args = cellfun (@horzcat, {w}, pha, "uniformoutput", false);
+
+ %if (isct (sys))
xl_str = "Frequency [rad/s]";
- else
- xl_str = sprintf ("Frequency [rad/s] w_N = %g", pi / get (sys, "tsam"));
- endif
+ %else
+ % xl_str = sprintf ("Frequency [rad/s] w_N = %g", pi / get (sys, "tsam"));
+ %endif
subplot (2, 1, 1)
- semilogx (w, mag_db)
+ semilogx (mag_args{:})
axis ("tight")
ylim (__axis_margin__ (ylim))
grid ("on")
@@ -82,15 +90,15 @@
ylabel ("Magnitude [dB]")
subplot (2, 1, 2)
- semilogx (w, pha)
+ semilogx (pha_args{:})
axis ("tight")
ylim (__axis_margin__ (ylim))
grid ("on")
xlabel (xl_str)
ylabel ("Phase [deg]")
else
- mag_r = mag;
- pha_r = pha;
+ mag_r = mag{1};
+ pha_r = pha{1};
w_r = w;
endif
Added: trunk/octave-forge/main/control/devel/multiplot.m
===================================================================
--- trunk/octave-forge/main/control/devel/multiplot.m (rev 0)
+++ trunk/octave-forge/main/control/devel/multiplot.m 2012-09-12 14:42:16 UTC (rev 10999)
@@ -0,0 +1,3 @@
+load tfs.dat
+
+bode2 (C_AH, C_opt)
\ No newline at end of file
Added: trunk/octave-forge/main/control/devel/tfs.dat
===================================================================
--- trunk/octave-forge/main/control/devel/tfs.dat (rev 0)
+++ trunk/octave-forge/main/control/devel/tfs.dat 2012-09-12 14:42:16 UTC (rev 10999)
@@ -0,0 +1,3990 @@
+# Created by Octave 3.6.3, Wed Sep 12 16:18:22 2012 CEST <lu...@ra...>
+# name: C_AH
+# type: class
+# classname: tf
+# length: 5
+# name: den
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 4
+ 0.008979867577393098 0.2861205263052757 2.279124799660292 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: inv
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: bool
+0
+
+
+
+
+
+# name: lti
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: lti
+# length: 6
+# name: inname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: name
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+# name: notes
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 0
+# columns: 0
+
+
+
+
+
+# name: outname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: tsam
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: scalar
+0
+
+
+
+
+
+# name: userdata
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_matrix
+# rows: 0
+# columns: 0
+
+
+
+
+
+
+
+
+
+
+# name: num
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 3
+ 1.211107551841654 1.929442317265359 0.846571595181162
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: tfvar
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: string
+# elements: 1
+# length: 1
+s
+
+
+
+
+
+
+
+# name: C_opt
+# type: class
+# classname: tf
+# length: 5
+# name: den
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 4
+ 0.0277727961257141 0.5755081966283047 2.981421846103795 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: inv
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: bool
+0
+
+
+
+
+
+# name: lti
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: lti
+# length: 6
+# name: inname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: name
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+# name: notes
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 0
+# columns: 0
+
+
+
+
+
+# name: outname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: tsam
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: scalar
+0
+
+
+
+
+
+# name: userdata
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_matrix
+# rows: 0
+# columns: 0
+
+
+
+
+
+
+
+
+
+
+# name: num
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 3
+ 1.742425436966594 1.805327984349914 0.605525845565654
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: tfvar
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: string
+# elements: 1
+# length: 1
+s
+
+
+
+
+
+
+
+# name: C_par_0
+# type: matrix
+# rows: 3
+# columns: 1
+ 0.846571595181162
+ 2.279124799660292
+ 0.6276982426498158
+
+
+# name: C_par_opt
+# type: matrix
+# rows: 3
+# columns: 1
+ 0.605525845565654
+ 2.981421846103795
+ 0.9651572745071195
+
+
+# name: L_AH
+# type: class
+# classname: tf
+# length: 5
+# name: den
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 10
+ 0.008979867577393098 0.3310198641922412 3.808505974537995 14.668667933743 29.17483870788839 35.09997232248909 26.50995529536698 11.68174452460673 2.279124799660292 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: inv
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: bool
+0
+
+
+
+
+
+# name: lti
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: lti
+# length: 6
+# name: inname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: name
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+# name: notes
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 0
+# columns: 0
+
+
+
+
+
+# name: outname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: tsam
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: scalar
+0
+
+
+
+
+
+# name: userdata
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_matrix
+# rows: 0
+# columns: 0
+
+
+
+
+
+
+
+
+
+
+# name: num
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 3
+ 1.211107551841654 1.929442317265359 0.846571595181162
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: tfvar
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: string
+# elements: 1
+# length: 1
+s
+
+
+
+
+
+
+
+# name: L_opt
+# type: class
+# classname: tf
+# length: 5
+# name: den
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 10
+ 0.0277727961257141 0.7143721772568752 6.164463586628174 21.62651853919032 41.15825581732086 48.20935998899305 35.70095408640898 15.48261742714728 2.981421846103795 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: inv
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: bool
+0
+
+
+
+
+
+# name: lti
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: lti
+# length: 6
+# name: inname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: name
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+# name: notes
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 0
+# columns: 0
+
+
+
+
+
+# name: outname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: tsam
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: scalar
+0
+
+
+
+
+
+# name: userdata
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_matrix
+# rows: 0
+# columns: 0
+
+
+
+
+
+
+
+
+
+
+# name: num
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 3
+ 1.742425436966594 1.805327984349914 0.605525845565654
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: tfvar
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: string
+# elements: 1
+# length: 1
+s
+
+
+
+
+
+
+
+# name: P
+# type: global class
+# classname: tf
+# length: 5
+# name: den
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 7
+ 1 5 11 14 11 5 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: inv
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: bool
+0
+
+
+
+
+
+# name: lti
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: lti
+# length: 6
+# name: inname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: name
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+# name: notes
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 0
+# columns: 0
+
+
+
+
+
+# name: outname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: tsam
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: scalar
+0
+
+
+
+
+
+# name: userdata
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_matrix
+# rows: 0
+# columns: 0
+
+
+
+
+
+
+
+
+
+
+# name: num
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: scalar
+1
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: tfvar
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: string
+# elements: 1
+# length: 1
+s
+
+
+
+
+
+
+
+# name: T_AH
+# type: class
+# classname: tf
+# length: 5
+# name: den
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 10
+ 0.008979867577393098 0.3310198641922412 3.808505974537995 14.668667933743 29.17483870788839 35.09997232248909 26.50995529536698 12.89285207644839 4.208567116925651 0.846571595181162
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: inv
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: bool
+0
+
+
+
+
+
+# name: lti
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: lti
+# length: 6
+# name: inname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: name
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+# name: notes
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 0
+# columns: 0
+
+
+
+
+
+# name: outname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: tsam
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: scalar
+0
+
+
+
+
+
+# name: userdata
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_matrix
+# rows: 0
+# columns: 0
+
+
+
+
+
+
+
+
+
+
+# name: num
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 3
+ 1.211107551841654 1.929442317265359 0.846571595181162
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: tfvar
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: string
+# elements: 1
+# length: 1
+s
+
+
+
+
+
+
+
+# name: T_opt
+# type: class
+# classname: tf
+# length: 5
+# name: den
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 10
+ 0.0277727961257141 0.7143721772568752 6.164463586628174 21.62651853919032 41.15825581732086 48.20935998899305 35.70095408640898 17.22504286411387 4.786749830453709 0.605525845565654
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: inv
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: bool
+0
+
+
+
+
+
+# name: lti
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: lti
+# length: 6
+# name: inname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: name
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+# name: notes
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 0
+# columns: 0
+
+
+
+
+
+# name: outname
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_string
+# elements: 0
+
+
+
+
+
+
+
+
+# name: tsam
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: scalar
+0
+
+
+
+
+
+# name: userdata
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: null_matrix
+# rows: 0
+# columns: 0
+
+
+
+
+
+
+
+
+
+
+# name: num
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: class
+# classname: tfpoly
+# length: 1
+# name: poly
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: matrix
+# rows: 1
+# columns: 3
+ 1.742425436966594 1.805327984349914 0.605525845565654
+
+
+
+
+
+
+
+
+
+
+
+
+
+# name: tfvar
+# type: cell
+# rows: 1
+# columns: 1
+# name: <cell-element>
+# type: string
+# elements: 1
+# length: 1
+s
+
+
+
+
+
+
+
+# name: Td_AH
+# type: scalar
+0.6276982426498158
+
+
+# name: Td_opt
+# type: scalar
+0.9651572745071195
+
+
+# name: Ti_AH
+# type: scalar
+2.279124799660292
+
+
+# name: Ti_opt
+# type: scalar
+2.981421846103795
+
+
+# name: Tu
+# type: scalar
+9.693196537717052
+
+
+# name: denP
+# type: matrix
+# rows: 1
+# columns: 7
+ 1 5 11 14 11 5 1
+
+
+# name: dt
+# type: global scalar
+0.05
+
+
+# name: gamma
+# type: scalar
+1.75407835279559
+
+
+# name: gamma_AH
+# type: scalar
+1.587864585936343
+
+
+# name: gamma_opt
+# type: scalar
+2.867548815608383
+
+
+# name: kappa
+# type: scalar
+1
+
+
+# name: kp_AH
+# type: scalar
+0.846571595181162
+
+
+# name: kp_opt
+# type: scalar
+0.605525845565654
+
+
+# name: ku
+# type: scalar
+1.75407835279559
+
+
+# name: mu_1
+# type: global scalar
+1
+
+
+# name: mu_2
+# type: global scalar
+10
+
+
+# name: mu_3
+# type: global scalar
+20
+
+
+# name: numP
+# type: scalar
+1
+
+
+# name: phi
+# type: scalar
+180
+
+
+# name: phi_AH
+# type: scalar
+31.39693841431557
+
+
+# name: phi_opt
+# type: scalar
+64.20796755745674
+
+
+# name: st_AH
+# type: bool
+1
+
+
+# name: st_opt
+# type: bool
+1
+
+
+# name: t
+# type: global range
+# base, limit, increment
+0 30 0.05
+
+
+# name: t_AH
+# type: matrix
+# rows: 601
+# columns: 1
+ 0
+ 0.05
+ 0.1
+ 0.15
+ 0.2
+ 0.25
+ 0.3
+ 0.35
+ 0.4
+ 0.45
+ 0.5
+ 0.55
+ 0.6000000000000001
+ 0.65
+ 0.7000000000000001
+ 0.75
+ 0.8
+ 0.8500000000000001
+ 0.9
+ 0.9500000000000001
+ 1
+ 1.05
+ 1.1
+ 1.15
+ 1.2
+ 1.25
+ 1.3
+ 1.35
+ 1.4
+ 1.45
+ 1.5
+ 1.55
+ 1.6
+ 1.65
+ 1.7
+ 1.75
+ 1.8
+ 1.85
+ 1.9
+ 1.95
+ 2
+ 2.05
+ 2.1
+ 2.15
+ 2.2
+ 2.25
+ 2.3
+ 2.35
+ 2.4
+ 2.45
+ 2.5
+ 2.55
+ 2.6
+ 2.65
+ 2.7
+ 2.75
+ 2.8
+ 2.85
+ 2.9
+ 2.95
+ 3
+ 3.05
+ 3.1
+ 3.15
+ 3.2
+ 3.25
+ 3.3
+ 3.35
+ 3.4
+ 3.45
+ 3.5
+ 3.55
+ 3.6
+ 3.65
+ 3.7
+ 3.75
+ 3.8
+ 3.85
+ 3.9
+ 3.95
+ 4
+ 4.05
+ 4.100000000000001
+ 4.15
+ 4.2
+ 4.25
+ 4.3
+ 4.350000000000001
+ 4.4
+ 4.45
+ 4.5
+ 4.55
+ 4.600000000000001
+ 4.65
+ 4.7
+ 4.75
+ 4.800000000000001
+ 4.850000000000001
+ 4.9
+ 4.95
+ 5
+ 5.050000000000001
+ 5.100000000000001
+ 5.15
+ 5.2
+ 5.25
+ 5.300000000000001
+ 5.350000000000001
+ 5.4
+ 5.45
+ 5.5
+ 5.550000000000001
+ 5.600000000000001
+ 5.65
+ 5.7
+ 5.75
+ 5.800000000000001
+ 5.850000000000001
+ 5.9
+ 5.95
+ 6
+ 6.050000000000001
+ 6.100000000000001
+ 6.15
+ 6.2
+ 6.25
+ 6.300000000000001
+ 6.350000000000001
+ 6.4
+ 6.45
+ 6.5
+ 6.550000000000001
+ 6.600000000000001
+ 6.65
+ 6.7
+ 6.75
+ 6.800000000000001
+ 6.850000000000001
+ 6.9
+ 6.95
+ 7
+ 7.050000000000001
+ 7.100000000000001
+ 7.15
+ 7.2
+ 7.25
+ 7.300000000000001
+ 7.350000000000001
+ 7.4
+ 7.45
+ 7.5
+ 7.550000000000001
+ 7.600000000000001
+ 7.65
+ 7.7
+ 7.75
+ 7.800000000000001
+ 7.850000000000001
+ 7.9
+ 7.95
+ 8
+ 8.050000000000001
+ 8.1
+ 8.15
+ 8.200000000000001
+ 8.25
+ 8.300000000000001
+ 8.35
+ 8.4
+ 8.450000000000001
+ 8.5
+ 8.550000000000001
+ 8.6
+ 8.65
+ 8.700000000000001
+ 8.75
+ 8.800000000000001
+ 8.85
+ 8.9
+ 8.950000000000001
+ 9
+ 9.050000000000001
+ 9.1
+ 9.15
+ 9.200000000000001
+ 9.25
+ 9.300000000000001
+ 9.35
+ 9.4
+ 9.450000000000001
+ 9.5
+ 9.550000000000001
+ 9.600000000000001
+ 9.65
+ 9.700000000000001
+ 9.75
+ 9.800000000000001
+ 9.850000000000001
+ 9.9
+ 9.950000000000001
+ 10
+ 10.05
+ 10.1
+ 10.15
+ 10.2
+ 10.25
+ 10.3
+ 10.35
+ 10.4
+ 10.45
+ 10.5
+ 10.55
+ 10.6
+ 10.65
+ 10.7
+ 10.75
+ 10.8
+ 10.85
+ 10.9
+ 10.95
+ 11
+ 11.05
+ 11.1
+ 11.15
+ 11.2
+ 11.25
+ 11.3
+ 11.35
+ 11.4
+ 11.45
+ 11.5
+ 11.55
+ 11.6
+ 11.65
+ 11.7
+ 11.75
+ 11.8
+ 11.85
+ 11.9
+ 11.95
+ 12
+ 12.05
+ 12.1
+ 12.15
+ 12.2
+ 12.25
+ 12.3
+ 12.35
+ 12.4
+ 12.45
+ 12.5
+ 12.55
+ 12.6
+ 12.65
+ 12.7
+ 12.75
+ 12.8
+ 12.85
+ 12.9
+ 12.95
+ 13
+ 13.05
+ 13.1
+ 13.15
+ 13.2
+ 13.25
+ 13.3
+ 13.35
+ 13.4
+ 13.45
+ 13.5
+ 13.55
+ 13.6
+ 13.65
+ 13.7
+ 13.75
+ 13.8
+ 13.85
+ 13.9
+ 13.95
+ 14
+ 14.05
+ 14.1
+ 14.15
+ 14.2
+ 14.25
+ 14.3
+ 14.35
+ 14.4
+ 14.45
+ 14.5
+ 14.55
+ 14.6
+ 14.65
+ 14.7
+ 14.75
+ 14.8
+ 14.85
+ 14.9
+ 14.95
+ 15
+ 15.05
+ 15.1
+ 15.15
+ 15.2
+ 15.25
+ 15.3
+ 15.35
+ 15.4
+ 15.45
+ 15.5
+ 15.55
+ 15.6
+ 15.65
+ 15.7
+ 15.75
+ 15.8
+ 15.85
+ 15.9
+ 15.95
+ 16
+ 16.05
+ 16.1
+ 16.15
+ 16.2
+ 16.25
+ 16.3
+ 16.35
+ 16.4
+ 16.45
+ 16.5
+ 16.55
+ 16.6
+ 16.65
+ 16.7
+ 16.75
+ 16.8
+ 16.85
+ 16.9
+ 16.95
+ 17
+ 17.05
+ 17.1
+ 17.15
+ 17.2
+ 17.25
+ 17.3
+ 17.35
+ 17.4
+ 17.45
+ 17.5
+ 17.55
+ 17.6
+ 17.65
+ 17.7
+ 17.75
+ 17.8
+ 17.85
+ 17.9
+ 17.95
+ 18
+ 18.05
+ 18.1
+ 18.15
+ 18.2
+ 18.25
+ 18.3
+ 18.35
+ 18.4
+ 18.45
+ 18.5
+ 18.55
+ 18.6
+ 18.65
+ 18.7
+ 18.75
+ 18.8
+ 18.85
+ 18.9
+ 18.95
+ 19
+ 19.05
+ 19.1
+ 19.15
+ 19.2
+ 19.25
+ 19.3
+ 19.35
+ 19.4
+ 19.45
+ 19.5
+ 19.55
+ 19.6
+ 19.65
+ 19.7
+ 19.75
+ 19.8
+ 19.85
+ 19.9
+ 19.95
+ 20
+ 20.05
+ 20.1
+ 20.15
+ 20.2
+ 20.25
+ 20.3
+ 20.35
+ 20.4
+ 20.45
+ 20.5
+ 20.55
+ 20.6
+ 20.65
+ 20.7
+ 20.75
+ 20.8
+ 20.85
+ 20.9
+ 20.95
+ 21
+ 21.05
+ 21.1
+ 21.15
+ 21.2
+ 21.25
+ 21.3
+ 21.35
+ 21.4
+ 21.45
+ 21.5
+ 21.55
+ 21.6
+ 21.65
+ 21.7
+ 21.75
+ 21.8
+ 21.85
+ 21.9
+ 21.95
+ 22
+ 22.05
+ 22.1
+ 22.15
+ 22.2
+ 22.25
+ 22.3
+ 22.35
+ 22.4
+ 22.45
+ 22.5
+ 22.55
+ 22.6
+ 22.65
+ 22.7
+ 22.75
+ 22.8
+ 22.85
+ 22.9
+ 22.95
+ 23
+ 23.05
+ 23.1
+ 23.15
+ 23.2
+ 23.25
+ 23.3
+ 23.35
+ 23.4
+ 23.45
+ 23.5
+ 23.55
+ 23.6
+ 23.65
+ 23.7
+ 23.75
+ 23.8
+ 23.85
+ 23.9
+ 23.95
+ 24
+ 24.05
+ 24.1
+ 24.15
+ 24.2
+ 24.25
+ 24.3
+ 24.35
+ 24.4
+ 24.45
+ 24.5
+ 24.55
+ 24.6
+ 24.65
+ 24.7
+ 24.75
+ 24.8
+ 24.85
+ 24.9
+ 24.95
+ 25
+ 25.05
+ 25.1
+ 25.15
+ 25.2
+ 25.25
+ 25.3
+ 25.35
+ 25.4
+ 25.45
+ 25.5
+ 25.55
+ 25.6
+ 25.65
+ 25.7
+ 25.75
+ 25.8
+ 25.85
+ 25.9
+ 25.95
+ 26
+ 26.05
+ 26.1
+ 26.15
+ 26.2
+ 26.25
+ 26.3
+ 26.35
+ 26.4
+ 26.45
+ 26.5
+ 26.55
+ 26.6
+ 26.65
+ 26.7
+ 26.75
+ 26.8
+ 26.85
+ 26.9
+ 26.95
+ 27
+ 27.05
+ 27.1
+ 27.15
+ 27.2
+ 27.25
+ 27.3
+ 27.35
+ 27.4
+ 27.45
+ 27.5
+ 27.55
+ 27.6
+ 27.65
+ 27.7
+ 27.75
+ 27.8
+ 27.85
+ 27.9
+ 27.95
+ 28
+ 28.05
+ 28.1
+ 28.15
+ 28.2
+ 28.25
+ 28.3
+ 28.35
+ 28.4
+ 28.45
+ 28.5
+ 28.55
+ 28.6
+ 28.65
+ 28.7
+ 28.75
+ 28.8
+ 28.85
+ 28.9
+ 28.95
+ 29
+ 29.05
+ 29.1
+ 29.15
+ 29.2
+ 29.25
+ 29.3
+ 29.35
+ 29.4
+ 29.45
+ 29.5
+ 29.55
+ 29.6
+ 29.65
+ 29.7
+ 29.75
+ 29.8
+ 29.85
+ 29.9
+ 29.95
+ 30
+
+
+# name: t_opt
+# type: matrix
+# rows: 601
+# columns: 1
+ 0
+ 0.05
+ 0.1
+ 0.15
+ 0.2
+ 0.25
+ 0.3
+ 0.35
+ 0.4
+ 0.45
+ 0.5
+ 0.55
+ 0.6000000000000001
+ 0.65
+ 0.7000000000000001
+ 0.75
+ 0.8
+ 0.8500000000000001
+ 0.9
+ 0.9500000000000001
+ 1
+ 1.05
+ 1.1
+ 1.15
+ 1.2
+ 1.25
+ 1.3
+ 1.35
+ 1.4
+ 1.45
+ 1.5
+ 1.55
+ 1.6
+ 1.65
+ 1.7
+ 1.75
+ 1.8
+ 1.85
+ 1.9
+ 1.95
+ 2
+ 2.05
+ 2.1
+ 2.15
+ 2.2
+ 2.25
+ 2.3
+ 2.35
+ 2.4
+ 2.45
+ 2.5
+ 2.55
+ 2.6
+ 2.65
+ 2.7
+ 2.75
+ 2.8
+ 2.85
+ 2.9
+ 2.95
+ 3
+ 3.05
+ 3.1
+ 3.15
+ 3.2
+ 3.25
+ 3.3
+ 3.35
+ 3.4
+ 3.45
+ 3.5
+ 3.55
+ 3.6
+ 3.65
+ 3.7
+ 3.75
+ 3.8
+ 3.85
+ 3.9
+ 3.95
+ 4
+ 4.05
+ 4.100000000000001
+ 4.15
+ 4.2
+ 4.25
+ 4.3
+ 4.350000000000001
+ 4.4
+ 4.45
+ 4.5
+ 4.55
+ 4.600000000000001
+ 4.65
+ 4.7
+ 4.75
+ 4.800000000000001
+ 4.850000000000001
+ 4.9
+ 4.95
+ 5
+ 5.050000000000001
+ 5.100000000000001
+ 5.15
+ 5.2
+ 5.25
+ 5.300000000000001
+ 5.350000000000001
+ 5.4
+ 5.45
+ 5.5
+ 5.550000000000001
+ 5.600000000000001
+ 5.65
+ 5.7
+ 5.75
+ 5.800000000000001
+ 5.850000000000001
+ 5.9
+ 5.95
+ 6
+ 6.050000000000001
+ 6.100000000000001
+ 6.15
+ 6.2
+ 6.25
+ 6.300000000000001
+ 6.350000000000001
+ 6.4
+ 6.45
+ 6.5
+ 6.550000000000001
+ 6.600000000000001
+ 6.65
+ 6.7
+ 6.75
+ 6.800000000000001
+ 6.850000000000001
+ 6.9
+ 6.95
+ 7
+ 7.050000000000001
+ 7.100000000000001
+ 7.15
+ 7.2
+ 7.25
+ 7.300000000000001
+ 7.350000000000001
+ 7.4
+ 7.45
+ 7.5
+ 7.550000000000001
+ 7.600000000000001
+ 7.65
+ 7.7
+ 7.75
+ 7.800000000000001
+ 7.850000000000001
+ 7.9
+ 7.95
+ 8
+ 8.050000000000001
+ 8.1
+ 8.15
+ 8.200000000000001
+ 8.25
+ 8.300000000000001
+ 8.35
+ 8.4
+ 8.450000000000001
+ 8.5
+ 8.550000000000001
+ 8.6
+ 8.65
+ 8.700000000000001
+ 8.75
+ 8.800000000000001
+ 8.85
+ 8.9
+ 8.950000000000001
+ 9
+ 9.050000000000001
+ 9.1
+ 9.15
+ 9.200000000000001
+ 9.25
+ 9.300000000000001
+ 9.35
+ 9.4
+ 9.450000000000001
+ 9.5
+ 9.550000000000001
+ 9.600000000000001
+ 9.65
+ 9.700000000000001
+ 9.75
+ 9.800000000000001
+ 9.850000000000001
+ 9.9
+ 9.950000000000001
+ 10
+ 10.05
+ 10.1
+ 10.15
+ 10.2
+ 10.25
+ 10.3
+ 10.35
+ 10.4
+ 10.45
+ 10.5
+ 10.55
+ 10.6
+ 10.65
+ 10.7
+ 10.75
+ 10.8
+ 10.85
+ 10.9
+ 10.95
+ 11
+ 11.05
+ 11.1
+ 11.15
+ 11.2
+ 11.25
+ 11.3
+ 11.35
+ 11.4
+ 11.45
+ 11.5
+ 11.55
+ 11.6
+ 11.65
+ 11.7
+ 11.75
+ 11.8
+ 11.85
+ 11.9
+ 11.95
+ 12
+ 12.05
+ 12.1
+ 12.15
+ 12.2
+ 12.25
+ 12.3
+ 12.35
+ 12.4
+ 12.45
+ 12.5
+ 12.55
+ 12.6
+ 12.65
+ 12.7
+ 12.75
+ 12.8
+ 12.85
+ 12.9
+ 12.95
+ 13
+ 13.05
+ 13.1
+ 13.15
+ 13.2
+ 13.25
+ 13.3
+ 13.35
+ 13.4
+ 13.45
+ 13.5
+ 13.55
+ 13.6
+ 13.65
+ 13.7
+ 13.75
+ 13.8
+ 13.85
+ 13.9
+ 13.95
+ 14
+ 14.05
+ 14.1
+ 14.15
+ 14.2
+ 14.25
+ 14.3
+ 14.35
+ 14.4
+ 14.45
+ 14.5
+ 14.55
+ 14.6
+ 14.65
+ 14.7
+ 14.75
+ 14.8
+ 14.85
+ 14.9
+ 14.95
+ 15
+ 15.05
+ 15.1
+ 15.15
+ 15.2
+ 15.25
+ 15.3
+ 15.35
+ 15.4
+ 15.45
+ 15.5
+ 15.55
+ 15.6
+ 15.65
+ 15.7
+ 15.75
+ 15.8
+ 15.85
+ 15.9
+ 15.95
+ 16
+ 16.05
+ 16.1
+ 16.15
+ 16.2
+ 16.25
+ 16.3
+ 16.35
+ 16.4
+ 16.45
+ 16.5
+ 16.55
+ 16.6
+ 16.65
+ 16.7
+ 16.75
+ 16.8
+ 16.85
+ 16.9
+ 16.95
+ 17
+ 17.05
+ 17.1
+ 17.15
+ 17.2
+ 17.25
+ 17.3
+ 17.35
+ 17.4
+ 17.45
+ 17.5
+ 17.55
+ 17.6
+ 17.65
+ 17.7
+ 17.75
+ 17.8
+ 17.85
+ 17.9
+ 17.95
+ 18
+ 18.05
+ 18.1
+ 18.15
+ 18.2
+ 18.25
+ 18.3
+ 18.35
+ 18.4
+ 18.45
+ 18.5
+ 18.55
+ 18.6
+ 18.65
+ 18.7
+ 18.75
+ 18.8
+ 18.85
+ 18.9
+ 18.95
+ 19
+ 19.05
+ 19.1
+ 19.15
+ 19.2
+ 19.25
+ 19.3
+ 19.35
+ 19.4
+ 19.45
+ 19.5
+ 19.55
+ 19.6
+ 19.65
+ 19.7
+ 19.75
+ 19.8
+ 19.85
+ 19.9
+ 19.95
+ 20
+ 20.05
+ 20.1
+ 20.15
+ 20.2
+ 20.25
+ 20.3
+ 20.35
+ 20.4
+ 20.45
+ 20.5
+ 20.55
+ 20.6
+ 20.65
+ 20.7
+ 20.75
+ 20.8
+ 20.85
+ 20.9
+ 20.95
+ 21
+ 21.05
+ 21.1
+ 21.15
+ 21.2
+ 21.25
+ 21.3
+ 21.35
+ 21.4
+ 21.45
+ 21.5
+ 21.55
+ 21.6
+ 21.65
+ 21.7
+ 21.75
+ 21.8
+ 21.85
+ 21.9
+ 21.95
+ 22
+ 22.05
+ 22.1
+ 22.15
+ 22.2
+ 22.25
+ 22.3
+ 22.35
+ 22.4
+ 22.45
+ 22.5
+ 22.55
+ 22.6
+ 22.65
+ 22.7
+ 22.75
+ 22.8
+ 22.85
+ 22.9
+ 22.95
+ 23
+ 23.05
+ 23.1
+ 23.15
+ 23.2
+ 23.25
+ 23.3
+ 23.35
+ 23.4
+ 23.45
+ 23.5
+ 23.55
+ 23.6
+ 23.65
+ 23.7
+ 23.75
+ 23.8
+ 23.85
+ 23.9
+ 23.95
+ 24
+ 24.05
+ 24.1
+ 24.15
+ 24.2
+ 24.25
+ 24.3
+ 24.35
+ 24.4
+ 24.45
+ 24.5
+ 24.55
+ 24.6
+ 24.65
+ 24.7
+ 24.75
+ 24.8
+ 24.85
+ 24.9
+ 24.95
+ 25
+ 25.05
+ 25.1
+ 25.15
+ 25.2
+ 25.25
+ 25.3
+ 25.35
+ 25.4
+ 25.45
+ 25.5
+ 25.55
+ 25.6
+ 25.65
+ 25.7
+ 25.75
+ 25.8
+ 25.85
+ 25.9
+ 25.95
+ 26
+ 26.05
+ 26.1
+ 26.15
+ 26.2
+ 26.25
+ 26.3
+ 26.35
+ 26.4
+ 26.45
+ 26.5
+ 26.55
+ 26.6
+ 26.65
+ 26.7
+ 26.75
+ 26.8
+ 26.85
+ 26.9
+ 26.95
+ 27
+ 27.05
+ 27.1
+ 27.15
+ 27.2
+ 27.25
+ 27.3
+ 27.35
+ 27.4
+ 27.45
+ 27.5
+ 27.55
+ 27.6
+ 27.65
+ 27.7
+ 27.75
+ 27.8
+ 27.85
+ 27.9
+ 27.95
+ 28
+ 28.05
+ 28.1
+ 28.15
+ 28.2
+ 28.25
+ 28.3
+ 28.35
+ 28.4
+ 28.45
+ 28.5
+ 28.55
+ 28.6
+ 28.65
+ 28.7
+ 28.75
+ 28.8
+ 28.85
+ 28.9
+ 28.95
+ 29
+ 29.05
+ 29.1
+ 29.15
+ 29.2
+ 29.25
+ 29.3
+ 29.35
+ 29.4
+ 29.45
+ 29.5
+ 29.55
+ 29.6
+ 29.65
+ 29.7
+ 29.75
+ 29.8
+ 29.85
+ 29.9
+ 29.95
+ 30
+
+
+# name: t_sim
+# type: scalar
+30
+
+
+# name: w_gamma
+# type: scalar
+0.6482057062116896
+
+
+# name: w_phi
+# type: scalar
+NaN
+
+
+# name: y_AH
+# type: matrix
+# rows: 601
+# columns: 1
+ 0
+ 1.687098435041176e-11
+ 1.762592811836889e-09
+ 2.483913383974933e-08
+ 1.549627947623688e-07
+ 6.20791364277213e-07
+ 1.883954924375331e-06
+ 4.728984393313541e-06
+ 1.034490277755657e-05
+ 2.039434810762801e-05
+ 3.706872164232781e-05
+ 6.312934499169241e-05
+ 0.0001019353803053033
+ 0.0001574596225259848
+ 0.000234293401465818
+ 0.0003376418431104489
+ 0.0004733106937070915
+ 0.0006476858383064071
+ 0.0008677065636424558
+ 0.001140833531586371
+ 0.001475012347760123
+ 0.001878633531995059
+ 0.002360489623863582
+ 0.002929730087687233
+ 0.003595814617173589
+ 0.004368465379991284
+ 0.005257618686945202
+ 0.006273376518736743
+ 0.007425958295361934
+ 0.008725653228794414
+ 0.01018277355851297
+ 0.01180760893146569
+ 0.01361038215302795
+ 0.01560120650323242
+ 0.01779004478285701
+ 0.02018667022669558
+ 0.02280062939635355
+ 0.02564120714206698
+ 0.02871739370220445
+ 0.03203785399014898
+ 0.03561089910105374
+ 0.03944446005540498
+ 0.04354606378230296
+ 0.04792281133278319
+ 0.0525813583022509
+ 0.05752789743109955
+ 0.06276814334374274
+ 0.0683073193785274
+ 0.07415014645423569
+ 0.08030083391305265
+ 0.0867630722749043
+ 0.09354002783389394
+ 0.1006343390241196
+ 0.1080481144793844
+ 0.1157829327091595
+ 0.1238398433115748
+ 0.1322193696431459
+ 0.14092151286435
+ 0.1499457572799974
+ 0.1592910768935681
+ 0.1689559430952517
+ 0.1789383334043138
+ 0.1892357411875784
+ 0.1998451862772256
+ 0.2107632264127363
+ 0.2219859694336389
+ 0.2335090861517019
+ 0.2453278238333429
+ 0.2574370202252816
+ 0.2698311180588043
+ 0.2825041799704461
+ 0.2954499037793794
+ 0.3086616380643445
+ 0.3221323979855202
+ 0.3358548812993249
+ 0.3498214845167291
+ 0.3640243191582495
+ 0.3784552280613643
+ 0.3931058016986362
+ 0.4079673944673421
+ 0.42303114091388
+ 0.4382879718586457
+ 0.4537286303894431
+ 0.4693436876938045
+ 0.4851235587028432
+ 0.5010585175214434
+ 0.5171387126217069
+ 0.5333541817786119
+ 0.5496948667288045
+ 0.5661506275353336
+ 0.5827112566429513
+ 0.5993664926103306
+ 0.6161060335072094
+ 0.6329195499660468
+ 0.6497966978792692
+ 0.6667271307346126
+ 0.6837005115824019
+ 0.7007065246298773
+ 0.7177348864588765
+ 0.7347753568642889
+ 0.7518177493117548
+ 0.7688519410140591
+ 0.7858678826265719
+ 0.8028556075629429
+ 0.8198052409330251
+ 0.8367070081057341
+ 0.8535512429001951
+ 0.8703283954091398
+ 0.8870290394590603
+ 0.903643879712121
+ 0.9201637584152702
+ 0.9365796618023924
+ 0.9528827261556939
+ 0.9690642435328161
+ 0.9851156671664417
+ 1.001028616543385
+ 1.016794882170343
+ 1.032406430033653
+ 1.047855405760514
+ 1.063134138489228
+ 1.078235144456086
+ 1.093151130306565
+ 1.107874996138512
+ 1.122399838284982
+ 1.136718951844389
+ 1.150825832965572
+ 1.164714180895293
+ 1.178377899795658
+ 1.19181110033881
+ 1.20500810108617
+ 1.217963429659361
+ 1.230671823709864
+ 1.243128231694268
+ 1.255327813461882
+ 1.26726594066131
+ 1.278938196972423
+ 1.290340378170039
+ 1.30146849202543
+ 1.31231875805163
+ 1.322887607098342
+ 1.333171680802104
+ 1.343167830897153
+ 1.352873118392328
+ 1.362284812619146
+ 1.371400390156022
+ 1.380217533633467
+ 1.388734130424931
+ 1.396948271227785
+ 1.404858248538809
+ 1.412462555028383
+ 1.419759881817461
+ 1.426749116661232
+ 1.433429342043253
+ 1.439799833183726
+ 1.445860055965419
+ 1.451609664780644
+ 1.457048500302573
+ 1.462176587184064
+ 1.466994131687043
+ 1.471501519245407
+ 1.475699311964305
+ 1.479588246058548
+ 1.483169229232812
+ 1.486443338006241
+ 1.489411814983919
+ 1.492076066077661
+ 1.494437657678463
+ 1.496498313782898
+ 1.498259913075671
+ 1.499724485970504
+ 1.500894211611441
+ 1.501771414836618
+ 1.502358563106524
+ 1.502658263398668
+ 1.502673259070596
+ 1.502406426693104
+ 1.5018607728555
+ 1.501039430944698
+ 1.49994565789993
+ 1.49858283094479
+ 1.496954444298351
+ 1.495064105867014
+ 1.492915533918777
+ 1.490512553741553
+ 1.48785909428716
+ 1.484959184802603
+ 1.481816951450222
+ 1.478436613918288
+ 1.474822482023605
+ 1.47097895230767
+ 1.466910504627921
+ 1.462621698745595
+ 1.458117170911714
+ 1.453401630452694
+ 1.448479856357084
+ 1.44335669386489
+ 1.438037051060989
+ 1.432525895474072
+ 1.426828250682576
+ 1.420949192929068
+ 1.414893847744482
+ 1.408667386583665
+ 1.402275023473631
+ 1.395722011675936
+ 1.389013640364563
+ 1.382155231320701
+ 1.375152135645797
+ 1.368009730494228
+ 1.360733415826955
+ 1.353328611187479
+ 1.34580075250143
+ 1.338155288901083
+ 1.330397679576106
+ 1.322533390651798
+ 1.314567892096092
+ 1.306506654656546
+ 1.298355146828562
+ 1.290118831856022
+ 1.281803164765535
+ 1.273413589435458
+ 1.264955535700831
+ 1.256434416495348
+ 1.24785562503147
+ 1.239224532019752
+ 1.230546482928431
+ 1.22182679528432
+ 1.213070756015989
+ 1.204283618840234
+ 1.195470601692768
+ 1.186636884204069
+ 1.177787605221274
+ 1.168927860376997
+ 1.160062699705907
+ 1.151197125309872
+ 1.142336089072464
+ 1.133484490423565
+ 1.1246471741548
+ 1.115828928286492
+ 1.107034481986787
+ 1.09826850354359
+ 1.0895355983899
+ 1.080840307183105
+ 1.072187103938783
+ 1.06358039421949
+ 1.055024513379008
+ 1.046523724862492
+ 1.038082218562907
+ 1.029704109234125
+ 1.021393434961015
+ 1.013154155686826
+ 1.004990151798124
+ 0.9969052227675322
+ 0.9889030858544485
+ 0.9809873748639296
+ 0.9731616389638602
+ 0.9654293415605164
+ 0.9577938592325803
+ 0.9502584807236509
+ 0.9428264059932429
+ 0.9355007453262481
+ 0.9282845185007935
+ 0.9211806540144024
+ 0.9141919883683307
+ 0.9073212654099204
+ 0.900571135732782
+ 0.8939441561345822
+ 0.887442789132195
+ 0.8810694025339247
+ 0.8748262690685025
+ 0.8687155660705089
+ 0.8627393752218617
+ 0.8568996823489688
+ 0.851198377275125
+ 0.8456372537277042
+ 0.8402180092996634
+ 0.8349422454648647
+ 0.8298114676466771
+ 0.8248270853393093
+ 0.8199904122812932
+ 0.8153026666805145
+ 0.8107649714901654
+ 0.8063783547349704
+ 0.8021437498870115
+ 0.7980619962904635
+ 0.79413383963452
+ 0.7903599324737832
+ 0.7867408347953537
+ 0.7832770146318552
+ 0.779968848719596
+ 0.7768166232010623
+ 0.7738205343709108
+ 0.7709806894646216
+ 0.7682971074889473
+ 0.7657697200932875
+ 0.7633983724810952
+ 0.7611828243604137
+ 0.7591227509326265
+ 0.7572177439184892
+ 0.755467312620505
+ 0.7538708850206876
+ 0.7524278089127489
+ 0.7511373530677399
+ 0.74999870843216
+ 0.749010989357542
+ 0.7481732348605172
+ 0.7474844099123515
+ 0.7469434067569375
+ 0.7465490462562266
+ 0.7463000792620738
+ 0.7461951880134658
+ 0.7462329875580996
+ 0.7464120271972744
+ 0.7467307919530557
+ 0.7471877040566702
+ 0.7477811244570883
+ 0.7485093543487468
+ 0.7493706367173724
+ 0.7503631579028528
+ 0.7514850491781196
+ 0.7527343883429959
+ 0.7541092013319656
+ 0.7556074638348348
+ 0.7572271029292409
+ 0.7589659987239833
+ 0.7608219860121493
+ 0.7627928559330091
+ 0.7648763576416656
+ 0.7670701999854497
+ 0.7693720531860512
+ 0.7717795505263927
+ 0.7742902900412512
+ 0.7769018362106491
+ 0.7796117216550386
+ 0.7824174488313104
+ 0.7853164917286765
+ 0.7883062975634753
+ 0.7913842884719643
+ 0.7945478632001757
+ 0.797794398789915
+ 0.801121252260006
+ 0.8045257622818833
+ 0.8080052508486558
+ 0.8115570249367741
+ 0.8151783781594442
+ 0.8188665924109508
+ 0.8226189395010584
+ 0.8264326827786773
+ 0.8303050787439961
+ 0.8342333786482932
+ 0.8382148300806591
+ 0.8422466785408737
+ 0.8463261689976947
+ 0.8504505474318415
+ 0.8546170623629534
+ 0.858822966359843
+ 0.8630655175333574
+ 0.8673419810111948
+ 0.8716496303940309
+ 0.8759857491923281
+ 0.8803476322432198
+ 0.8847325871068776
+ 0.88913793544179
+ 0.8935610143583889
+ 0.8979991777504931
+ 0.9024497976040429
+ 0.9069102652826219
+ 0.9113779927892829
+ 0.9158504140042131
+ 0.9203249858977813
+ 0.924799189718547
+ 0.9292705321558112
+ 0.9337365464763203
+ 0.9381947936347401
+ 0.9426428633575532
+ 0.9470783752000316
+ 0.9514989795759714
+ 0.9559023587598798
+ 0.960286227861341
+ 0.9646483357712866
+ 0.9689864660799303
+ 0.9732984379661339
+ 0.9775821070580001
+ 0.9818353662644923
+ 0.9860561465779148
+ 0.9902424178470948
+ 0.9943921895211261
+ 0.9985035113635583
+ 1.002574474136927
+ 1.006603210257539
+ 1.010587894420451
+ 1.01452674419458
+ 1.018418020587929
+ 1.022260028582893
+ 1.026051117641668
+ 1.029789682181761
+ 1.033474162021641
+ 1.037103042796596
+ 1.04067485634484
+ 1.044188181063962
+ 1.04764164223783
+ 1.051033912334033
+ 1.054363711272019
+ 1.057629806662061
+ 1.060831014015204
+ 1.063966196924378
+ 1.067034267216863
+ 1.070034185078301
+ 1.072964959148474
+ 1.075825646589085
+ 1.078615353123774
+ 1.081333233050629
+ 1.083978489227468
+ 1.086550373030158
+ 1.089048184284277
+ 1.09147127117042
+ 1.093819030103471
+ 1.096090905586155
+ 1.098286390037225
+ 1.100405023594628
+ 1.102446393894014
+ 1.104410135822946
+ 1.106295931251213
+ 1.108103508737616
+ 1.109832643213636
+ 1.111483155644398
+ 1.11305491266733
+ 1.114547826208962
+ 1.115961853080283
+ 1.117296994551106
+ 1.118553295903886
+ 1.11973084596744
+ 1.120829776631048
+ 1.121850262339371
+ 1.122792519568704
+ 1.123656806285002
+ 1.124443421384185
+ 1.125152704115214
+ 1.125785033486424
+ 1.126340827655613
+ 1.126820543304399
+ 1.127224674997337
+ 1.127553754526332
+ 1.127808350240824
+ 1.127989066364302
+ 1.12809654229763
+ 1.128131451909729
+ 1.12809450281613
+ 1.127986435645925
+ 1.127808023297626
+ 1.127560070184488
+ 1.127243411469795
+ 1.12685891229265
+ 1.126407466984794
+ 1.125889998278978
+ 1.125307456509423
+ 1.124660818804878
+ 1.123951088274819
+ 1.123179293189296
+ 1.122346486152959
+ 1.121453743273782
+ 1.120502163326992
+ 1.119492866914732
+ 1.118426995621961
+ 1.1173057111691
+ 1.116130194561933
+ 1.114901645239259
+ 1.113621280218804
+ 1.112290333241876
+ 1.110910053917254
+ 1.10948170686481
+ 1.108006570859322
+ 1.106485937974976
+ 1.10492111273101
+ 1.103313411238983
+ 1.101664160352107
+ 1.099974696817115
+ 1.098246366429108
+ 1.096480523189809
+ 1.094678528469689
+ 1.092841750174358
+ 1.090971561915673
+ 1.089069342187961
+ 1.087136473549777
+ 1.085174341811587
+ 1.083184335229776
+ 1.081167843707371
+ 1.079126258001848
+ 1.077060968940407
+ 1.074973366643063
+ 1.07286483975392
+ 1.070736774680973
+ 1.068590554844772
+ 1.066427559936282
+ 1.064249165184262
+ 1.062056740632474
+ 1.059851650427027
+ 1.057635252114155
+ 1.055408895948715
+ 1.053173924213678
+ 1.050931670550894
+ 1.048683459303383
+ 1.046430604869401
+ 1.044174411068534
+ 1.041916170520048
+ 1.039657164033714
+ 1.037398660013329
+ 1.03514191387314
+ 1.032888167467358
+ 1.030638648532969
+ 1.028394570145988
+ 1.026157130191361
+ 1.023927510846645
+ 1.021706878079633
+ 1.019496381160056
+ 1.0172971521855
+ 1.015110305621653
+ 1.012936937857002
+ 1.010778126772079
+ 1.008634931323353
+ 1.006508391141851
+ 1.004399526146587
+ 1.002309336172869
+ 1.000238800615529
+ 0.9981888780871464
+ 0.9961605060912904
+ 0.9941546007108117
+ 0.9921720563112212
+ 0.9902137452591534
+ 0.9882805176559332
+ 0.9863732010862361
+ 0.9844926003818322
+ 0.9826394974003981
+ 0.9808146508193644
+ 0.9790187959447668
+ 0.977252644535055
+ 0.9755168846398091
+ 0.9738121804533041
+ 0.9721391721828536
+ 0.9704984759318616
+ 0.9688906835974953
+ 0.9673163627828971
+ 0.9657760567238292
+ 0.9642702842296555
+ 0.9627995396385473
+ 0.9613642927867923
+ 0.9599649889920884
+ 0.9586020490506858
+ 0.9572758692482461
+ 0.9559868213842675
+ 0.954735252809935
+ 0.9535214864792328
+ 0.9523458210131615
+ 0.9512085307768907
+ 0.9501098659696787
+ 0.9490500527273741
+ 0.9480292932373214
+ 0.9470477658654821
+ 0.9461056252955748
+ 0.9452030026800378
+ 0.9443400058026123
+ 0.9435167192523407
+ 0.9427332046087603
+ 0.9419895006380891
+ 0.9412856235001745
+ 0.9406215669659845
+ 0.9399973026454167
+ 0.9394127802251908
+ 0.9388679277165927
+ 0.9383626517128353
+ 0.9378968376557898
+ 0.9374703501118536
+ 0.9370830330567003
+ 0.9367347101686696
+ 0.9364251851305467
+ 0.9361542419394752
+ 0.9359216452247511
+ 0.9357271405732431
+ 0.9355704548621792
+ 0.9354512965990393
+ 0.9353693562682955
+ 0.9353243066847362
+ 0.9353158033531107
+ 0.9353434848338315
+ 0.9354069731144681
+ 0.93550587398677
+ 0.935639777428946
+ 0.9358082579929439
+ 0.9360108751964545
+ 0.9362471739193825
+ 0.9365166848045094
+ 0.9368189246620917
+ 0.9371533968781218
+ 0.9375195918259925
+ 0.9379169872812975
+ 0.9383450488395062
+ 0.9388032303362529
+ 0.939290974269975
+ 0.9398077122266471
+ 0.9403528653063457
+ 0.9409258445513955
+ 0.941526051375836
+
+
+# name: y_opt
+# type: matrix
+# rows: 601
+# columns: 1
+ 0
+ 8.354783498726138e-12
+ 9.230226583754954e-10
+ 1.367237371013527e-08
+ 8.917343257190273e-08
+ 3.716712185197994e-07
+ 1.168484152022217e-06
+ 3.026913971063492e-06
+ 6.810276799104703e-06
+ 1.376720350363142e-05
+ 2.559050225541717e-05
+ 4.446361595196161e-05
+ 7.309398386925997e-05
+ 0.0001147334883461923
+ 0.0001731867227412064
+ 0.0002528081419857187
+ 0.0003584893220036596
+ 0.0004956376121735757
+ 0.0006701474540875041
+ 0.000888365586656117
+ 0.001157051280068725
+ 0.00148333265108637
+ 0.001874660017265783
+ 0.002338757152779788
+ 0.002883571216429221
+ 0.00351722203491431
+ 0.004247951342339291
+ 0.005084072500650072
+ 0.006033921155327065
+ 0.00710580721606093
+ 0.008307968493105482
+ 0.009648526266246949
+ 0.01113544301454131
+ 0.01277648249083131
+ 0.01457917228524432
+ 0.01655076898608275
+ 0.01869822601445498
+ 0.02102816418037576
+ 0.0235468449826264
+ 0.02626014665215722
+ 0.02917354291900438
+ 0.03229208446536171
+ 0.03562038301239067
+ 0.03916259797537757
+ 0.04292242561077839
+ 0.04690309056936139
+ 0.05110733976191238
+ 0.05553743843766176
+ 0.06019516837059315
+ 0.06508182804497535
+ 0.0701982347287068
+ 0.07554472832126834
+ 0.08112117686214315
+ 0.08692698358539533
+ 0.09296109540660806
+ 0.09922201272949839
+ 0.1057078004611661
+ 0.1124161001270413
+ 0.1193441429790987
+ 0.1264887639937556
+ 0.1338464166590125
+ 0.1414131884537744
+ 0.1491848169258795
+ 0.1571567062791031
+ 0.1653239443832721
+ 0.1736813201255887
+ 0.1822233410252775
+ 0.190944251037732
+ 0.1998380484783996
+ 0.2088985040007027
+ 0.2181191785663198
+ 0.2274934413501296
+ 0.2370144875260407
+ 0.2466753558837732
+ 0.2564689462304136
+ 0.2663880365342285
+ 0.276425299771779
+ 0.2865733204428215
+ 0.2968246107208143
+ 0.3071716262100505
+ 0.3176067812835275
+ 0.3281224639786114
+ 0.3387110504303831
+ 0.3493649188252488
+ 0.3600764628599579
+ 0.3708381046936077
+ 0.3816423073825184
+ 0.3924815867900338
+ 0.4033485229653582
+ 0.4142357709874612
+ 0.4251360712718876
+ 0.4360422593399935
+ 0.4469472750517
+ 0.4578441713043138
+ 0.4687261222013105
+ 0.4795864306962213
+ 0.4904185357179028
+ 0.5012160187845198
+ 0.511972610114513
+ 0.522682194243692
+ 0.5333388151583646
+ 0.5439366809551066
+ 0.5544701680383948
+ 0.5649338248678623
+ 0.5753223752674093
+ 0.5856307213088067
+ 0.5958539457827696
+ 0.6059873142707646
+ 0.6160262768310338
+ 0.6259664693125073
+ 0.6358037143103856
+ 0.6455340217772687
+ 0.6551535893037382
+ 0.6646588020823028
+ 0.674046232568578
+ 0.6833126398535024
+ 0.6924549687602903
+ 0.7014703486796899
+ 0.7103560921569632
+ 0.719109693243822
+ 0.7277288256283587
+ 0.7362113405557844
+ 0.7445552645525576
+ 0.7527587969662299
+ 0.7608203073330748
+ 0.7687383325852826
+ 0.7765115741092264
+ 0.7841388946660017
+ 0.7916193151851404
+ 0.7989520114420955
+ 0.8061363106297803
+ 0.8131716878341183
+ 0.8200577624232581
+ 0.8267942943597724
+ 0.8333811804448492
+ 0.8398184505031537
+ 0.8461062635167312
+ 0.8522449037159894
+ 0.8582347766354952
+ 0.864076405142002
+ 0.8697704254418169
+ 0.8753175830743094
+ 0.880718728898065
+ 0.8859748150758943
+ 0.8910868910646067
+ 0.8960560996151888
+ 0.9008836727887291
+ 0.9055709279931734
+ 0.9101192640457221
+ 0.9145301572654093
+ 0.9188051576001679
+ 0.9229458847924187
+ 0.9269540245869909
+ 0.9308313249849394
+ 0.9345795925465992
+ 0.9382006887469964
+ 0.9416965263865129
+ 0.9450690660595038
+ 0.9483203126833546
+ 0.9514523120902767
+ 0.9544671476839444
+ 0.9573669371629047
+ 0.9601538293124982
+ 0.9628300008668784
+ 0.9653976534425389
+ 0.9678590105446043
+ 0.9702163146469946
+ 0.9724718243474183
+ 0.9746278115980145
+ 0.9766865590123304
+ 0.9786503572491869
+ 0.9805215024738684
+ 0.9823022938969481
+ 0.9839950313909509
+ 0.9856020131849487
+ 0.9871255336370724
+ 0.98856788108484
+ 0.9899313357730909
+ 0.9912181678592407
+ 0.9924306354954753
+ 0.9935709829874314
+ 0.9946414390288271
+ 0.9956442150114385
+ 0.9965815034097476
+ 0.9974554762395216
+ 0.9982682835895277
+ 0.9990220522255204
+ 0.999718884265596
+ 1.000360855925949
+ 1.000950016336024
+ 1.001488386422008
+ 1.001977957857573
+ 1.002420692080731
+ 1.002818519375643
+ 1.003173338018173
+ 1.003487013483962
+ 1.003761377717771
+ 1.003998228462802
+ 1.004199328648698
+ 1.004366405836906
+ 1.004501151722045
+ 1.004605221687944
+ 1.004680234416964
+ 1.004727771551231
+ 1.004749377404389
+ 1.00474655872247
+ 1.004720784492489
+ 1.004673485797347
+ 1.004606055715634
+ 1.004519849264927
+ 1.004416183387165
+ 1.004296336974712
+ 1.004161550935682
+ 1.004013028297144
+ 1.003851934344813
+ 1.003679396797849
+ 1.003496506017372
+ 1.003304315247352
+ 1.00310384088651
+ 1.002896062789883
+ 1.00268192459875
+ 1.002462334097573
+ 1.002238163596686
+ 1.002010250339432
+ 1.001779396932496
+ 1.00154637179817
+ 1.001311909647344
+ 1.001076711971998
+ 1.000841447556001
+ 1.000606753003072
+ 1.000373233280718
+ 1.000141462279061
+ 0.999911983383409
+ 0.999685310059522
+ 0.9994619264504879
+ 0.9992422879841836
+ 0.9990268219902994
+ 0.998815928325941
+ 0.9986099800088383
+ 0.9984093238572179
+ 0.9982142811354255
+ 0.9980251482043975
+ 0.9978421971761136
+ 0.9976656765711909
+ 0.9974958119787916
+ 0.9973328067180539
+ 0.9971768425002749
+ 0.9970280800910979
+ 0.9968866599719867
+ 0.9967527030002874
+ 0.9966263110672099
+ 0.9965075677530797
+ 0.9963965389792399
+ 0.996293273656006
+ 0.9961978043260968
+ 0.9961101478029969
+ 0.996030305803721
+ 0.9959582655754806
+ 0.9958940005157728
+ 0.9958374707854379
+ 0.9957886239142506
+ 0.9957473953986373
+ 0.9957137092911286
+ 0.9956874787811855
+ 0.9956686067670524
+ 0.9956569864183129
+ 0.9956525017288507
+ 0.9956550280599293
+ 0.9956644326731349
+ 0.9956805752529357
+ 0.9957033084186416
+ 0.9957324782255553
+ 0.9957679246551384
+ 0.9958094820940181
+ 0.9958569798016959
+ 0.9959102423668194
+ 0.9959690901519086
+ 0.9960333397264391
+ 0.9961028042882009
+ 0.9961772940728648
+ 0.9962566167517137
+ 0.9963405778174947
+ 0.9964289809583791
+ 0.9965216284200161
+ 0.9966183213556943
+ 0.9967188601646243
+ 0.9968230448183769
+ 0.9969306751755205
+ 0.9970415512845162
+ 0.9971554736749321
+ 0.9972722436370598
+ 0.9973916634900178
+ 0.9975135368384414
+ 0.9976376688178659
+ 0.997763866328921
+ 0.9978919382604572
+ 0.9980216957017424
+ 0.9981529521438676
+ 0.9982855236705072
+ 0.9984192291381961
+ 0.9985538903462763
+ 0.9986893321966877
+ 0.9988253828437754
+ 0.9989618738342894
+ 0.9990986402377643
+ 0.9992355207674652
+ 0.9993723578920951
+ 0.9995089979384558
+ 0.9996452911852681
+ 0.9997810919483529
+ 0.999916258657377
+ 1.000050653924375
+ 1.000184144604257
+ 1.000316601847521
+ 1.00044790114537
+ 1.000577922367471
+ 1.00070654979255
+ 1.00083367213206
+ 1.000959182547128
+ 1.001082978659008
+ 1.001204962553245
+ 1.00132504077779
+ 1.00144312433526
+ 1.001559128669574
+ 1.001672973647182
+ 1.001784583533089
+ 1.001893886961905
+ 1.002000816904113
+ 1.002105310627787
+ 1.002207309655946
+ 1.002306759719771
+ 1.002403610707865
+ 1.002497816611786
+ 1.002589335468026
+ 1.002678129296641
+ 1.002764164036738
+ 1.002847409478985
+ 1.00292783919535
+ 1.003005430466247
+ 1.003080164205267
+ 1.003152024881676
+ 1.003221000440847
+ 1.003287082222808
+ 1.003350264879054
+ 1.003410546287811
+ 1.003467927467882
+ 1.003522412491257
+ 1.00357400839462
+ 1.003622725089909
+ 1.003668575274071
+ 1.003711574338152
+ 1.00375174027585
+ 1.00378909359168
+ 1.003823657208861
+ 1.003855456377054
+ 1.003884518580073
+ 1.003910873443687
+ 1.003934552643611
+ 1.00395558981381
+ 1.003974020455207
+ 1.003989881844902
+ 1.004003212945986
+ 1.00401405431806
+ 1.004022448028526
+ 1.004028437564743
+ 1.004032067747134
+ 1.004033384643303
+ 1.004032435483249
+ 1.004029268575739
+ 1.004023933225902
+ 1.00401647965411
+ 1.004006958916197
+ 1.003995422825081
+ 1.00398192387382
+ 1.003966515160172
+ 1.003949250312676
+ 1.003930183418327
+ 1.003909368951844
+ 1.003886861706598
+ 1.003862716727206
+ 1.003836989243839
+ 1.003809734608248
+ 1.003781008231549
+ 1.003750865523767
+ 1.003719361835176
+ 1.00368655239943
+ 1.003652492278502
+ 1.003617236309445
+ 1.003580839052974
+ 1.003543354743876
+ 1.003504837243242
+ 1.003465339992539
+ 1.003424915969484
+ 1.003383617645763
+ 1.003341496946537
+ 1.003298605211764
+ 1.00325499315931
+ 1.003210710849831
+ 1.003165807653429
+ 1.003120332218044
+ 1.003074332439589
+ 1.003027855433784
+ 1.002980947509686
+ 1.002933654144889
+ 1.002886019962363
+ 1.002838088708918
+ 1.002789903235268
+ 1.002741505477656
+ 1.002692936441023
+ 1.002644236183694
+ 1.002595443803545
+ 1.002546597425623
+ 1.002497734191193
+ 1.002448890248171
+ 1.002400100742922
+ 1.002351399813383
+ 1.002302820583479
+ 1.002254395158801
+ 1.002206154623509
+ 1.002158129038426
+ 1.002110347440294
+ 1.002062837842145
+ 1.002015627234769
+ 1.001968741589226
+ 1.001922205860378
+ 1.001876043991406
+ 1.00183027891927
+ 1.001784932581077
+ 1.001740025921337
+ 1.001695578900044
+ 1.001651610501574
+ 1.001608138744353
+ 1.001565180691255
+ 1.001522752460712
+ 1.001480869238481
+ 1.00143954529006
+ 1.001398793973689
+ 1.001358627753932
+ 1.001319058215789
+ 1.001280096079312
+ 1.001241751214695
+ 1.0012040326578
+ 1.001166948626099
+ 1.00113050653499
+ 1.001094713014466
+ 1.001059573926102
+ 1.00102509438034
+ 1.00099127875403
+ 1.000958130708211
+ 1.000925653206105
+ 1.000893848531287
+ 1.000862718306024
+ 1.000832263509731
+ 1.000802484497552
+ 1.000773381019014
+ 1.000744952236749
+ 1.000717196745254
+ 1.000690112589663
+ 1.000663697284528
+ 1.000637947832565
+ 1.000612860743359
+ 1.00058843205201
+ 1.000564657337697
+ 1.00054153174214
+ 1.00051904998795
+ 1.000497206396845
+ 1.000475994907724
+ 1.000455409094565
+ 1.000435442184165
+ 1.000416087073673
+ 1.000397336347923
+ 1.000379182296563
+ 1.000361616930934
+ 1.000344632000734
+ 1.000328219010412
+ 1.000312369235314
+ 1.00029707373756
+ 1.000282323381635
+ 1.000268108849706
+ 1.000254420656634
+ 1.000241249164695
+ 1.00022858459799
+ 1.000216417056545
+ 1.000204736530084
+ 1.000193532911496
+ 1.000182796009959
+ 1.00017251556374
+ 1.000162681252664
+ 1.000153282710237
+ 1.000144309535437
+ 1.000135751304164
+ 1.000127597580337
+ 1.000119837926661
+ 1.00011246191504
+ 1.000105459136647
+ 1.000098819211653
+ 1.000092531798603
+ 1.000086586603461
+ 1.000080973388303
+ 1.000075681979671
+ 1.000070702276594
+ 1.000066024258267
+ 1.000061637991395
+ 1.000057533637213
+ 1.000053701458171
+ 1.000050131824295
+ 1.000046815219236
+ 1.000043742245983
+ 1.000040903632285
+ 1.000038290235747
+ 1.000035893048627
+ 1.000033703202339
+ 1.00003171197165
+ 1.000029910778597
+ 1.000028291196113
+ 1.000026844951376
+ 1.000025563928884
+ 1.000024440173262
+ 1.000023465891801
+ 1.00002263345675
+ 1.00002193540735
+ 1.000021364451623
+ 1.000020913467923
+ 1.000020575506258
+ 1.000020343789378
+ 1.00002021171365
+ 1.000020172849714
+ 1.000020220942931
+ 1.000020349913634
+ 1.000020553857181
+ 1.000020827043817
+ 1.000021163918358
+ 1.000021559099696
+ 1.000022007380133
+ 1.000022503724558
+ 1.000023043269462
+ 1.000023621321798
+ 1.000024233357707
+ 1.000024875021098
+ 1.000025542122096
+ 1.000026230635369
+ 1.000026936698325
+ 1.000027656609209
+ 1.000028386825078
+ 1.000029123959684
+ 1.000029864781248
+ 1.000030606210159
+ 1.000031345316574
+ 1.000032079317943
+ 1.000032805576461
+ 1.000033521596446
+ 1.000034225021661
+ 1.000034913632565
+ 1.00003558534352
+ 1.000036238199947
+ 1.000036870375432
+ 1.000037480168799
+ 1.000038066001145
+ 1.000038626412841
+ 1.000039160060517
+ 1.000039665714011
+ 1.000040142253312
+ 1.00004058866548
+ 1.000041004041564
+ 1.000041387573505
+ 1.000041738551045
+ 1.000042056358631
+ 1.000042340472321
+ 1.000042590456711
+ 1.000042805961851
+ 1.000042986720196
+ 1.00004313254356
+ 1.000043243320095
+ 1.000043319011291
+ 1.000043359649002
+ 1.000043365332497
+ 1.00004333622554
+ 1.000043272553508
+ 1.000043174600537
+ 1.000043042706704
+ 1.000042877265249
+ 1.000042678719842
+ 1.00004244756188
+ 1.000042184327834
+ 1.000041889596643
+ 1.000041563987149
+ 1.000041208155583
+ 1.000040822793095
+ 1.000040408623339
+ 1.000039966400105
+ 1.000039496905005
+ 1.000039000945208
+ 1.000038479351236
+ 1.000037932974803
+ 1.000037362686714
+ 1.000036769374825
+ 1.000036153942044
+ 1.000035517304404
+ 1.000034860389179
+ 1.000034184133062
+ 1.000033489480401
+
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|