gram_schmidt_orth.c

/*--------------------------------------------

グラム・シュミットの正規直交化法

Gram-Schmidt orthogonalisation


gram_schmidt_orth.c

--------------------------------------------*/


#include "duffing_lyap.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;

}

}

}