Mercurial > forge
changeset 9720:1f2353e3e587 octave-forge
control-devel: quicksave id draft code (2)
author | paramaniac |
---|---|
date | Thu, 15 Mar 2012 20:04:50 +0000 |
parents | 0583d649c01a |
children | 0a73915a01c4 |
files | extra/control-devel/src/slident.cc |
diffstat | 1 files changed, 50 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/extra/control-devel/src/slident.cc Thu Mar 15 19:24:20 2012 +0000 +++ b/extra/control-devel/src/slident.cc Thu Mar 15 20:04:50 2012 +0000 @@ -79,7 +79,7 @@ int nargin = args.length (); octave_value_list retval; - if (nargin != 11) + if (nargin != 12) { print_usage (); } @@ -106,6 +106,7 @@ double rcond = args(9).double_value (); double tol = args(10).double_value (); + double tolb = args(11).double_value (); if (imeth == 0) @@ -389,6 +390,34 @@ int nsmpl = nsmp; // arguments out + lda = max (1, n); + ldc = max (1, l); + ldb = max (1, n); + ldd = max (1, l); + ldq = n; // if JOBCK = 'C' or 'K' + ldry = l; // if JOBCK = 'C' or 'K' + lds = n; // if JOBCK = 'C' or 'K' + ldk = n; // if JOBCK = 'K' + + Matrix a (lda, n); + Matrix c (ldc, n); + Matrix b (ldb, m); + Matrix d (ldd, m); + + Matrix q (ldq, n); + Matrix ry (ldry, l); + Matrix s (lds, l); + Matrix k (ldk, l); + + // workspace + int liwork; + + int ldwork; + + + OCTAVE_LOCAL_BUFFER (int, iwork, liwork); + OCTAVE_LOCAL_BUFFER (double, dwork, ldwork); + // error indicators int iwarn = 0; @@ -409,7 +438,7 @@ ry.fortran_vec (), ldry, s.fortran_vec (), lds, k.fortran_vec (), ldk, - tol, + tolb, iwork, dwork, ldwork, bwork, @@ -455,8 +484,27 @@ error_msg ("ident", info, 10, err_msg_b); warning_msg ("ident", iwarn, 5, warn_msg_b); + // resize + a.resize (n, n); + c.resize (l, n); + b.resize (n, m); + d.resize (l, m); + + q.resize (n, n); + ry.resize (l, l); + s.resize (n, l); + k.resize (n, l); // return values + retval(0) = a; + retval(1) = b; + retval(2) = c; + retval(3) = d; + + retval(4) = q; + retval(5) = ry; + retval(6) = s; + retval(7) = k; //retval(0) = octave_value (n); //retval(1) = r; //retval(2) = sv;