#include <assert.h>
#include <math.h>
#include "EigValComp3x3.h"
#include <iostream>
#include <limits>
Go to the source code of this file.
Namespaces | |
namespace | lsseg |
Functions | |
void | xprod (const double *const u, const double *const v, double *res) |
double | norm2 (const double *v) |
void | normalize (double *v) |
void | find_non_collinear (const double *const v, double *res) |
void | find_kernel (const double *const col1, const double *const col2, const double *const col3, double *ker) |
void | givens (const double a, const double b, double &c, double &s) |
void | apply_givens (const double c, const double s, double &alpha1, double &alpha2, double &alpha3, double &beta, double &delta, double &corner) |
void | apply_givens (const double c, const double s, double &alpha1, double &alpha2, double &beta) |
void | post_mul_givens (const double c, const double s, double *u, double *v) |
void | construct_eigvecs (double alpha1, double alpha2, double alpha3, double beta, double gamma, double delta, double &lambda1, double &lambda2, double &lambda3, double *v1, double *v2, double *v3) |
void | lsseg::analytic_eigvals (double alpha1, double alpha2, double alpha3, double beta, double gamma, double delta, double &lambda1, double &lambda2, double &lambda3) |
Compute the eigenvalues of a 3x3 symmetric matrix by analytically solving the corresponding characteristic polynomial. | |
void | lsseg::analytic_eigsys (double alpha1, double alpha2, double alpha3, double beta, double gamma, double delta, double &lambda1, double &lambda2, double &lambda3, double *v1, double *v2, double *v3) |
Compute the eigenvalues and eigenvectors of a 3x3 symmetric matrix by analytically solving the corresponding characteristic polynomial to find the eigenvalues, and then explicitly constructing the corresponding eigenvectors. | |
void | lsseg::numeric_eigsys (double alpha1, double alpha2, double alpha3, double beta, double gamma, double delta, double &lambda1, double &lambda2, double &lambda3, double *v1, double *v2, double *v3) |
Compute the eigenvalues and eigenvectors of a 3x3 symmetric matrix by means of an iterative numerical algorithm using Householder transformations and Givens rotations. | |
void | find_kernel (const double *const col1, const double *const col2, const double *const col3, double *ker) |
void | construct_eigvecs (double alpha1, double alpha2, double alpha3, double beta, double gamma, double delta, double &lambda1, double &lambda2, double &lambda3, double *v1, double *v2, double *v3) |
Variables | |
const double | EPS = numeric_limits<double>::epsilon() |
const double | PI = 3.1415926535897932384 |
const double | THIRD = double(1)/3 |
const double | TW7TH = double(1)/27 |
double | tempvec1 [3] |
double | tempvec2 [3] |
double | tempvec3 [3] |
Definition in file EigValComp3x3.C.
void @1::apply_givens | ( | const double | c, | |
const double | s, | |||
double & | alpha1, | |||
double & | alpha2, | |||
double & | beta | |||
) | [static] |
Definition at line 135 of file EigValComp3x3.C.
void @1::apply_givens | ( | const double | c, | |
const double | s, | |||
double & | alpha1, | |||
double & | alpha2, | |||
double & | alpha3, | |||
double & | beta, | |||
double & | delta, | |||
double & | corner | |||
) | [static] |
Definition at line 117 of file EigValComp3x3.C.
void @2::construct_eigvecs | ( | double | alpha1, | |
double | alpha2, | |||
double | alpha3, | |||
double | beta, | |||
double | gamma, | |||
double | delta, | |||
double & | lambda1, | |||
double & | lambda2, | |||
double & | lambda3, | |||
double * | v1, | |||
double * | v2, | |||
double * | v3 | |||
) | [static] |
Definition at line 409 of file EigValComp3x3.C.
void @1::construct_eigvecs | ( | double | alpha1, | |
double | alpha2, | |||
double | alpha3, | |||
double | beta, | |||
double | gamma, | |||
double | delta, | |||
double & | lambda1, | |||
double & | lambda2, | |||
double & | lambda3, | |||
double * | v1, | |||
double * | v2, | |||
double * | v3 | |||
) | [static] |
void @2::find_kernel | ( | const double *const | col1, | |
const double *const | col2, | |||
const double *const | col3, | |||
double * | ker | |||
) | [static] |
Definition at line 372 of file EigValComp3x3.C.
void @1::find_kernel | ( | const double *const | col1, | |
const double *const | col2, | |||
const double *const | col3, | |||
double * | ker | |||
) | [static] |
void @1::find_non_collinear | ( | const double *const | v, | |
double * | res | |||
) | [inline, static] |
Definition at line 81 of file EigValComp3x3.C.
void @1::givens | ( | const double | a, | |
const double | b, | |||
double & | c, | |||
double & | s | |||
) | [inline, static] |
Definition at line 99 of file EigValComp3x3.C.
double @1::norm2 | ( | const double * | v | ) | [inline, static] |
Definition at line 70 of file EigValComp3x3.C.
void @1::normalize | ( | double * | v | ) | [inline, static] |
Definition at line 73 of file EigValComp3x3.C.
void @1::post_mul_givens | ( | const double | c, | |
const double | s, | |||
double * | u, | |||
double * | v | |||
) | [static] |
Definition at line 148 of file EigValComp3x3.C.
void @1::xprod | ( | const double *const | u, | |
const double *const | v, | |||
double * | res | |||
) | [inline, static] |
Definition at line 63 of file EigValComp3x3.C.
const double EPS = numeric_limits<double>::epsilon() [static] |
Definition at line 58 of file EigValComp3x3.C.
const double PI = 3.1415926535897932384 [static] |
Definition at line 59 of file EigValComp3x3.C.
double tempvec1[3] [static] |
Definition at line 367 of file EigValComp3x3.C.
double tempvec2[3] [static] |
Definition at line 368 of file EigValComp3x3.C.
double tempvec3[3] [static] |
Definition at line 369 of file EigValComp3x3.C.
const double THIRD = double(1)/3 [static] |
Definition at line 60 of file EigValComp3x3.C.
const double TW7TH = double(1)/27 [static] |
Definition at line 61 of file EigValComp3x3.C.