Matrix *append( Matrix *m, Coordinate position, double theta ) { Matrix *givens = makeGivens( m->height, position, theta, 0 ) , *product = multiply( m, givens ) ; freeMatrix( givens ); return product; }
Matrix *rotate( Matrix *m, Coordinate position, double theta ) { Matrix *givens = makeGivens( m->height, position, theta, 1 ) , *product ; product = multiply( givens, m ); inverseGivens( givens, position ); product = multiply( product, givens ) freeMatrix( givens ); return product; }
Givens::Givens(double a, double b, Index i, Index j, double* z) :i(i), j(j) { makeGivens(a,b,i,j,z); }