public Matrix<T> getVer () throws Exception {
		if (this.cols != this.rows) {
			throw new MatrixIsNotInversebleException();
		}
		Matrix<T> ex = this.getEx();
		
		// set the diagonal line elements of the Matrix as "1" 
		for (int r = 0; r < rows; r++) {
			T c = ex.get(r, r);
			if (!c.isOne()) {
				ex.set(r, r, this.one);
				for (int j = r + 1; j < ex.cols; j++) {
					ex.set(r, j, ex.get(r, j).div(c));
				}
			}
			
			// set the lower triangular matrix elements as "0"
			for (int r2 = r + 1; r2 < rows; r2++) {
				T key = ex.get(r2, r);
				for (int j = r; j < ex.cols; j++) {
					T a = ex.get(r, j);
					T b = ex.get(r2, j);
					T out = b.minus(a.mul(key));
					ex.set(r2, j, out);
				}
			}
		}
		
		// set the uper triangular matrix elements as "0"
		for (int r = rows - 1; r >= 0; r--) {
			for (int r2 = 0; r2 < r; r2 ++)  {
				T key = ex.get(r2, r);
				for (int c = r; c < ex.cols; c++) {
					T a = ex.get(r2, c);
					T b = ex.get(r, c);
					T x = key.mul(b);
					ex.set(r2, c, a.minus(x));
				}
			}
		}
		return ex.getVMatrix();
	}