/* ## class NPoPack ## ## This class contains the routines for positive definite matrices ## in packed form. ## */ package edu.rice.linpack.Matrix.NMatrix; import edu.rice.linpack.util.*; import edu.rice.linpack.LNumber.*; public class NPoPack extends NPacked { public NPoPack() { super(); order = 0; } public NPoPack(int o) { order = o; float r = (float).5*(o*(o+1)); rows = (int) r; cols = 1; Mat = new LNumber[rows][1]; } public NPoPack(LNumber[] f, int o) { rows = f.length; cols = 1; Mat = new LNumber[rows][cols]; for(int i=0;i 0) { int kj = (int)(.5*(j*(j+1))); int kk = -1; for(int k=0;k=0;k--) { if((Z[k].abs()).greaterThan(Mat[kk][0])) { LNumber S = Mat[kk][0].div(Z[k].abs()); NUtil.scal(order,S,Z,1); ynorm.multTo(S); } Z[k].divTo(Mat[kk][0]); kk = kk - k - 1; this.axpy(k,Z[k].negate(),1,kk+1,0,Z,1,0); } LNumber S = (NUtil.asum(order,Z,1)).invTo(); NUtil.scal(order,S,Z,1); ynorm.multTo(S); return ynorm; } private void solveUZ(LNumber[] Z) { int kk = order*(order+1)/2 - 1; for(int k=order-1;k>=0;k--) { if((Z[k].abs()).greaterThan(Mat[kk][0])) { LNumber S = Mat[kk][0].div(Z[k].abs()); NUtil.scal(order,S,Z,1); } Z[k].divTo(Mat[kk][0]); kk = kk - k - 1; this.axpy(k,Z[k].negate(),1,kk+1,0,Z,1,0); } LNumber S = (NUtil.asum(order,Z,1)).invTo(); NUtil.scal(order,S,Z,1); } private LNumber solveTransRV(LNumber[] Z) { int kk = -1; LNumber ynorm = Z[0].Clone(); ynorm.setOne(); for(int k=0;k