On 05/12/2008, Luca Favatella <[EMAIL PROTECTED]> wrote:
[...]
> I propose this change to the INDEX file:
> -suggest using the place function instead of the acker (Matlab) function
I thought that it is better to provide the acker function instead of
just suggesting to use place instead of acker.
> I'm attouching my proposed patch.
New patch attouched (built with "svn diff").
I wrote this TODO in the acker.m file.
In fact the acker function provided is (I hope) compatible with Matlab
API, but it should use the Ackermann's formula instead of just
wrapping place (as you can see at [acker]).
+ # TODO: modify this function to use
+ # Ackermann's formula instead of being
+ # only a wrapper for place(a,b,p)
[acker]
http://www.mathworks.com/access/helpdesk/help/toolbox/control/ref/acker.html
Index: place.m
===================================================================
--- place.m (revisione 5476)
+++ place.m (copia locale)
@@ -18,6 +18,7 @@
## -*- texinfo -*-
## @deftypefn {Function File} [EMAIL PROTECTED] =} place (@var{sys}, @var{p})
+## @deftypefnx {Function File} [EMAIL PROTECTED] =} place (@var{a}, @var{b}, @var{p})
## Computes the matrix @var{K} such that if the state
## is feedback with gain @var{K}, then the eigenvalues of the closed loop
## system (i.e. @math{A-BK}) are those specified in the vector @var{p}.
@@ -42,9 +43,18 @@
## code adaped by A.S.Hodel ([EMAIL PROTECTED]) for use in controls
## toolbox
-function K = place (sys, P)
+function K = place (argin1, argin2, argin3)
- if (nargin != 2)
+ if (nargin == 3)
+
+ ## Ctmp is useful to use ss; it doesn't matter what the value of Ctmp is
+ Ctmp = zeros (1, rows (argin1));
+ sys = ss (argin1, argin2, Ctmp);
+ P = argin3;
+ elseif (nargin == 2)
+ sys = argin1;
+ P = argin2;
+ else
print_usage ();
endif
@@ -86,12 +96,7 @@
## equation in the controllable canonical form.
## first we must calculate the controllability matrix M:
- M = B;
- AA = A;
- for n = 2:nx
- M(:,n) = AA*B;
- AA = AA*A;
- endfor
+ M = ctrb (A, B);
## second, construct the matrix W
PCO = PC(nx:-1:1);
@@ -123,3 +128,12 @@
endfunction
+
+%!shared A, B, C, P, Kexpected
+%! A = [0 1; 3 2];
+%! B = [0; 1];
+%! C = [2 1]; # C is useful to use ss; it doesn't matter what the value of C is
+%! P = [-1 -0.5];
+%! Kexpected = [3.5 3.5];
+%!assert (place (ss (A, B, C), P), Kexpected);
+%!assert (place (A, B, P), Kexpected);
\ No newline at end of file
Index: acker.m
===================================================================
--- acker.m (revisione 0)
+++ acker.m (revisione 0)
@@ -0,0 +1,46 @@
+## Copyright (C) 2008 Luca Favatella <[EMAIL PROTECTED]>
+##
+##
+## This program is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## This program is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; see the file COPYING. If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} [EMAIL PROTECTED] =} acker (@var{a}, @var{b}, @var{p})
+## A wrapper for place (@var{a}, @var{b}, @var{p}).
+##
+## @seealso{place}
+## @end deftypefn
+
+## Author: Luca Favatella <[EMAIL PROTECTED]>
+## Version: 0.1
+
+ # TODO: modify this function to use
+ # Ackermann's formula instead of being
+ # only a wrapper for place(a,b,p)
+
+function K = acker (a, b, p)
+ if (nargin == 3)
+ K = place (a, b, p);
+ else
+ print_usage ();
+ endif
+endfunction
+
+
+%!test
+%! A = [0 1; 3 2];
+%! B = [0; 1];
+%! P = [-1 -0.5];
+%! Kexpected = [3.5 3.5];
+%! assert (acker (A, B, P), Kexpected);
\ No newline at end of file
------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you. Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
_______________________________________________
Octave-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/octave-dev