docs: public static double[] solveLinearEquationTikonov(double[][] matrixA, double[] b, double lambda) {
  		if(lambda == 0) {
  			return solveLinearEquationLeastSquare(matrixA, b);
  		}
  
  		/*
  		 * The copy of the array is inefficient, but the use cases for this method are currently limited.
  		 * And SVD is an alternative to this method.
  		 */
  		int rows = matrixA.length;
  		int cols = matrixA[0].length;
  		double[][] matrixRegularized = new double[rows+cols][cols];
  		double[] bRegularized = new double[rows+cols];					// Note the JVM initializes arrays to zero.
  		for(int i=0; i<rows; i++) {
  			System.arraycopy(matrixA[i], 0, matrixRegularized[i], 0, cols);
  		}
  		System.arraycopy(b, 0, bRegularized, 0, rows);
  
  		for(int j=0; j<cols; j++) {
  			double[] matrixRow = matrixRegularized[rows+j];
  
  			matrixRow[j] = lambda;
  		}
  
  
  		//		return solveLinearEquationLeastSquare(matrixRegularized, bRegularized);
  		DecompositionSolver solver = new QRDecomposition(new Array2DRowRealMatrix(matrixRegularized, false)).getSolver();
  		return solver.solve(new ArrayRealVector(bRegularized, false)).toArray();
  	}