code: @Override
  	public double calculatePhase1InitialFeasiblePoint(double[] originalNotFeasiblePoint, double tolerance){
  		//DoubleMatrix1D X0NF = F1.make(originalNotFeasiblePoint);
  		DoubleMatrix1D fiX0NF = F1.make(fi.length);
  		for(int i=0; i<fi.length; i++){
  			fiX0NF.set(i, this.fi[i].value(originalNotFeasiblePoint));
  		}
  		
  		//lucky strike?
  		int maxIneqIndex = Utils.getMaxIndex(fiX0NF);
  		if(fiX0NF.get(maxIneqIndex) < 0){
  			//the given notFeasible starting point is in fact already feasible
  			return -1;
  		}
  		
  		double s = Math.pow(tolerance,-0.5);
  		for(int i=0; i<fiX0NF.size(); i++){
  			s = Math.max(s, fiX0NF.get(i)*Math.pow(tolerance,-0.5));
  		}
  		
  		return s;
  	}
docs: Calculates the initial value for the s parameter in Phase I.
  Return s = max(fi(x))
  @see "S.Boyd and L.Vandenberghe, Convex Optimization, 11.6.2"