23 # include <vcl_msvc_warnings.h> 25 #include "vnl/vnl_export.h" 60 assert(!
"Cannot invert 2x2 matrix with zero determinant");
65 d[0] =
m(1,1)*det; d[1] = -
m(0,1)*det;
66 d[3] =
m(0,0)*det; d[2] = -
m(1,0)*det;
86 assert(!
"Cannot invert 3x3 matrix with zero determinant");
91 d[0] = (
m(1,1)*
m(2,2)-
m(1,2)*
m(2,1))*det;
92 d[1] = (
m(2,1)*
m(0,2)-
m(2,2)*
m(0,1))*det;
93 d[2] = (
m(0,1)*
m(1,2)-
m(0,2)*
m(1,1))*det;
94 d[3] = (
m(1,2)*
m(2,0)-
m(1,0)*
m(2,2))*det;
95 d[4] = (
m(0,0)*
m(2,2)-
m(0,2)*
m(2,0))*det;
96 d[5] = (
m(1,0)*
m(0,2)-
m(1,2)*
m(0,0))*det;
97 d[6] = (
m(1,0)*
m(2,1)-
m(1,1)*
m(2,0))*det;
98 d[7] = (
m(0,1)*
m(2,0)-
m(0,0)*
m(2,1))*det;
99 d[8] = (
m(0,0)*
m(1,1)-
m(0,1)*
m(1,0))*det;
119 assert(!
"Cannot invert 4x4 matrix with zero determinant");
124 d[0] =
m(1,1)*
m(2,2)*
m(3,3) -
m(1,1)*
m(2,3)*
m(3,2) -
m(2,1)*
m(1,2)*
m(3,3)
125 +
m(2,1)*
m(1,3)*
m(3,2) +
m(3,1)*
m(1,2)*
m(2,3) -
m(3,1)*
m(1,3)*
m(2,2);
126 d[1] = -
m(0,1)*
m(2,2)*
m(3,3) +
m(0,1)*
m(2,3)*
m(3,2) +
m(2,1)*
m(0,2)*
m(3,3)
127 -
m(2,1)*
m(0,3)*
m(3,2) -
m(3,1)*
m(0,2)*
m(2,3) +
m(3,1)*
m(0,3)*
m(2,2);
128 d[2] =
m(0,1)*
m(1,2)*
m(3,3) -
m(0,1)*
m(1,3)*
m(3,2) -
m(1,1)*
m(0,2)*
m(3,3)
129 +
m(1,1)*
m(0,3)*
m(3,2) +
m(3,1)*
m(0,2)*
m(1,3) -
m(3,1)*
m(0,3)*
m(1,2);
130 d[3] = -
m(0,1)*
m(1,2)*
m(2,3) +
m(0,1)*
m(1,3)*
m(2,2) +
m(1,1)*
m(0,2)*
m(2,3)
131 -
m(1,1)*
m(0,3)*
m(2,2) -
m(2,1)*
m(0,2)*
m(1,3) +
m(2,1)*
m(0,3)*
m(1,2);
132 d[4] = -
m(1,0)*
m(2,2)*
m(3,3) +
m(1,0)*
m(2,3)*
m(3,2) +
m(2,0)*
m(1,2)*
m(3,3)
133 -
m(2,0)*
m(1,3)*
m(3,2) -
m(3,0)*
m(1,2)*
m(2,3) +
m(3,0)*
m(1,3)*
m(2,2);
134 d[5] =
m(0,0)*
m(2,2)*
m(3,3) -
m(0,0)*
m(2,3)*
m(3,2) -
m(2,0)*
m(0,2)*
m(3,3)
135 +
m(2,0)*
m(0,3)*
m(3,2) +
m(3,0)*
m(0,2)*
m(2,3) -
m(3,0)*
m(0,3)*
m(2,2);
136 d[6] = -
m(0,0)*
m(1,2)*
m(3,3) +
m(0,0)*
m(1,3)*
m(3,2) +
m(1,0)*
m(0,2)*
m(3,3)
137 -
m(1,0)*
m(0,3)*
m(3,2) -
m(3,0)*
m(0,2)*
m(1,3) +
m(3,0)*
m(0,3)*
m(1,2);
138 d[7] =
m(0,0)*
m(1,2)*
m(2,3) -
m(0,0)*
m(1,3)*
m(2,2) -
m(1,0)*
m(0,2)*
m(2,3)
139 +
m(1,0)*
m(0,3)*
m(2,2) +
m(2,0)*
m(0,2)*
m(1,3) -
m(2,0)*
m(0,3)*
m(1,2);
140 d[8] =
m(1,0)*
m(2,1)*
m(3,3) -
m(1,0)*
m(2,3)*
m(3,1) -
m(2,0)*
m(1,1)*
m(3,3)
141 +
m(2,0)*
m(1,3)*
m(3,1) +
m(3,0)*
m(1,1)*
m(2,3) -
m(3,0)*
m(1,3)*
m(2,1);
142 d[9] = -
m(0,0)*
m(2,1)*
m(3,3) +
m(0,0)*
m(2,3)*
m(3,1) +
m(2,0)*
m(0,1)*
m(3,3)
143 -
m(2,0)*
m(0,3)*
m(3,1) -
m(3,0)*
m(0,1)*
m(2,3) +
m(3,0)*
m(0,3)*
m(2,1);
144 d[10]=
m(0,0)*
m(1,1)*
m(3,3) -
m(0,0)*
m(1,3)*
m(3,1) -
m(1,0)*
m(0,1)*
m(3,3)
145 +
m(1,0)*
m(0,3)*
m(3,1) +
m(3,0)*
m(0,1)*
m(1,3) -
m(3,0)*
m(0,3)*
m(1,1);
146 d[11]= -
m(0,0)*
m(1,1)*
m(2,3) +
m(0,0)*
m(1,3)*
m(2,1) +
m(1,0)*
m(0,1)*
m(2,3)
147 -
m(1,0)*
m(0,3)*
m(2,1) -
m(2,0)*
m(0,1)*
m(1,3) +
m(2,0)*
m(0,3)*
m(1,1);
148 d[12]= -
m(1,0)*
m(2,1)*
m(3,2) +
m(1,0)*
m(2,2)*
m(3,1) +
m(2,0)*
m(1,1)*
m(3,2)
149 -
m(2,0)*
m(1,2)*
m(3,1) -
m(3,0)*
m(1,1)*
m(2,2) +
m(3,0)*
m(1,2)*
m(2,1);
150 d[13]=
m(0,0)*
m(2,1)*
m(3,2) -
m(0,0)*
m(2,2)*
m(3,1) -
m(2,0)*
m(0,1)*
m(3,2)
151 +
m(2,0)*
m(0,2)*
m(3,1) +
m(3,0)*
m(0,1)*
m(2,2) -
m(3,0)*
m(0,2)*
m(2,1);
152 d[14]= -
m(0,0)*
m(1,1)*
m(3,2) +
m(0,0)*
m(1,2)*
m(3,1) +
m(1,0)*
m(0,1)*
m(3,2)
153 -
m(1,0)*
m(0,2)*
m(3,1) -
m(3,0)*
m(0,1)*
m(1,2) +
m(3,0)*
m(0,2)*
m(1,1);
154 d[15]=
m(0,0)*
m(1,1)*
m(2,2) -
m(0,0)*
m(1,2)*
m(2,1) -
m(1,0)*
m(0,1)*
m(2,2)
155 +
m(1,0)*
m(0,2)*
m(2,1) +
m(2,0)*
m(0,1)*
m(1,2) -
m(2,0)*
m(0,2)*
m(1,1);
173 assert(
m.rows() ==
m.columns());
174 assert(
m.rows() <= 4);
177 else if (
m.rows() == 2)
179 else if (
m.rows() == 3)
222 assert(!
"Cannot invert 2x2 matrix with zero determinant");
227 d[0] =
m(1,1)*det; d[2] = -
m(0,1)*det;
228 d[3] =
m(0,0)*det; d[1] = -
m(1,0)*det;
250 assert(!
"Cannot invert 3x3 matrix with zero determinant");
255 d[0] = (
m(1,1)*
m(2,2)-
m(1,2)*
m(2,1))*det;
256 d[3] = (
m(2,1)*
m(0,2)-
m(2,2)*
m(0,1))*det;
257 d[6] = (
m(0,1)*
m(1,2)-
m(0,2)*
m(1,1))*det;
258 d[1] = (
m(1,2)*
m(2,0)-
m(1,0)*
m(2,2))*det;
259 d[4] = (
m(0,0)*
m(2,2)-
m(0,2)*
m(2,0))*det;
260 d[7] = (
m(1,0)*
m(0,2)-
m(1,2)*
m(0,0))*det;
261 d[2] = (
m(1,0)*
m(2,1)-
m(1,1)*
m(2,0))*det;
262 d[5] = (
m(0,1)*
m(2,0)-
m(0,0)*
m(2,1))*det;
263 d[8] = (
m(0,0)*
m(1,1)-
m(0,1)*
m(1,0))*det;
285 assert(!
"Cannot invert 4x4 matrix with zero determinant");
290 d[0] =
m(1,1)*
m(2,2)*
m(3,3) -
m(1,1)*
m(2,3)*
m(3,2) -
m(2,1)*
m(1,2)*
m(3,3)
291 +
m(2,1)*
m(1,3)*
m(3,2) +
m(3,1)*
m(1,2)*
m(2,3) -
m(3,1)*
m(1,3)*
m(2,2);
292 d[4] = -
m(0,1)*
m(2,2)*
m(3,3) +
m(0,1)*
m(2,3)*
m(3,2) +
m(2,1)*
m(0,2)*
m(3,3)
293 -
m(2,1)*
m(0,3)*
m(3,2) -
m(3,1)*
m(0,2)*
m(2,3) +
m(3,1)*
m(0,3)*
m(2,2);
294 d[8] =
m(0,1)*
m(1,2)*
m(3,3) -
m(0,1)*
m(1,3)*
m(3,2) -
m(1,1)*
m(0,2)*
m(3,3)
295 +
m(1,1)*
m(0,3)*
m(3,2) +
m(3,1)*
m(0,2)*
m(1,3) -
m(3,1)*
m(0,3)*
m(1,2);
296 d[12]= -
m(0,1)*
m(1,2)*
m(2,3) +
m(0,1)*
m(1,3)*
m(2,2) +
m(1,1)*
m(0,2)*
m(2,3)
297 -
m(1,1)*
m(0,3)*
m(2,2) -
m(2,1)*
m(0,2)*
m(1,3) +
m(2,1)*
m(0,3)*
m(1,2);
298 d[1] = -
m(1,0)*
m(2,2)*
m(3,3) +
m(1,0)*
m(2,3)*
m(3,2) +
m(2,0)*
m(1,2)*
m(3,3)
299 -
m(2,0)*
m(1,3)*
m(3,2) -
m(3,0)*
m(1,2)*
m(2,3) +
m(3,0)*
m(1,3)*
m(2,2);
300 d[5] =
m(0,0)*
m(2,2)*
m(3,3) -
m(0,0)*
m(2,3)*
m(3,2) -
m(2,0)*
m(0,2)*
m(3,3)
301 +
m(2,0)*
m(0,3)*
m(3,2) +
m(3,0)*
m(0,2)*
m(2,3) -
m(3,0)*
m(0,3)*
m(2,2);
302 d[9] = -
m(0,0)*
m(1,2)*
m(3,3) +
m(0,0)*
m(1,3)*
m(3,2) +
m(1,0)*
m(0,2)*
m(3,3)
303 -
m(1,0)*
m(0,3)*
m(3,2) -
m(3,0)*
m(0,2)*
m(1,3) +
m(3,0)*
m(0,3)*
m(1,2);
304 d[13]=
m(0,0)*
m(1,2)*
m(2,3) -
m(0,0)*
m(1,3)*
m(2,2) -
m(1,0)*
m(0,2)*
m(2,3)
305 +
m(1,0)*
m(0,3)*
m(2,2) +
m(2,0)*
m(0,2)*
m(1,3) -
m(2,0)*
m(0,3)*
m(1,2);
306 d[2] =
m(1,0)*
m(2,1)*
m(3,3) -
m(1,0)*
m(2,3)*
m(3,1) -
m(2,0)*
m(1,1)*
m(3,3)
307 +
m(2,0)*
m(1,3)*
m(3,1) +
m(3,0)*
m(1,1)*
m(2,3) -
m(3,0)*
m(1,3)*
m(2,1);
308 d[6] = -
m(0,0)*
m(2,1)*
m(3,3) +
m(0,0)*
m(2,3)*
m(3,1) +
m(2,0)*
m(0,1)*
m(3,3)
309 -
m(2,0)*
m(0,3)*
m(3,1) -
m(3,0)*
m(0,1)*
m(2,3) +
m(3,0)*
m(0,3)*
m(2,1);
310 d[10]=
m(0,0)*
m(1,1)*
m(3,3) -
m(0,0)*
m(1,3)*
m(3,1) -
m(1,0)*
m(0,1)*
m(3,3)
311 +
m(1,0)*
m(0,3)*
m(3,1) +
m(3,0)*
m(0,1)*
m(1,3) -
m(3,0)*
m(0,3)*
m(1,1);
312 d[14]= -
m(0,0)*
m(1,1)*
m(2,3) +
m(0,0)*
m(1,3)*
m(2,1) +
m(1,0)*
m(0,1)*
m(2,3)
313 -
m(1,0)*
m(0,3)*
m(2,1) -
m(2,0)*
m(0,1)*
m(1,3) +
m(2,0)*
m(0,3)*
m(1,1);
314 d[3] = -
m(1,0)*
m(2,1)*
m(3,2) +
m(1,0)*
m(2,2)*
m(3,1) +
m(2,0)*
m(1,1)*
m(3,2)
315 -
m(2,0)*
m(1,2)*
m(3,1) -
m(3,0)*
m(1,1)*
m(2,2) +
m(3,0)*
m(1,2)*
m(2,1);
316 d[7] =
m(0,0)*
m(2,1)*
m(3,2) -
m(0,0)*
m(2,2)*
m(3,1) -
m(2,0)*
m(0,1)*
m(3,2)
317 +
m(2,0)*
m(0,2)*
m(3,1) +
m(3,0)*
m(0,1)*
m(2,2) -
m(3,0)*
m(0,2)*
m(2,1);
318 d[11]= -
m(0,0)*
m(1,1)*
m(3,2) +
m(0,0)*
m(1,2)*
m(3,1) +
m(1,0)*
m(0,1)*
m(3,2)
319 -
m(1,0)*
m(0,2)*
m(3,1) -
m(3,0)*
m(0,1)*
m(1,2) +
m(3,0)*
m(0,2)*
m(1,1);
320 d[15]=
m(0,0)*
m(1,1)*
m(2,2) -
m(0,0)*
m(1,2)*
m(2,1) -
m(1,0)*
m(0,1)*
m(2,2)
321 +
m(1,0)*
m(0,2)*
m(2,1) +
m(2,0)*
m(0,1)*
m(1,2) -
m(2,0)*
m(0,2)*
m(1,1);
341 assert(
m.rows() ==
m.columns());
342 assert(
m.rows() <= 4);
345 else if (
m.rows() == 2)
347 else if (
m.rows() == 3)
353 #endif // vnl_inverse_h_ vnl_matrix_fixed< T, 1, 1 > vnl_inverse(vnl_matrix_fixed< T, 1, 1 > const &m)
Calculates inverse of a small vnl_matrix_fixed (not using svd).
An ordinary mathematical matrix.
vnl_matrix_fixed< T, 1, 1 > vnl_inverse_transpose(vnl_matrix_fixed< T, 1, 1 > const &m)
Calculates transpose of the inverse of a small vnl_matrix_fixed (not using svd).
Fixed size, stack-stored, space-efficient matrix.
Direct evaluation of 2x2, 3x3 and 4x4 determinants.
An ordinary mathematical matrix.
T vnl_det(vnl_matrix_fixed< T, 1, 1 > const &m)
Determinant of small size matrices.