|
1 | 1 | %% Copyright (C) 2016 Alex Vong |
2 | | -%% Copyright (C) 2017-2019 Colin B. Macdonald |
| 2 | +%% Copyright (C) 2017-2019, 2026 Colin B. Macdonald |
3 | 3 | %% |
4 | 4 | %% This file is part of OctSymPy. |
5 | 5 | %% |
|
135 | 135 | %! A = sym ([2 1 0 0; 0 2 1 0; 0 0 3 0; 0 1 -1 3]); |
136 | 136 | %! [V, J] = jordan (A); |
137 | 137 | %! assert (isequal (inv (V) * A * V, J)); |
138 | | -%! assert (isequal (J, sym ([2 1 0 0; 0 2 0 0; 0 0 3 0; 0 0 0 3]))) |
139 | | -%! % the first 2 generalized eigenvectors form a cycle |
140 | | -%! assert (isequal ((A - J(1, 1) * eye (4)) * V(:, 1), zeros (4, 1))); |
141 | | -%! assert (isequal ((A - J(2, 2) * eye (4)) * V(:, 2), V(:, 1))); |
142 | | -%! % the last 2 generalized eigenvectors are eigenvectors |
143 | | -%! assert (isequal ((A - J(3, 3) * eye (4)) * V(:, 3), zeros (4, 1))); |
144 | | -%! assert (isequal ((A - J(4, 4) * eye (4)) * V(:, 4), zeros (4, 1))); |
| 138 | +%! % it might give J1 or J2: either answer is ok. |
| 139 | +%! J1 = sym ([2 1 0 0; 0 2 0 0; 0 0 3 0; 0 0 0 3]); |
| 140 | +%! J2 = sym ([3 0 0 0; 0 3 0 0; 0 0 2 1; 0 0 0 2]); |
| 141 | +%! assert (isequal (J, J1) | isequal (J, J2)) |
| 142 | +%! if (isequal (J, J1)) |
| 143 | +%! % the first 2 generalized eigenvectors form a cycle |
| 144 | +%! assert (isequal ((A - J(1, 1) * eye (4)) * V(:, 1), zeros (4, 1))); |
| 145 | +%! assert (isequal ((A - J(2, 2) * eye (4)) * V(:, 2), V(:, 1))); |
| 146 | +%! % the last 2 generalized eigenvectors are eigenvectors |
| 147 | +%! assert (isequal ((A - J(3, 3) * eye (4)) * V(:, 3), zeros (4, 1))); |
| 148 | +%! assert (isequal ((A - J(4, 4) * eye (4)) * V(:, 4), zeros (4, 1))); |
| 149 | +%! else |
| 150 | +%! % opposite order as above |
| 151 | +%! assert (isequal ((A - J(1, 1) * eye (4)) * V(:, 1), zeros (4, 1))); |
| 152 | +%! assert (isequal ((A - J(2, 2) * eye (4)) * V(:, 2), zeros (4, 1))); |
| 153 | +%! assert (isequal ((A - J(3, 3) * eye (4)) * V(:, 3), zeros (4, 1))); |
| 154 | +%! assert (isequal ((A - J(4, 4) * eye (4)) * V(:, 4), V(:, 3))); |
| 155 | +%! end |
145 | 156 |
|
146 | 157 | %!test |
147 | 158 | %! % scalars |
|
153 | 164 | %! A = diag (sym ([6 6 7])); |
154 | 165 | %! [V1, D] = eig (A); |
155 | 166 | %! [V2, J] = jordan (A); |
156 | | -%! assert (isequal (V1, V2)); |
157 | | -%! assert (isequal (D, J)); |
| 167 | +%! assert (isequal (A*V2, V2*J)); |
| 168 | +%! assert (isequal (V1 * V1', sym (eye (3)))) |
| 169 | +%! assert (isequal (V2 * V2', sym (eye (3)))) |
| 170 | +%! assert (isempty (setdiff (diag (D), diag (J)))) |
158 | 171 |
|
159 | 172 | %!test |
160 | 173 | %! % matrices of unknown entries |
|
0 commit comments