Mercurial > forge
changeset 8614:f219b13feb15 octave-forge
control-devel: add/update draft code
author | paramaniac |
---|---|
date | Thu, 20 Oct 2011 19:50:05 +0000 |
parents | 5f1216adf77a |
children | 30c0a891947a |
files | extra/control-devel/devel/test_ab09jd.m extra/control-devel/inst/hnamodred.m extra/control-devel/src/slab09jd.cc |
diffstat | 3 files changed, 137 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/extra/control-devel/devel/test_ab09jd.m Thu Oct 20 16:56:06 2011 +0000 +++ b/extra/control-devel/devel/test_ab09jd.m Thu Oct 20 19:50:05 2011 +0000 @@ -29,10 +29,34 @@ dv = [ 1 ]; +[ar, br, cr, dr] = slab09jd (a, b, c, d, 0, 0, 0, 1, 0.0, \ + 1, av, bv, cv, dv, \ + 0, [], [], [], [], \ + 2, 1e-1, 1e-14) + + +%{ + 0, 0.0, \ + 1, 0, 2, 0, 0, 1, \ + 1e-1, 1e-14) + [ar, br, cr, dr, nr] = slab09jd (a, b, c, d, dt, scaled, nr, ordsel, alpha, \ + jobv, av, bv, cv, dv, \ + jobw, aw, bw, cw, dw, \ + jobinv, tol1, tol2); +%} +%{ +sys = ss (a, b, c, d); +sysv = ss (av, bv, cv, dv); + +sysr = hnamodred (sys, 0, sysv, []) +%} + +%{ [ar, br, cr, dr] = slab09jd (a, b, c, d, av, bv, cv, dv, [], [], [], [], 0, 0.0, \ 1, 0, 2, 0, 0, 1, \ 1e-1, 1e-14) +%} %{ The reduced state dynamics matrix Ar is
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/control-devel/inst/hnamodred.m Thu Oct 20 19:50:05 2011 +0000 @@ -0,0 +1,94 @@ +function [sysr, nr] = hnamodred (sys, nr = 0, sysv = [], sysw = []) + + [a, b, c, d, tsam, scaled] = ssdata (sys); + dt = isdt (sys); + + if (isempty (sysv)) + av = bv = cv = dv = []; + jobv = 0; + else + sysv = ss (sysv); + [av, bv, cv, dv] = ssdata (sysv); + jobv = 1; + endif + + if (isempty (sysw)) + aw = bw = cw = dw = []; + jobw = 0; + else + sysw = ss (sysw); + [aw, bw, cw, dw] = ssdata (sysw); + jobw = 1; + endif + + jobinv = 2; + tol1 = 1e-1; + tol2 = 1e-14; + alpha = 0.0; + ordsel = 1; + + [ar, br, cr, dr, nr] = slab09jd (a, b, c, d, dt, scaled, nr, ordsel, alpha, \ + jobv, av, bv, cv, dv, \ + jobw, aw, bw, cw, dw, \ + jobinv, tol1, tol2); + + sysr = ss (ar, br, cr, dr, tsam); + +endfunction + + +%!shared Mo, Me +%! a = [ -3.8637 -7.4641 -9.1416 -7.4641 -3.8637 -1.0000 +%! 1.0000, 0 0 0 0 0 +%! 0 1.0000 0 0 0 0 +%! 0 0 1.0000 0 0 0 +%! 0 0 0 1.0000 0 0 +%! 0 0 0 0 1.0000 0 ]; +%! +%! b = [ 1 +%! 0 +%! 0 +%! 0 +%! 0 +%! 0 ]; +%! +%! c = [ 0 0 0 0 0 1 ]; +%! +%! d = [ 0 ]; +%! +%! sys = ss (a, b, c, d); +%! +%! av = [ 0.2000 -1.0000 +%! 1.0000 0 ]; +%! +%! bv = [ 1 +%! 0 ]; +%! +%! cv = [ -1.8000 0 ]; +%! +%! dv = [ 1 ]; +%! +%! sysv = ss (av, bv, cv, dv); +%! +%! sysr = hnamodred (sys, 0, sysv, []); +%! [ao, bo, co, do] = ssdata (sysr); +%! +%! ae = [ -0.2391 0.3072 1.1630 1.1967 +%! -2.9709 -0.2391 2.6270 3.1027 +%! 0.0000 0.0000 -0.5137 -1.2842 +%! 0.0000 0.0000 0.1519 -0.5137 ]; +%! +%! be = [ -1.0497 +%! -3.7052 +%! 0.8223 +%! 0.7435 ]; +%! +%! ce = [ -0.4466 0.0143 -0.4780 -0.2013 ]; +%! +%! de = [ 0.0219 ]; +%! +%! Mo = [ao, bo; co, do]; +%! Me = [ae, be; ce, de]; +%! +%!assert (Mo, Me, 1e-4); +
--- a/extra/control-devel/src/slab09jd.cc Thu Oct 20 16:56:06 2011 +0000 +++ b/extra/control-devel/src/slab09jd.cc Thu Oct 20 19:50:05 2011 +0000 @@ -87,26 +87,25 @@ Matrix c = args(2).matrix_value (); Matrix d = args(3).matrix_value (); - Matrix av = args(4).matrix_value (); - Matrix bv = args(5).matrix_value (); - Matrix cv = args(6).matrix_value (); - Matrix dv = args(7).matrix_value (); - - Matrix aw = args(8).matrix_value (); - Matrix bw = args(9).matrix_value (); - Matrix cw = args(10).matrix_value (); - Matrix dw = args(11).matrix_value (); + const int idico = args(4).int_value (); + const int iequil = args(5).int_value (); + int nr = args(6).int_value (); + const int iordsel = args(7).int_value (); + double alpha = args(8).double_value (); + + const int ijobv = args(9).int_value (); + Matrix av = args(10).matrix_value (); + Matrix bv = args(11).matrix_value (); + Matrix cv = args(12).matrix_value (); + Matrix dv = args(13).matrix_value (); - int nr = args(12).int_value (); - double alpha = args(13).double_value (); - - const int ijobv = args(14).int_value (); - const int ijobw = args(15).int_value (); - const int ijobinv = args(16).int_value (); - const int idico = args(17).int_value (); - const int iequil = args(18).int_value (); - const int iordsel = args(19).int_value (); - + const int ijobw = args(14).int_value (); + Matrix aw = args(15).matrix_value (); + Matrix bw = args(16).matrix_value (); + Matrix cw = args(17).matrix_value (); + Matrix dw = args(18).matrix_value (); + + const int ijobinv = args(19).int_value (); double tol1 = args(20).double_value (); double tol2 = args(21).double_value (); @@ -308,6 +307,7 @@ retval(1) = b; retval(2) = c; retval(3) = d; + retval(4) = octave_value (nr); // retval(0) = hsv; // retval(1) = octave_value (ns); }