-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPCA_INTERNAL.min.lambda
More file actions
1 lines (1 loc) · 1.02 KB
/
PCA_INTERNAL.min.lambda
File metadata and controls
1 lines (1 loc) · 1.02 KB
1
=LAMBDA(system,tolerance,LET(nCols,COLUMNS(system),covMatrix,INDEX(system,SEQUENCE(nCols),SEQUENCE(1,nCols)),accJacobi,INDEX(system,SEQUENCE(nCols,1,nCols+1),SEQUENCE(1,nCols)),covLower,MAKEARRAY(nCols,nCols,LAMBDA(iRow,iCol,IF(iCol>iRow-1,0,INDEX(covMatrix,iRow,iCol)))),covAbs,ABS(covLower),worst,MAX(covAbs),IF(worst<tolerance,system,LET(worstInRow,BYROW(covAbs,LAMBDA(x,MAX(x))),wRow,MATCH(worst,worstInRow,0),worstInCol,BYCOL(covAbs,LAMBDA(x,MAX(x))),wCol,MATCH(worst,worstInCol,0),tau,(INDEX(covMatrix,wRow,wRow)-INDEX(covMatrix,wCol,wCol))/(2*INDEX(covMatrix,wRow,wCol)),t_,IF(tau<0,-tau-SQRT(1+tau*tau),-tau+SQRT(1+tau*tau)),cval,1/SQRT(1+t_*t_),sval,cval*t_,jacobi,MAKEARRAY(nCols,nCols,LAMBDA(jRow,jCol,IF(AND(jRow=wCol,jCol=wCol),cval,IF(AND(jRow=wRow,jCol=wRow),cval,IF(AND(jRow=wCol,jCol=wRow),sval,IF(AND(jRow=wRow,jCol=wCol),-sval,IF(AND(jRow=jCol),1,0))))))),newCovMatrix,MMULT(MMULT(TRANSPOSE(jacobi),covMatrix),jacobi),newAccJacobi,MMULT(TRANSPOSE(jacobi),accJacobi),PCA_INTERNAL(VSTACK(newCovMatrix,newAccJacobi),tolerance)))))