gram_schmidt_orth.c

/*--------------------------------------------
グラム・シュミットの正規直交化法
Gram–Schmidt orthonormalization

gram_schmidt_orth.c
--------------------------------------------*/

#include "main.h"

void gram_schmidt_orth( double u[DIM][DIM], double e[DIM][DIM] )
{
int i, j, k;
double d;

for ( i = 0; i < DIM; i++ ) {
for ( j = 0; j < DIM; j++ ) {
e[i][j] = u[i][j];
}
}

for ( i = 0; i < DIM; i++ ) {
for ( j = 0; j < i; j++ ) {
d = 0.0;
for ( k = 0; k < DIM; k++ ) {
d += e[k][i] * u[k][j];
}
for ( k = 0; k < DIM; k++ ) {
e[k][i] -= d * u[k][j];
}
}
d = 0.0;
for ( j = 0; j < DIM; j++ ) {
d += e[j][i] * e[j][i];
}
d = sqrt( d );
for ( j = 0; j < DIM; j++ ) {
u[j][i] = e[j][i]/(double)d;
}
}
}