2313
|
1 ## Copyright (C) 1996 John W. Eaton |
|
2 ## |
|
3 ## This file is part of Octave. |
|
4 ## |
|
5 ## Octave is free software; you can redistribute it and/or modify it |
|
6 ## under the terms of the GNU General Public License as published by |
|
7 ## the Free Software Foundation; either version 2, or (at your option) |
|
8 ## any later version. |
|
9 ## |
|
10 ## Octave is distributed in the hope that it will be useful, but |
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
13 ## General Public License for more details. |
|
14 ## |
|
15 ## You should have received a copy of the GNU General Public License |
|
16 ## along with Octave; see the file COPYING. If not, write to the Free |
|
17 ## Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
|
18 ## 02111-1307, USA. |
245
|
19 |
2311
|
20 ## Usage: [Ad, Bd] = c2d (Ac, Bc, T) |
|
21 ## |
|
22 ## converts the continuous time system described by: |
|
23 ## . |
|
24 ## x = Ac x + Bc u |
|
25 ## |
|
26 ## into a discrete time equivalent model via the matrix exponential |
|
27 ## |
|
28 ## x[n+1] = Ad x[n] + Bd u[n] |
|
29 ## |
|
30 ## assuming a zero-order hold on the input and sample time T. |
203
|
31 |
2312
|
32 ## Author: R.B. Tenison <btenison@eng.auburn.edu> |
|
33 ## Created: October 1993 |
|
34 ## Adapted-By: jwe |
203
|
35 |
2312
|
36 function [Ad, Bd] = c2d (Ac, Bc, T) |
203
|
37 |
2303
|
38 ## check args |
203
|
39 if (nargin != 3) |
904
|
40 usage ("c2d (Ac, Bc, T)"); |
203
|
41 endif |
|
42 |
|
43 [ma, na] = size (Ac); |
|
44 [mb, nb] = size (Bc); |
|
45 |
|
46 if (ma != na) |
|
47 error ("c2d: Ac must be square"); |
|
48 endif |
|
49 |
|
50 if (ma != mb) |
|
51 error ("c2d: Ac and Bc must have the same number of rows"); |
|
52 endif |
|
53 |
1337
|
54 matexp = expm ([[Ac, Bc] * T; (zeros (nb, na+nb))]); |
203
|
55 |
|
56 Ad = matexp (1:na, 1:na); |
|
57 Bd = matexp (1:na, na+1:na+nb); |
|
58 |
|
59 endfunction |