// set up matrix of desired edge lengths using L*d[i][j]
 private DenseDoubleMatrix2D calcLMatrix(DenseDoubleMatrix2D distMatrix, double optDist) {
   int nNodes = distMatrix.rows();
   DenseDoubleMatrix2D lMatrix = new DenseDoubleMatrix2D(nNodes, nNodes);
   for (int i = 0; i < nNodes; i++) {
     for (int j = 0; j < nNodes; j++) {
       lMatrix.setQuick(i, j, (optDist * distMatrix.getQuick(i, j)));
     }
   }
   return lMatrix;
 }
 // set up matrix of spring forces between pairs using K/(d[i][j]^2)
 private DenseDoubleMatrix2D calcKMatrix(DenseDoubleMatrix2D distMatrix, double spring) {
   int nNodes = distMatrix.rows();
   DenseDoubleMatrix2D kMatrix = new DenseDoubleMatrix2D(nNodes, nNodes);
   for (int i = 0; i < nNodes; i++) {
     for (int j = 0; j < nNodes; j++) {
       double distMVal = distMatrix.getQuick(i, j);
       kMatrix.setQuick(i, j, (spring / (distMVal * distMVal)));
     }
   }
   return kMatrix;
 }