15#ifndef Linear_algebra_tools_impl_H
16#define Linear_algebra_tools_impl_H
17#include <Linear_algebra_tools.h>
27 double x = std::fabs(
m[0][0]) + std::fabs(
m[0][1]) + std::fabs(
m[0][2]);
28 double y = std::fabs(
m[1][0]) + std::fabs(
m[1][1]) + std::fabs(
m[1][2]);
29 double z = std::fabs(
m[2][0]) + std::fabs(
m[2][1]) + std::fabs(
m[2][2]);
30 double resu = ((x > y) ? x : y);
31 resu = ((resu > z) ? resu : z);
41 for (
int i=0; i<3; i++)
42 for (
int j=0; j<3; j++)
43 y.
v[i] +=
m.m[i][j] * x.
v[j];
49 for (
int i=0; i<3; i++)
50 for (
int j=0; j<3; j++)
51 for (
int k=0; k<3; k++)
52 res.
m[i][j] += mat1.
m[i][k] * mat2.
m[k][j];
57 z.
v[0] = x.
v[1] * y.
v[2] - x.
v[2] * y.
v[1];
58 z.
v[1] = x.
v[2] * y.
v[0] - x.
v[0] * y.
v[2];
59 z.
v[2] = x.
v[0] * y.
v[1] - x.
v[1] * y.
v[0];
65 for (
int i=0; i<3; i++)
75 double x = std::fabs(
v[0]);
76 double y = std::fabs(
v[1]);
77 double z = std::fabs(
v[2]);
78 double resu = ((x > y) ? x : y);
79 resu = ((resu > z) ? resu : z);
88 for (
int i=0; i<3; i++)
89 for (
int j=0; j<3; j++)
90 matrice_transpose.
m[i][j] = matrice.
m[j][i];
102 const double a00 = matrice.
m[0][0];
103 const double a01 = matrice.
m[0][1];
104 const double a02 = matrice.
m[0][2];
105 const double a10 = matrice.
m[1][0];
106 const double a11 = matrice.
m[1][1];
107 const double a12 = matrice.
m[1][2];
108 const double a20 = matrice.
m[2][0];
109 const double a21 = matrice.
m[2][1];
110 const double a22 = matrice.
m[2][2];
112 const double t4 = a00*a11;
113 const double t6 = a00*a12;
114 const double t8 = a01*a10;
115 const double t10 = a02*a10;
116 const double t12 = a01*a20;
117 const double t14 = a02*a20;
118 const double t = t4*a22-t6*a21-t8*a22+t10*a21+t12*a12-t14*a11;
123 Cerr <<
"Error in Matrice33::inverse: determinant is null" << finl;
127 for (
int i = 0; i < 3; i++)
128 for (
int j = 0; j < 3; j++)
129 matrice_inv.
m[i][j] = 0.;
132 const double t17 = 1/(t);
135 matrice_inv.
m[0][0] = (a11*a22-a12*a21)*t17;
136 matrice_inv.
m[0][1] = -(a01*a22-a02*a21)*t17;
137 matrice_inv.
m[0][2] = -(-a01*a12+a02*a11)*t17;
138 matrice_inv.
m[1][0] = (-a10*a22+a12*a20)*t17;
139 matrice_inv.
m[1][1] = (a00*a22-t14)*t17;
140 matrice_inv.
m[1][2] = -(t6-t10)*t17;
141 matrice_inv.
m[2][0] = -(-a10*a21+a11*a20)*t17;
142 matrice_inv.
m[2][1] = -(a00*a21-t12)*t17;
143 matrice_inv.
m[2][2] = (t4-t8)*t17;
150 for (
int i=0; i<3; i++)
151 z.
v[i] = x.
v[i] - y.
v[i];
double norme_Linfini()
calcul de la norme Linfini de la matrice Propriete: on note |x| la norme Linfini de x (vecteur ou mat...
static void produit_matriciel(const Matrice33 &m1, const Matrice33 &m2, Matrice33 &res)
static void produit(const Matrice33 &m, const Vecteur3 &x, Vecteur3 &y)
produit avec de la matrice avec le vecteur x.
static void transpose(const Matrice33 &matrice, Matrice33 &matrice_transpose)
static double inverse(const Matrice33 &m, Matrice33 &resu, int exit_on_error=1)
calcul de l'inverse.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static double produit_scalaire(const Vecteur3 &x, const Vecteur3 &y)
static void produit_vectoriel(const Vecteur3 &x, const Vecteur3 &y, Vecteur3 &resu)
double norme_Linfini()
norme L_infini, c'est le max des abs(v[i])
friend Vecteur3 operator-(const Vecteur3 &, const Vecteur3 &)