From: <par...@us...> - 2012-06-21 07:41:15
|
Revision: 10650 http://octave.svn.sourceforge.net/octave/?rev=10650&view=rev Author: paramaniac Date: 2012-06-21 07:41:04 +0000 (Thu, 21 Jun 2012) Log Message: ----------- control: test dimensions that are impossible to handle by subsequent lqr/dlqr calls, use lqe in example "Anderson" Modified Paths: -------------- trunk/octave-forge/main/control/inst/Anderson.m trunk/octave-forge/main/control/inst/dlqe.m trunk/octave-forge/main/control/inst/lqe.m Modified: trunk/octave-forge/main/control/inst/Anderson.m =================================================================== --- trunk/octave-forge/main/control/inst/Anderson.m 2012-06-21 07:16:50 UTC (rev 10649) +++ trunk/octave-forge/main/control/inst/Anderson.m 2012-06-21 07:41:04 UTC (rev 10650) @@ -47,7 +47,7 @@ V = 1; F = lqr (G, Q, R) -L = lqr (G.', W, V).' +L = lqe (G, W, V) % Coprime Factorization using Balanced Truncation Approximation figure (1) Modified: trunk/octave-forge/main/control/inst/dlqe.m =================================================================== --- trunk/octave-forge/main/control/inst/dlqe.m 2012-06-21 07:16:50 UTC (rev 10649) +++ trunk/octave-forge/main/control/inst/dlqe.m 2012-06-21 07:41:04 UTC (rev 10650) @@ -92,8 +92,14 @@ if (isempty (g)) [~, p, e] = dlqr (a.', c.', q, r, s); # dlqe (a, [], c, q, r, s), g=I + elseif (columns (g) != rows (q) || ! issquare (q)) + error ("dlqe: matrices g(%dx%d) and q(%dx%d) have incompatible dimensions", \ + rows (g), columns (g), rows (q), columns (q)); elseif (isempty (s)) [~, p, e] = dlqr (a.', c.', g*q*g.', r); + elseif (columns (g) != rows (s)) + error ("dlqe: matrices g(%dx%d) and s(%dx%d) have incompatible dimensions", \ + rows (g), columns (g), rows (s), columns (s)); else [~, p, e] = dlqr (a.', c.', g*q*g.', r, g*s); endif Modified: trunk/octave-forge/main/control/inst/lqe.m =================================================================== --- trunk/octave-forge/main/control/inst/lqe.m 2012-06-21 07:16:50 UTC (rev 10649) +++ trunk/octave-forge/main/control/inst/lqe.m 2012-06-21 07:41:04 UTC (rev 10650) @@ -89,8 +89,14 @@ [l, p, e] = lqr (a.', g, c, q); # lqe (sys, q, r, s), g=I, works like lqr (sys.', q, r, s).' elseif (isempty (g)) [l, p, e] = lqr (a.', c.', q, r, s); # lqe (a, [], c, q, r, s), g=I, works like lqr (a.', c.', q, r, s).' + elseif (columns (g) != rows (q) || ! issquare (q)) + error ("lqe: matrices g(%dx%d) and q(%dx%d) have incompatible dimensions", \ + rows (g), columns (g), rows (q), columns (q)); elseif (isempty (s)) [l, p, e] = lqr (a.', c.', g*q*g.', r); + elseif (columns (g) != rows (s)) + error ("lqe: matrices g(%dx%d) and s(%dx%d) have incompatible dimensions", \ + rows (g), columns (g), rows (s), columns (s)); else [l, p, e] = lqr (a.', c.', g*q*g.', r, g*s); endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |