From: <par...@us...> - 2010-10-09 09:39:27
|
Revision: 7824 http://octave.svn.sourceforge.net/octave/?rev=7824&view=rev Author: paramaniac Date: 2010-10-09 09:39:21 +0000 (Sat, 09 Oct 2010) Log Message: ----------- control: more work on frd models Modified Paths: -------------- trunk/octave-forge/main/control/devel/@frd/__transpose__.m trunk/octave-forge/main/control/devel/__frd_dim__.m trunk/octave-forge/main/control/devel/frd_test.m Added Paths: ----------- trunk/octave-forge/main/control/devel/@frd/__sys_inverse__.m Added: trunk/octave-forge/main/control/devel/@frd/__sys_inverse__.m =================================================================== --- trunk/octave-forge/main/control/devel/@frd/__sys_inverse__.m (rev 0) +++ trunk/octave-forge/main/control/devel/@frd/__sys_inverse__.m 2010-10-09 09:39:21 UTC (rev 7824) @@ -0,0 +1,35 @@ +## Copyright (C) 2010 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## LTI Syncope is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## Inversion of FRD models. + +## Author: Lukas Reichlin <luk...@gm...> +## Created: October 2010 +## Version: 0.1 + +function sys = __sys_inverse__ (sys) + + [p, m, l] = size (sys.H); + + H = mat2cell (sys.H, p, m, ones (1, l))(:); + + H = cellfun (@inv, H, "uniformoutput", false); + + sys.H = cat (3, H{:}); + +endfunction \ No newline at end of file Modified: trunk/octave-forge/main/control/devel/@frd/__transpose__.m =================================================================== --- trunk/octave-forge/main/control/devel/@frd/__transpose__.m 2010-10-09 08:15:33 UTC (rev 7823) +++ trunk/octave-forge/main/control/devel/@frd/__transpose__.m 2010-10-09 09:39:21 UTC (rev 7824) @@ -24,12 +24,12 @@ function sys = __transpose__ (sys) - H = sys.H; + [p, m, l] = size (sys.H); - for k = 1 : size (H, 3) - H(:, :, k) = H(:, :, k).' - endfor + H = mat2cell (sys.H, p, m, ones (1, l))(:); - sys.H = H; + H = cellfun (@transpose, H, "uniformoutput", false); + sys.H = cat (3, H{:}); + endfunction \ No newline at end of file Modified: trunk/octave-forge/main/control/devel/__frd_dim__.m =================================================================== --- trunk/octave-forge/main/control/devel/__frd_dim__.m 2010-10-09 08:15:33 UTC (rev 7823) +++ trunk/octave-forge/main/control/devel/__frd_dim__.m 2010-10-09 09:39:21 UTC (rev 7824) @@ -33,13 +33,13 @@ error ("frd: w must be a vector of positive real numbers"); endif - if (isempty (H)) - p = m = l = 0; - else - [p, m, l] = size (H); + lw = length (w); + + if (lw > 1 && (! issorted (w) || w(1) >= w(end) || length (unique (w)) != lw)) + error ("frd: vector w must contain unique frequencies in ascending order"); endif - lw = length (w); + [p, m, l] = size (H); if (l != lw) error ("frd: H (%dx%dx%d) and w (%d) must have equal length", Modified: trunk/octave-forge/main/control/devel/frd_test.m =================================================================== --- trunk/octave-forge/main/control/devel/frd_test.m 2010-10-09 08:15:33 UTC (rev 7823) +++ trunk/octave-forge/main/control/devel/frd_test.m 2010-10-09 09:39:21 UTC (rev 7824) @@ -40,7 +40,12 @@ sigma (P_frd, [], 3) +sys1 = frd (reshape (1:60, 3, 4, []), 1:5) +sys1.' +sys2 = frd (reshape (1:45, 3, 3, []), 1:5) +inv (sys2) + %{ P = frd ((1:45)*(1-2i), logspace (-2,3,45)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |