# torch_symeig: Symeig In torch: Tensors and Neural Networks with 'GPU' Acceleration

Symeig

## Usage

 `1` ```torch_symeig(self, eigenvectors = FALSE, upper = TRUE) ```

## Arguments

 `self` (Tensor) the input tensor of size (*, n, n) where `*` is zero or more batch dimensions consisting of symmetric matrices. `eigenvectors` (boolean, optional) controls whether eigenvectors have to be computed `upper` (boolean, optional) controls whether to consider upper-triangular or lower-triangular region

## symeig(input, eigenvectors=False, upper=TRUE) -> (Tensor, Tensor)

This function returns eigenvalues and eigenvectors of a real symmetric matrix `input` or a batch of real symmetric matrices, represented by a namedtuple (eigenvalues, eigenvectors).

This function calculates all eigenvalues (and vectors) of `input` such that \mbox{input} = V \mbox{diag}(e) V^T.

The boolean argument `eigenvectors` defines computation of both eigenvectors and eigenvalues or eigenvalues only.

If it is `FALSE`, only eigenvalues are computed. If it is `TRUE`, both eigenvalues and eigenvectors are computed.

Since the input matrix `input` is supposed to be symmetric, only the upper triangular portion is used by default.

If `upper` is `FALSE`, then lower triangular portion is used.

## Note

The eigenvalues are returned in ascending order. If `input` is a batch of matrices, then the eigenvalues of each matrix in the batch is returned in ascending order.

Irrespective of the original strides, the returned matrix `V` will be transposed, i.e. with strides `V.contiguous().transpose(-1, -2).stride()`.

Extra care needs to be taken when backward through outputs. Such operation is really only stable when all eigenvalues are distinct. Otherwise, `NaN` can appear as the gradients are not properly defined.

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17``` ```if (torch_is_installed()) { a = torch_randn(c(5, 5)) a = a + a\$t() # To make a symmetric a o = torch_symeig(a, eigenvectors=TRUE) e = o[] v = o[] e v a_big = torch_randn(c(5, 2, 2)) a_big = a_big + a_big\$transpose(-2, -1) # To make a_big symmetric o = a_big\$symeig(eigenvectors=TRUE) e = o[] v = o[] torch_allclose(torch_matmul(v, torch_matmul(e\$diag_embed(), v\$transpose(-2, -1))), a_big) } ```

### Example output

```
```

torch documentation built on Oct. 7, 2021, 9:22 a.m.