>From 8b0f8fbd6a3470ac1eb20f940ef4e35ba80d4763 Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Tue, 4 May 2010 17:26:20 -0500 Subject: [PATCH 1/2] Add the make transformCovariance script, updated generated.h Also added a rule to Makefile.in to regenerate generated.h --- Makefile.in | 3 + generated.h | 567 ++++++++++++++++++++++++++++++++++++++++-- make_transformcovariance.awk | 42 +++ 3 files changed, 595 insertions(+), 17 deletions(-) create mode 100644 make_transformcovariance.awk diff --git a/Makefile.in b/Makefile.in index da2f673..af0ce0f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -29,6 +29,9 @@ internal/make_vector.hh: make_make_vector.awk internal/builtin_typeof.h:make_typeof.awk awk -f make_typeof.awk > $@ +generated.h:make_transformcovariance.awk + awk -f make_transformcovariance.awk > $@ + clean: rm -rf html diff --git a/generated.h b/generated.h index 1ec657c..92288b9 100644 --- a/generated.h +++ b/generated.h @@ -1,42 +1,113 @@ +// Mechanically generate code. Do not edit. +// modify make_transformcovariance.awk and run make generated.h namespace TooN { + // Generated for J*C*J^T, C symmetric template inline void transformCovariance(const Matrix<2,2,A1>& A, const Matrix<2,2,A2>& B, Matrix<2,2,A3>& M) { - M = A*B*A.T(); + M = A*B*A.T(); } + // Generated for J*C*J^T, C symmetric template inline void transformCovariance(const Matrix<2,N,A1>& A, const Matrix& B, Matrix<2,2,A3>& M) { - { const Vector ABi = B * A[0]; + { + const Vector ABi = B * A[0]; M[0][0] = ABi * A[0]; M[0][1] = M[1][0] = ABi * A[1]; } M[1][1] = (B * A[1]) * A[1]; } + // Generated for J*C*J^T, C symmetric template inline void transformCovariance(const Matrix<3,N,A1>& A, const Matrix& B, Matrix<3,3,A3>& M) { - { const Vector ABi = B * A[0]; + { + const Vector ABi = B * A[0]; M[0][0] = ABi * A[0]; M[0][1] = M[1][0] = ABi * A[1]; M[0][2] = M[2][0] = ABi * A[2]; } - { const Vector ABi = B * A[1]; + { + const Vector ABi = B * A[1]; M[1][1] = ABi * A[1]; M[1][2] = M[2][1] = ABi * A[2]; } M[2][2] = (B * A[2]) * A[2]; } + // Generated for J*C*J^T, C symmetric -template inline void transformCovariance(const Matrix<6,N,A1>& A, const Matrix& B, Matrix<6,6,A3>& M) +template +inline void transformCovariance(const Matrix<4,N,A1>& A, const Matrix& B, Matrix<4,4,A3>& M) { - { const Vector ABi = B * A[0]; + { + const Vector ABi = B * A[0]; + M[0][0] = ABi * A[0]; + M[0][1] = M[1][0] = ABi * A[1]; + M[0][2] = M[2][0] = ABi * A[2]; + M[0][3] = M[3][0] = ABi * A[3]; + } + { + const Vector ABi = B * A[1]; + M[1][1] = ABi * A[1]; + M[1][2] = M[2][1] = ABi * A[2]; + M[1][3] = M[3][1] = ABi * A[3]; + } + { + const Vector ABi = B * A[2]; + M[2][2] = ABi * A[2]; + M[2][3] = M[3][2] = ABi * A[3]; + } + M[3][3] = (B * A[3]) * A[3]; +} + + +// Generated for J*C*J^T, C symmetric +template +inline void transformCovariance(const Matrix<5,N,A1>& A, const Matrix& B, Matrix<5,5,A3>& M) +{ + { + const Vector ABi = B * A[0]; + M[0][0] = ABi * A[0]; + M[0][1] = M[1][0] = ABi * A[1]; + M[0][2] = M[2][0] = ABi * A[2]; + M[0][3] = M[3][0] = ABi * A[3]; + M[0][4] = M[4][0] = ABi * A[4]; + } + { + const Vector ABi = B * A[1]; + M[1][1] = ABi * A[1]; + M[1][2] = M[2][1] = ABi * A[2]; + M[1][3] = M[3][1] = ABi * A[3]; + M[1][4] = M[4][1] = ABi * A[4]; + } + { + const Vector ABi = B * A[2]; + M[2][2] = ABi * A[2]; + M[2][3] = M[3][2] = ABi * A[3]; + M[2][4] = M[4][2] = ABi * A[4]; + } + { + const Vector ABi = B * A[3]; + M[3][3] = ABi * A[3]; + M[3][4] = M[4][3] = ABi * A[4]; + } + M[4][4] = (B * A[4]) * A[4]; +} + + +// Generated for J*C*J^T, C symmetric +template +inline void transformCovariance(const Matrix<6,N,A1>& A, const Matrix& B, Matrix<6,6,A3>& M) +{ + { + const Vector ABi = B * A[0]; M[0][0] = ABi * A[0]; M[0][1] = M[1][0] = ABi * A[1]; M[0][2] = M[2][0] = ABi * A[2]; @@ -44,35 +115,42 @@ template inline void transformCovariance(c M[0][4] = M[4][0] = ABi * A[4]; M[0][5] = M[5][0] = ABi * A[5]; } - { const Vector ABi = B * A[1]; + { + const Vector ABi = B * A[1]; M[1][1] = ABi * A[1]; M[1][2] = M[2][1] = ABi * A[2]; M[1][3] = M[3][1] = ABi * A[3]; M[1][4] = M[4][1] = ABi * A[4]; M[1][5] = M[5][1] = ABi * A[5]; } - { const Vector ABi = B * A[2]; + { + const Vector ABi = B * A[2]; M[2][2] = ABi * A[2]; M[2][3] = M[3][2] = ABi * A[3]; M[2][4] = M[4][2] = ABi * A[4]; M[2][5] = M[5][2] = ABi * A[5]; } - { const Vector ABi = B * A[3]; + { + const Vector ABi = B * A[3]; M[3][3] = ABi * A[3]; M[3][4] = M[4][3] = ABi * A[4]; M[3][5] = M[5][3] = ABi * A[5]; } - { const Vector ABi = B * A[4]; + { + const Vector ABi = B * A[4]; M[4][4] = ABi * A[4]; M[4][5] = M[5][4] = ABi * A[5]; } M[5][5] = (B * A[5]) * A[5]; } + // Generated for J*C*J^T, C symmetric -template inline void transformCovariance(const Matrix<12,N,A1>& A, const Matrix& B, Matrix<12,12,A3>& M) +template +inline void transformCovariance(const Matrix<7,N,A1>& A, const Matrix& B, Matrix<7,7,A3>& M) { - { const Vector ABi = B * A[0]; + { + const Vector ABi = B * A[0]; M[0][0] = ABi * A[0]; M[0][1] = M[1][0] = ABi * A[1]; M[0][2] = M[2][0] = ABi * A[2]; @@ -81,7 +159,8 @@ template inline void transformCovariance(c M[0][5] = M[5][0] = ABi * A[5]; M[0][6] = M[6][0] = ABi * A[6]; } - { const Vector ABi = B * A[1]; + { + const Vector ABi = B * A[1]; M[1][1] = ABi * A[1]; M[1][2] = M[2][1] = ABi * A[2]; M[1][3] = M[3][1] = ABi * A[3]; @@ -89,28 +168,482 @@ template inline void transformCovariance(c M[1][5] = M[5][1] = ABi * A[5]; M[1][6] = M[6][1] = ABi * A[6]; } - { const Vector ABi = B * A[2]; + { + const Vector ABi = B * A[2]; M[2][2] = ABi * A[2]; M[2][3] = M[3][2] = ABi * A[3]; M[2][4] = M[4][2] = ABi * A[4]; M[2][5] = M[5][2] = ABi * A[5]; M[2][6] = M[6][2] = ABi * A[6]; } - { const Vector ABi = B * A[3]; + { + const Vector ABi = B * A[3]; M[3][3] = ABi * A[3]; M[3][4] = M[4][3] = ABi * A[4]; M[3][5] = M[5][3] = ABi * A[5]; M[3][6] = M[6][3] = ABi * A[6]; } - { const Vector ABi = B * A[4]; + { + const Vector ABi = B * A[4]; M[4][4] = ABi * A[4]; M[4][5] = M[5][4] = ABi * A[5]; M[4][6] = M[6][4] = ABi * A[6]; } - { const Vector ABi = B * A[5]; + { + const Vector ABi = B * A[5]; M[5][5] = ABi * A[5]; M[5][6] = M[6][5] = ABi * A[6]; } M[6][6] = (B * A[6]) * A[6]; } + + +// Generated for J*C*J^T, C symmetric +template +inline void transformCovariance(const Matrix<8,N,A1>& A, const Matrix& B, Matrix<8,8,A3>& M) +{ + { + const Vector ABi = B * A[0]; + M[0][0] = ABi * A[0]; + M[0][1] = M[1][0] = ABi * A[1]; + M[0][2] = M[2][0] = ABi * A[2]; + M[0][3] = M[3][0] = ABi * A[3]; + M[0][4] = M[4][0] = ABi * A[4]; + M[0][5] = M[5][0] = ABi * A[5]; + M[0][6] = M[6][0] = ABi * A[6]; + M[0][7] = M[7][0] = ABi * A[7]; + } + { + const Vector ABi = B * A[1]; + M[1][1] = ABi * A[1]; + M[1][2] = M[2][1] = ABi * A[2]; + M[1][3] = M[3][1] = ABi * A[3]; + M[1][4] = M[4][1] = ABi * A[4]; + M[1][5] = M[5][1] = ABi * A[5]; + M[1][6] = M[6][1] = ABi * A[6]; + M[1][7] = M[7][1] = ABi * A[7]; + } + { + const Vector ABi = B * A[2]; + M[2][2] = ABi * A[2]; + M[2][3] = M[3][2] = ABi * A[3]; + M[2][4] = M[4][2] = ABi * A[4]; + M[2][5] = M[5][2] = ABi * A[5]; + M[2][6] = M[6][2] = ABi * A[6]; + M[2][7] = M[7][2] = ABi * A[7]; + } + { + const Vector ABi = B * A[3]; + M[3][3] = ABi * A[3]; + M[3][4] = M[4][3] = ABi * A[4]; + M[3][5] = M[5][3] = ABi * A[5]; + M[3][6] = M[6][3] = ABi * A[6]; + M[3][7] = M[7][3] = ABi * A[7]; + } + { + const Vector ABi = B * A[4]; + M[4][4] = ABi * A[4]; + M[4][5] = M[5][4] = ABi * A[5]; + M[4][6] = M[6][4] = ABi * A[6]; + M[4][7] = M[7][4] = ABi * A[7]; + } + { + const Vector ABi = B * A[5]; + M[5][5] = ABi * A[5]; + M[5][6] = M[6][5] = ABi * A[6]; + M[5][7] = M[7][5] = ABi * A[7]; + } + { + const Vector ABi = B * A[6]; + M[6][6] = ABi * A[6]; + M[6][7] = M[7][6] = ABi * A[7]; + } + M[7][7] = (B * A[7]) * A[7]; +} + + +// Generated for J*C*J^T, C symmetric +template +inline void transformCovariance(const Matrix<9,N,A1>& A, const Matrix& B, Matrix<9,9,A3>& M) +{ + { + const Vector ABi = B * A[0]; + M[0][0] = ABi * A[0]; + M[0][1] = M[1][0] = ABi * A[1]; + M[0][2] = M[2][0] = ABi * A[2]; + M[0][3] = M[3][0] = ABi * A[3]; + M[0][4] = M[4][0] = ABi * A[4]; + M[0][5] = M[5][0] = ABi * A[5]; + M[0][6] = M[6][0] = ABi * A[6]; + M[0][7] = M[7][0] = ABi * A[7]; + M[0][8] = M[8][0] = ABi * A[8]; + } + { + const Vector ABi = B * A[1]; + M[1][1] = ABi * A[1]; + M[1][2] = M[2][1] = ABi * A[2]; + M[1][3] = M[3][1] = ABi * A[3]; + M[1][4] = M[4][1] = ABi * A[4]; + M[1][5] = M[5][1] = ABi * A[5]; + M[1][6] = M[6][1] = ABi * A[6]; + M[1][7] = M[7][1] = ABi * A[7]; + M[1][8] = M[8][1] = ABi * A[8]; + } + { + const Vector ABi = B * A[2]; + M[2][2] = ABi * A[2]; + M[2][3] = M[3][2] = ABi * A[3]; + M[2][4] = M[4][2] = ABi * A[4]; + M[2][5] = M[5][2] = ABi * A[5]; + M[2][6] = M[6][2] = ABi * A[6]; + M[2][7] = M[7][2] = ABi * A[7]; + M[2][8] = M[8][2] = ABi * A[8]; + } + { + const Vector ABi = B * A[3]; + M[3][3] = ABi * A[3]; + M[3][4] = M[4][3] = ABi * A[4]; + M[3][5] = M[5][3] = ABi * A[5]; + M[3][6] = M[6][3] = ABi * A[6]; + M[3][7] = M[7][3] = ABi * A[7]; + M[3][8] = M[8][3] = ABi * A[8]; + } + { + const Vector ABi = B * A[4]; + M[4][4] = ABi * A[4]; + M[4][5] = M[5][4] = ABi * A[5]; + M[4][6] = M[6][4] = ABi * A[6]; + M[4][7] = M[7][4] = ABi * A[7]; + M[4][8] = M[8][4] = ABi * A[8]; + } + { + const Vector ABi = B * A[5]; + M[5][5] = ABi * A[5]; + M[5][6] = M[6][5] = ABi * A[6]; + M[5][7] = M[7][5] = ABi * A[7]; + M[5][8] = M[8][5] = ABi * A[8]; + } + { + const Vector ABi = B * A[6]; + M[6][6] = ABi * A[6]; + M[6][7] = M[7][6] = ABi * A[7]; + M[6][8] = M[8][6] = ABi * A[8]; + } + { + const Vector ABi = B * A[7]; + M[7][7] = ABi * A[7]; + M[7][8] = M[8][7] = ABi * A[8]; + } + M[8][8] = (B * A[8]) * A[8]; +} + + +// Generated for J*C*J^T, C symmetric +template +inline void transformCovariance(const Matrix<10,N,A1>& A, const Matrix& B, Matrix<10,10,A3>& M) +{ + { + const Vector ABi = B * A[0]; + M[0][0] = ABi * A[0]; + M[0][1] = M[1][0] = ABi * A[1]; + M[0][2] = M[2][0] = ABi * A[2]; + M[0][3] = M[3][0] = ABi * A[3]; + M[0][4] = M[4][0] = ABi * A[4]; + M[0][5] = M[5][0] = ABi * A[5]; + M[0][6] = M[6][0] = ABi * A[6]; + M[0][7] = M[7][0] = ABi * A[7]; + M[0][8] = M[8][0] = ABi * A[8]; + M[0][9] = M[9][0] = ABi * A[9]; + } + { + const Vector ABi = B * A[1]; + M[1][1] = ABi * A[1]; + M[1][2] = M[2][1] = ABi * A[2]; + M[1][3] = M[3][1] = ABi * A[3]; + M[1][4] = M[4][1] = ABi * A[4]; + M[1][5] = M[5][1] = ABi * A[5]; + M[1][6] = M[6][1] = ABi * A[6]; + M[1][7] = M[7][1] = ABi * A[7]; + M[1][8] = M[8][1] = ABi * A[8]; + M[1][9] = M[9][1] = ABi * A[9]; + } + { + const Vector ABi = B * A[2]; + M[2][2] = ABi * A[2]; + M[2][3] = M[3][2] = ABi * A[3]; + M[2][4] = M[4][2] = ABi * A[4]; + M[2][5] = M[5][2] = ABi * A[5]; + M[2][6] = M[6][2] = ABi * A[6]; + M[2][7] = M[7][2] = ABi * A[7]; + M[2][8] = M[8][2] = ABi * A[8]; + M[2][9] = M[9][2] = ABi * A[9]; + } + { + const Vector ABi = B * A[3]; + M[3][3] = ABi * A[3]; + M[3][4] = M[4][3] = ABi * A[4]; + M[3][5] = M[5][3] = ABi * A[5]; + M[3][6] = M[6][3] = ABi * A[6]; + M[3][7] = M[7][3] = ABi * A[7]; + M[3][8] = M[8][3] = ABi * A[8]; + M[3][9] = M[9][3] = ABi * A[9]; + } + { + const Vector ABi = B * A[4]; + M[4][4] = ABi * A[4]; + M[4][5] = M[5][4] = ABi * A[5]; + M[4][6] = M[6][4] = ABi * A[6]; + M[4][7] = M[7][4] = ABi * A[7]; + M[4][8] = M[8][4] = ABi * A[8]; + M[4][9] = M[9][4] = ABi * A[9]; + } + { + const Vector ABi = B * A[5]; + M[5][5] = ABi * A[5]; + M[5][6] = M[6][5] = ABi * A[6]; + M[5][7] = M[7][5] = ABi * A[7]; + M[5][8] = M[8][5] = ABi * A[8]; + M[5][9] = M[9][5] = ABi * A[9]; + } + { + const Vector ABi = B * A[6]; + M[6][6] = ABi * A[6]; + M[6][7] = M[7][6] = ABi * A[7]; + M[6][8] = M[8][6] = ABi * A[8]; + M[6][9] = M[9][6] = ABi * A[9]; + } + { + const Vector ABi = B * A[7]; + M[7][7] = ABi * A[7]; + M[7][8] = M[8][7] = ABi * A[8]; + M[7][9] = M[9][7] = ABi * A[9]; + } + { + const Vector ABi = B * A[8]; + M[8][8] = ABi * A[8]; + M[8][9] = M[9][8] = ABi * A[9]; + } + M[9][9] = (B * A[9]) * A[9]; +} + + +// Generated for J*C*J^T, C symmetric +template +inline void transformCovariance(const Matrix<11,N,A1>& A, const Matrix& B, Matrix<11,11,A3>& M) +{ + { + const Vector ABi = B * A[0]; + M[0][0] = ABi * A[0]; + M[0][1] = M[1][0] = ABi * A[1]; + M[0][2] = M[2][0] = ABi * A[2]; + M[0][3] = M[3][0] = ABi * A[3]; + M[0][4] = M[4][0] = ABi * A[4]; + M[0][5] = M[5][0] = ABi * A[5]; + M[0][6] = M[6][0] = ABi * A[6]; + M[0][7] = M[7][0] = ABi * A[7]; + M[0][8] = M[8][0] = ABi * A[8]; + M[0][9] = M[9][0] = ABi * A[9]; + M[0][10] = M[10][0] = ABi * A[10]; + } + { + const Vector ABi = B * A[1]; + M[1][1] = ABi * A[1]; + M[1][2] = M[2][1] = ABi * A[2]; + M[1][3] = M[3][1] = ABi * A[3]; + M[1][4] = M[4][1] = ABi * A[4]; + M[1][5] = M[5][1] = ABi * A[5]; + M[1][6] = M[6][1] = ABi * A[6]; + M[1][7] = M[7][1] = ABi * A[7]; + M[1][8] = M[8][1] = ABi * A[8]; + M[1][9] = M[9][1] = ABi * A[9]; + M[1][10] = M[10][1] = ABi * A[10]; + } + { + const Vector ABi = B * A[2]; + M[2][2] = ABi * A[2]; + M[2][3] = M[3][2] = ABi * A[3]; + M[2][4] = M[4][2] = ABi * A[4]; + M[2][5] = M[5][2] = ABi * A[5]; + M[2][6] = M[6][2] = ABi * A[6]; + M[2][7] = M[7][2] = ABi * A[7]; + M[2][8] = M[8][2] = ABi * A[8]; + M[2][9] = M[9][2] = ABi * A[9]; + M[2][10] = M[10][2] = ABi * A[10]; + } + { + const Vector ABi = B * A[3]; + M[3][3] = ABi * A[3]; + M[3][4] = M[4][3] = ABi * A[4]; + M[3][5] = M[5][3] = ABi * A[5]; + M[3][6] = M[6][3] = ABi * A[6]; + M[3][7] = M[7][3] = ABi * A[7]; + M[3][8] = M[8][3] = ABi * A[8]; + M[3][9] = M[9][3] = ABi * A[9]; + M[3][10] = M[10][3] = ABi * A[10]; + } + { + const Vector ABi = B * A[4]; + M[4][4] = ABi * A[4]; + M[4][5] = M[5][4] = ABi * A[5]; + M[4][6] = M[6][4] = ABi * A[6]; + M[4][7] = M[7][4] = ABi * A[7]; + M[4][8] = M[8][4] = ABi * A[8]; + M[4][9] = M[9][4] = ABi * A[9]; + M[4][10] = M[10][4] = ABi * A[10]; + } + { + const Vector ABi = B * A[5]; + M[5][5] = ABi * A[5]; + M[5][6] = M[6][5] = ABi * A[6]; + M[5][7] = M[7][5] = ABi * A[7]; + M[5][8] = M[8][5] = ABi * A[8]; + M[5][9] = M[9][5] = ABi * A[9]; + M[5][10] = M[10][5] = ABi * A[10]; + } + { + const Vector ABi = B * A[6]; + M[6][6] = ABi * A[6]; + M[6][7] = M[7][6] = ABi * A[7]; + M[6][8] = M[8][6] = ABi * A[8]; + M[6][9] = M[9][6] = ABi * A[9]; + M[6][10] = M[10][6] = ABi * A[10]; + } + { + const Vector ABi = B * A[7]; + M[7][7] = ABi * A[7]; + M[7][8] = M[8][7] = ABi * A[8]; + M[7][9] = M[9][7] = ABi * A[9]; + M[7][10] = M[10][7] = ABi * A[10]; + } + { + const Vector ABi = B * A[8]; + M[8][8] = ABi * A[8]; + M[8][9] = M[9][8] = ABi * A[9]; + M[8][10] = M[10][8] = ABi * A[10]; + } + { + const Vector ABi = B * A[9]; + M[9][9] = ABi * A[9]; + M[9][10] = M[10][9] = ABi * A[10]; + } + M[10][10] = (B * A[10]) * A[10]; +} + + +// Generated for J*C*J^T, C symmetric +template +inline void transformCovariance(const Matrix<12,N,A1>& A, const Matrix& B, Matrix<12,12,A3>& M) +{ + { + const Vector ABi = B * A[0]; + M[0][0] = ABi * A[0]; + M[0][1] = M[1][0] = ABi * A[1]; + M[0][2] = M[2][0] = ABi * A[2]; + M[0][3] = M[3][0] = ABi * A[3]; + M[0][4] = M[4][0] = ABi * A[4]; + M[0][5] = M[5][0] = ABi * A[5]; + M[0][6] = M[6][0] = ABi * A[6]; + M[0][7] = M[7][0] = ABi * A[7]; + M[0][8] = M[8][0] = ABi * A[8]; + M[0][9] = M[9][0] = ABi * A[9]; + M[0][10] = M[10][0] = ABi * A[10]; + M[0][11] = M[11][0] = ABi * A[11]; + } + { + const Vector ABi = B * A[1]; + M[1][1] = ABi * A[1]; + M[1][2] = M[2][1] = ABi * A[2]; + M[1][3] = M[3][1] = ABi * A[3]; + M[1][4] = M[4][1] = ABi * A[4]; + M[1][5] = M[5][1] = ABi * A[5]; + M[1][6] = M[6][1] = ABi * A[6]; + M[1][7] = M[7][1] = ABi * A[7]; + M[1][8] = M[8][1] = ABi * A[8]; + M[1][9] = M[9][1] = ABi * A[9]; + M[1][10] = M[10][1] = ABi * A[10]; + M[1][11] = M[11][1] = ABi * A[11]; + } + { + const Vector ABi = B * A[2]; + M[2][2] = ABi * A[2]; + M[2][3] = M[3][2] = ABi * A[3]; + M[2][4] = M[4][2] = ABi * A[4]; + M[2][5] = M[5][2] = ABi * A[5]; + M[2][6] = M[6][2] = ABi * A[6]; + M[2][7] = M[7][2] = ABi * A[7]; + M[2][8] = M[8][2] = ABi * A[8]; + M[2][9] = M[9][2] = ABi * A[9]; + M[2][10] = M[10][2] = ABi * A[10]; + M[2][11] = M[11][2] = ABi * A[11]; + } + { + const Vector ABi = B * A[3]; + M[3][3] = ABi * A[3]; + M[3][4] = M[4][3] = ABi * A[4]; + M[3][5] = M[5][3] = ABi * A[5]; + M[3][6] = M[6][3] = ABi * A[6]; + M[3][7] = M[7][3] = ABi * A[7]; + M[3][8] = M[8][3] = ABi * A[8]; + M[3][9] = M[9][3] = ABi * A[9]; + M[3][10] = M[10][3] = ABi * A[10]; + M[3][11] = M[11][3] = ABi * A[11]; + } + { + const Vector ABi = B * A[4]; + M[4][4] = ABi * A[4]; + M[4][5] = M[5][4] = ABi * A[5]; + M[4][6] = M[6][4] = ABi * A[6]; + M[4][7] = M[7][4] = ABi * A[7]; + M[4][8] = M[8][4] = ABi * A[8]; + M[4][9] = M[9][4] = ABi * A[9]; + M[4][10] = M[10][4] = ABi * A[10]; + M[4][11] = M[11][4] = ABi * A[11]; + } + { + const Vector ABi = B * A[5]; + M[5][5] = ABi * A[5]; + M[5][6] = M[6][5] = ABi * A[6]; + M[5][7] = M[7][5] = ABi * A[7]; + M[5][8] = M[8][5] = ABi * A[8]; + M[5][9] = M[9][5] = ABi * A[9]; + M[5][10] = M[10][5] = ABi * A[10]; + M[5][11] = M[11][5] = ABi * A[11]; + } + { + const Vector ABi = B * A[6]; + M[6][6] = ABi * A[6]; + M[6][7] = M[7][6] = ABi * A[7]; + M[6][8] = M[8][6] = ABi * A[8]; + M[6][9] = M[9][6] = ABi * A[9]; + M[6][10] = M[10][6] = ABi * A[10]; + M[6][11] = M[11][6] = ABi * A[11]; + } + { + const Vector ABi = B * A[7]; + M[7][7] = ABi * A[7]; + M[7][8] = M[8][7] = ABi * A[8]; + M[7][9] = M[9][7] = ABi * A[9]; + M[7][10] = M[10][7] = ABi * A[10]; + M[7][11] = M[11][7] = ABi * A[11]; + } + { + const Vector ABi = B * A[8]; + M[8][8] = ABi * A[8]; + M[8][9] = M[9][8] = ABi * A[9]; + M[8][10] = M[10][8] = ABi * A[10]; + M[8][11] = M[11][8] = ABi * A[11]; + } + { + const Vector ABi = B * A[9]; + M[9][9] = ABi * A[9]; + M[9][10] = M[10][9] = ABi * A[10]; + M[9][11] = M[11][9] = ABi * A[11]; + } + { + const Vector ABi = B * A[10]; + M[10][10] = ABi * A[10]; + M[10][11] = M[11][10] = ABi * A[11]; + } + M[11][11] = (B * A[11]) * A[11]; } +} // end of namespace TooN diff --git a/make_transformcovariance.awk b/make_transformcovariance.awk new file mode 100644 index 0000000..5a22302 --- /dev/null +++ b/make_transformcovariance.awk @@ -0,0 +1,42 @@ +BEGIN{ + N=12 + print "// Mechanically generate code. Do not edit." + print "// modify make_transformcovariance.awk and run make generated.h" + print "namespace TooN {" + print "" + # 2x2 square across the board + print "// Generated for J*C*J^T, C symmetric" + print "template " + print "inline void transformCovariance(const Matrix<2,2,A1>& A, const Matrix<2,2,A2>& B, Matrix<2,2,A3>& M)" + print "{" + print "\tM = A*B*A.T();" + print "}" + # For each function + for(i=2; i <= N; i++) + { + print "" + print "" + print "// Generated for J*C*J^T, C symmetric" + print "template " + print "inline void transformCovariance(const Matrix<"i",N,A1>& A, const Matrix& B, Matrix<"i","i",A3>& M)" + print "{" + # For each chunk except the last + for(j=0; j ABi = B * A["j "];" + print "\t\t" "M["j"]["j"] = ABi * A["j"];" + # Lines within each chunk + for (k = j + 1; k < i; k++) { + print "\t\t" "M["j"]["k"] = M["k"]["j"] = ABi * A["k"];" + } + print "\t" "}" + + } + # The last chunk + print "\t" "M["i-1"]["i-1"] = (B * A["i-1"]) * A["i-1"];" + + # end the function + print "}" + } + print "} // end of namespace TooN" +} -- 1.7.1