public Matrix decomposeLU(boolean LUP) {
		if(rows != cols) {
			throw new IllegalArgumentException("Matrica nije kvadratna!");
		}
		
		Matrix P = new Matrix(rows);
		
		for(int i = 0; i < rows - 1; i++) {
			if(LUP) {
				// ako je LUP postupak odabran napravi pivotiranje po stupcima
				int pivotIndex = i;
				
				for(int j = pivotIndex + 1; j < rows; j++) {
					if(Math.abs(matrix[j][i]) > Math.abs(matrix[pivotIndex][i])) {
						pivotIndex = j;
					}
				}
				
				this.swapRows(i, pivotIndex);
				P.swapRows(i, pivotIndex);
			}
			
			double pivotValue = matrix[i][i];
			
			if(isZero(pivotValue)) {
				System.err.println("Pivot je priblizno nula! Pivot: " + pivotValue);
				return null;
			}
			
			for(int j = i + 1; j < rows; j++) {
				matrix[j][i] /= pivotValue;
				
				for(int k = i + 1; k < cols; k++) {
					matrix[j][k] -= matrix[j][i] * matrix[i][k];
				}
			}	
		}
		
		double lastPivot = matrix[rows - 1][cols - 1];
		if(isZero(lastPivot)) {
			System.err.println("LU[N, N] je priblizno nula! Pivot: " + lastPivot);
			return null;
		}
		
		isDecomposed = true;
		
		return P;
	}