From: <par...@us...> - 2010-10-09 19:06:27
|
Revision: 7831 http://octave.svn.sourceforge.net/octave/?rev=7831&view=rev Author: paramaniac Date: 2010-10-09 19:06:20 +0000 (Sat, 09 Oct 2010) Log Message: ----------- control: complete frd model interconnections Modified Paths: -------------- trunk/octave-forge/main/control/devel/@frd/__sys_group__.m trunk/octave-forge/main/control/devel/@frd/frd.m trunk/octave-forge/main/control/devel/test_frd.m Modified: trunk/octave-forge/main/control/devel/@frd/__sys_group__.m =================================================================== --- trunk/octave-forge/main/control/devel/@frd/__sys_group__.m 2010-10-09 13:43:42 UTC (rev 7830) +++ trunk/octave-forge/main/control/devel/@frd/__sys_group__.m 2010-10-09 19:06:20 UTC (rev 7831) @@ -43,29 +43,36 @@ [p1, m1, l1] = size (sys1.H); [p2, m2, l2] = size (sys2.H); + ## TODO: tolerances for frequencies, i.e. don't check for equality - if (lw1 == lw2 && all (sys1.w == sys2.w)) + ## find intersection of frequency vectors + if (lw1 == lw2 && all (sys1.w == sys2.w)) # identical frequency vectors retsys.w = sys1.w; - else - retsys.w = intersect (sys1.w, sys2.w); + H1 = sys1.H; + H2 = sys2.H; + else # differing frequency vectors + ## find common frequencies + retsys.w = w = intersect (sys1.w, sys2.w); + w = num2cell (w); + + ## indices of common frequencies + w1_idx = cellfun (@(x) find (sys1.w == x), w); + w2_idx = cellfun (@(x) find (sys2.w == x), w); + + ## extract common responses + H1 = sys1.H(:, :, w1_idx); + H2 = sys2.H(:, :, w2_idx); endif - % l filtern - H1 = sys1.H(:, :, w1_idx); - H2 = sys2.H(:, :, w2_idx); - + ## block-diagonal concatenation + lw = length (retsys.w); z12 = zeros (p1, m2); z21 = zeros (p2, m1); + H1 = mat2cell (H1, p1, m1, ones (1, lw))(:); + H2 = mat2cell (H2, p2, m2, ones (1, lw))(:); -% H1 = mat2cell (H1, p1, m1, ones (1, l))(:); -% H2 = mat2cell (H2, p2, m2, ones (1, l))(:); - H1 = mat2cell (H1, p1, m1, ones (1, l1))(:); - H2 = mat2cell (H2, p2, m2, ones (1, l2))(:); - H = cellfun (@(x, y) [x, z12; z21, y], H1, H2, "uniformoutput", false); retsys.H = cat (3, H{:}); -% welche indices von H1, H2 ? --> vorher ausmisten - endfunction \ No newline at end of file Modified: trunk/octave-forge/main/control/devel/@frd/frd.m =================================================================== --- trunk/octave-forge/main/control/devel/@frd/frd.m 2010-10-09 13:43:42 UTC (rev 7830) +++ trunk/octave-forge/main/control/devel/@frd/frd.m 2010-10-09 19:06:20 UTC (rev 7831) @@ -82,7 +82,7 @@ ltisys = lti (p, m, tsam); sys = class (frdata, "frd", ltisys); -sys.lti.tsam + if (argc > 0) sys = set (sys, varargin{:}); endif Modified: trunk/octave-forge/main/control/devel/test_frd.m =================================================================== --- trunk/octave-forge/main/control/devel/test_frd.m 2010-10-09 13:43:42 UTC (rev 7830) +++ trunk/octave-forge/main/control/devel/test_frd.m 2010-10-09 19:06:20 UTC (rev 7831) @@ -1,12 +1,12 @@ -sys = frd (1, 1) +sys1 = frd (1, 1) -sys = frd (2+5i, 3, 0.1) +sys2 = frd (2+5i, 3, 0.1) -sys = frd (ones (2, 3, 5), 1:5) +sys3 = frd (ones (2, 3, 5), 1:5) -frd +sys4 = frd -frd ([], []) +sys5 = frd ([], []) @@ -40,11 +40,13 @@ sigma (P_frd, [], 3) -sys1 = frd (reshape (1:60, 3, 4, []), 1:5) -sys1.' +%sys1 = frd (reshape (1:60, 3, 4, []), 1:5) +%sys1.' +P_frd.'; -sys2 = frd (reshape (1:45, 3, 3, []), 1:5) -inv (sys2) +%sys2 = frd (reshape (1:45, 3, 3, []), 1:5) +%inv (sys2) +inv (P_frd); P_ss = Boeing707; @@ -55,11 +57,25 @@ figure (5) subplot (2, 1, 1) -sigma (T_ss) +% sigma (T_ss) +sigma (T_ss, T_frd.w) subplot (2, 1, 2) sigma (T_frd) +figure (6) +subplot (2, 1, 1) +% sigma (T_ss + P_ss) +sigma (T_ss + P_ss, T_frd.w) +subplot (2, 1, 2) +sigma (T_frd + P_frd) +figure (7) +subplot (2, 1, 1) +% sigma (T_ss * P_ss) +sigma (T_ss * P_ss, T_frd.w) +subplot (2, 1, 2) +sigma (T_frd * P_frd) + %{ 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. |