From: <par...@us...> - 2012-05-07 13:22:07
|
Revision: 10374 http://octave.svn.sourceforge.net/octave/?rev=10374&view=rev Author: paramaniac Date: 2012-05-07 13:22:01 +0000 (Mon, 07 May 2012) Log Message: ----------- control-devel: support miso arx identification Modified Paths: -------------- trunk/octave-forge/extra/control-devel/inst/arx.m Modified: trunk/octave-forge/extra/control-devel/inst/arx.m =================================================================== --- trunk/octave-forge/extra/control-devel/inst/arx.m 2012-05-07 12:39:54 UTC (rev 10373) +++ trunk/octave-forge/extra/control-devel/inst/arx.m 2012-05-07 13:22:01 UTC (rev 10374) @@ -15,20 +15,24 @@ if (! is_real_scalar (na, nb)) error ("arx: "); ## Test for integers + ## numel (nb) == size (dat, 3) endif ## TODO: handle MIMO and multi-experiment data + [~, p, m, ex] = size (dat); Y = dat.y{1}; U = dat.u{1}; Ts = dat.tsam{1}; - n = max (na, nb); + max_nb = max (nb); + n = max (na, max_nb); ## avoid warning: toeplitz: column wins anti-diagonal conflict PhiY = toeplitz (Y(1:end-1, :), [Y(1, :); zeros(na-1, 1)]); - PhiU = toeplitz (U(1:end-1, :), [U(1, :); zeros(nb-1, 1)]); - Phi = [-PhiY, PhiU]; + ## PhiU = toeplitz (U(1:end-1, :), [U(1, :); zeros(nb-1, 1)]); + PhiU = arrayfun (@(x) toeplitz (U(1:end-1, x), [U(1, x); zeros(nb(x)-1, 1)]), 1:m, "uniformoutput", false); + Phi = horzcat (-PhiY, PhiU{:}); Phi = Phi(n:end, :) ## Theta = Phi \ Y(n+1:end, :); # naive formula @@ -48,8 +52,15 @@ Theta = V * (S .\ (U' * Y(n+1:end, :))); # U' is the conjugate transpose A = [1; Theta(1:na)]; # a0 = 1, a1 = Theta(1), an = Theta(n) - B = [0; Theta(na+1:end)]; # b0 = 0 (leading zero required by filt) + ## B = [0; Theta(na+1:end)]; # b0 = 0 (leading zero required by filt) + ThetaB = Theta(na+1:end); + B = mat2cell (ThetaB, nb); + B = reshape (B, 1, []); + B = cellfun (@(x) [0; x], B, "uniformoutput", false); - sys = filt ({B, 1}, {A, A}, Ts); + ## sys = filt ({B, 1}, {A, A}, Ts); + num = [B, {1}]; + den = repmat ({A}, 1, m+1); + sys = filt (num, den, Ts); 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. |