annotate scripts/control/lyap.m @ 73:f3c9042fd609

[project @ 1993-08-30 14:49:08 by jwe]
author jwe
date Mon, 30 Aug 1993 14:54:55 +0000
parents 8d4431f4a00a
children 16a24e76d6e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
1 function x = lyap (a, b, c)
40
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
2
73
f3c9042fd609 [project @ 1993-08-30 14:49:08 by jwe]
jwe
parents: 57
diff changeset
3 # Usage: x = lyap (a, b {,c})
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
4 #
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
5 # If (a, b, c) are specified, then lyap returns the solution of the
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
6 # Sylvester equation
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
7 #
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
8 # a x + x b + c = 0
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
9 #
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
10 # If only (a, b) are specified, then lyap returns the solution of the
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
11 # Lyapunov equation
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
12 #
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
13 # a' x + x a + b = 0
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
14 #
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
15 # If b is not square, then lyap returns the solution of either
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
16 #
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
17 # a' x + x a + b' b = 0
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
18 #
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
19 # or
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
20 #
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
21 # a x + x a' + b b' = 0
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
22 #
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
23 # whichever is appropriate.
73
f3c9042fd609 [project @ 1993-08-30 14:49:08 by jwe]
jwe
parents: 57
diff changeset
24 #
f3c9042fd609 [project @ 1993-08-30 14:49:08 by jwe]
jwe
parents: 57
diff changeset
25 # Solves by using the Bartels-Stewart algorithm (1972).
f3c9042fd609 [project @ 1993-08-30 14:49:08 by jwe]
jwe
parents: 57
diff changeset
26
f3c9042fd609 [project @ 1993-08-30 14:49:08 by jwe]
jwe
parents: 57
diff changeset
27 # Written by A. S. Hodel (scotte@eng.auburn.edu) August 1993.
f3c9042fd609 [project @ 1993-08-30 14:49:08 by jwe]
jwe
parents: 57
diff changeset
28
40
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
29
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
30 if (nargin != 3 && nargin != 2)
57
8d4431f4a00a [project @ 1993-08-11 21:53:44 by jwe]
jwe
parents: 53
diff changeset
31 error ("usage: lyap (a, b {,c})");
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
32 endif
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
33
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
34 if ((n = is_square(a)) == 0)
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
35 error ("lyap: a is not square");
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
36 endif
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
37
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
38 if (nargin == 2)
40
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
39
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
40 # Transform Lyapunov equation to Sylvester equation form.
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
41
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
42 if ((m = is_square (b)) == 0)
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
43 if ((m = rows (b)) == n)
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
44
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
45 # solve a x + x a' + b b' = 0
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
46
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
47 b = b * b';
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
48 a = a';
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
49 else
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
50
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
51 # Try to solve a'x + x a + b' b = 0.
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
52
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
53 m = columns (b);
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
54 b = b' * b;
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
55 endif
40
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
56
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
57 if (m != n)
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
58 error ("lyap: a, b not conformably dimensioned");
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
59 endif
40
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
60 endif
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
61
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
62 # Set up Sylvester equation.
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
63
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
64 c = b;
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
65 b = a;
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
66 a = b'
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
67
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
68 else
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
69
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
70 # Check dimensions.
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
71
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
72 if ((m = is_square (b)) == 0)
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
73 error ("lyap: b must be square in a sylvester equation");
40
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
74 endif
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
75
73
f3c9042fd609 [project @ 1993-08-30 14:49:08 by jwe]
jwe
parents: 57
diff changeset
76 [n1, m1] = size(c);
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
77
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
78 if (n != n1 || m != m1)
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
79 error("lyap: a,b,c not conformably dimensioned");
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
80 endif;
40
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
81 endif
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
82
53
4565ad8b4697 [project @ 1993-08-11 21:21:34 by jwe]
jwe
parents: 40
diff changeset
83 # Call octave built-in function.
40
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
84
73
f3c9042fd609 [project @ 1993-08-30 14:49:08 by jwe]
jwe
parents: 57
diff changeset
85 x = syl (a, b, c);
40
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
86
adade67872a7 [project @ 1993-08-10 22:15:36 by jwe]
jwe
parents:
diff changeset
87 endfunction