Hi.
I'm referring to the control package in current svn (r5476).
I propose these changes to the place.m file:
-add the signature "place(a,b,p)" (for Matlab compatibility)
-add 1 test for the old signature
-add 1 test for the new signature
-substitute a hard-coded controllability matrix computation with the
ctrb function
I propose this change to the INDEX file:
-suggest using the place function instead of the acker (Matlab) function
I'm attouching my proposed patch.
Cheers,
Luca Favatella
Index: INDEX
===================================================================
--- INDEX (revisione 5476)
+++ INDEX (copia locale)
@@ -86,4 +86,4 @@
zero=use <f>tzero</f> or <f>tzero2</f>
kalman=use <f>lqe</f>
kalmd=use <f>dlqe</f> or <f>dkalman</f>
-
+ acker=use <f>place</f>
Index: inst/place.m
===================================================================
--- inst/place.m (revisione 5476)
+++ inst/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
------------------------------------------------------------------------------
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