1
/* Zeo - Z/Geometry and optics computation library.
2
* Copyright (C) 2005 Tomomichi Sugihara (Zhidao)
4
* zeo_vec3d_pca - principal component analysis for 3D vectors.
7
#include <zeo/zeo_mat3d.h>
10
* - barycenter of vector cloud given by a list.
12
zVec3D *zVec3DBarycenterPL(zVec3DList *vl, zVec3D *c)
17
zListForEach( vl, vc )
18
zVec3DAddDRC( c, vc->data );
19
return zVec3DDivDRC( c, zListNum(vl) );
23
* - barycenter of vector cloud given by an array.
25
zVec3D *zVec3DBarycenter(zVec3D v[], int num, zVec3D *c)
30
for( i=0; i<num; i++ )
31
zVec3DAddDRC( c, &v[i] );
32
return zVec3DDivDRC( c, num );
36
* - PCA against vector cloud given by a list.
38
zVec3D *zVec3DPCA_PL(zVec3DList *vl, zVec3D evec[])
45
zListForEach( vl, vc ){
46
zMat3DDyad( vc->data, vc->data, &pv );
47
zMat3DAddDRC( &vm, &pv );
49
zMat3DSymEig( &vm, eval, evec );
54
* - PCA against vector cloud given by an array.
56
zVec3D *zVec3DPCA(zVec3D v[], int num, zVec3D evec[])
63
for( i=0; i<num; i++ ){
64
zMat3DDyad( &v[i], &v[i], &pv );
65
zMat3DAddDRC( &vm, &pv );
67
zMat3DSymEig( &vm, eval, evec );
72
* - barycenter of and PCA against vector cloud given by a list.
74
zVec3D *zVec3DBaryPCA_PL(zVec3DList *vl, zVec3D *c, zVec3D evec[])
81
zVec3DBarycenterPL( vl, c );
83
zListForEach( vl, vc ){
84
zVec3DSub( vc->data, c, &dp );
85
zMat3DDyad( &dp, &dp, &pv );
86
zMat3DAddDRC( &vm, &pv );
88
zMat3DSymEig( &vm, eval, evec );
93
* - barycenter of and PCA against vector cloud given by an array.
95
zVec3D *zVec3DBaryPCA(zVec3D v[], int num, zVec3D *c, zVec3D evec[])
102
zVec3DBarycenter( v, num, c );
104
for( i=0; i<num; i++ ){
105
zVec3DSub( &v[i], c, &dp );
106
zMat3DDyad( &dp, &dp, &pv );
107
zMat3DAddDRC( &vm, &pv );
109
zMat3DSymEig( &vm, eval, evec );