# Inverse of non-square matrix

**URL:** <https://discourse.mc-stan.org/t/inverse-of-non-square-matrix/9322>\
**Category:** Modeling\
**Created:** [June 19, 2019, 12:39pm UTC](https://discourse.mc-stan.org/t/inverse-of-non-square-matrix/9322 "2019-06-19T12:39:59Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![myuan](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/myuan/32/5160_2.png) [@myuan](https://discourse.mc-stan.org/u/myuan)\
**Post date:** [June 19, 2019, 12:39pm UTC](https://discourse.mc-stan.org/t/inverse-of-non-square-matrix/9322/1 "2019-06-19T12:39:59Z")

</div>

Hello,

Is it possible to calculate the pseudo-inverse of a non-square matrix in Stan?

```stan
generated quantities {
...
    Dt = inverse(Z) * Zt * D * (Zt)' * inverse((Z)');
...
} 

```

It returns “Exception: inverse: Expecting a square matrix; rows of m () and columns of m () must match in size”. Same for matrix division \ and / .

I also tried to use SVD to compute inverse(A), based on A = USV^{T}, A^{+} = VS^{+}U^{T} . However,

```stan
vector singular_values(matrix A)

```

it only gives singular values of A, not V and U.

Thanks!

---

<div class="post-metadata">

**Author:** ![yizhang](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/yizhang/32/15673_2.png) [@yizhang](https://discourse.mc-stan.org/u/yizhang)\
**Post date:** [June 19, 2019, 4:33pm UTC](https://discourse.mc-stan.org/t/inverse-of-non-square-matrix/9322/2 "2019-06-19T16:33:32Z")

</div>

> [@myuan](#):
>
> it only gives singular values of A, not V and U.

V consists of (normalized) eigenvectors of A^TA.

I wonder why V or U is not provided through `singular_values`.

---

<div class="post-metadata">

**Author:** ![bgoodri](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/bgoodri/32/4451_2.png) [@bgoodri](https://discourse.mc-stan.org/u/bgoodri)\
**Post date:** [June 19, 2019, 8:33pm UTC](https://discourse.mc-stan.org/t/inverse-of-non-square-matrix/9322/3 "2019-06-19T20:33:04Z")

</div>

Inability to return an array of matrices (or vectors) with different dimensions.

---

<div class="post-metadata">

**Author:** ![yizhang](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/yizhang/32/15673_2.png) [@yizhang](https://discourse.mc-stan.org/u/yizhang)\
**Post date:** [June 19, 2019, 9:00pm UTC](https://discourse.mc-stan.org/t/inverse-of-non-square-matrix/9322/4 "2019-06-19T21:00:15Z")

</div>

One option is to return concatenated \Sigma, U^T, V, ugly but it avoids put users into brute forcing eigenvector of A^TA.

---

<div class="post-metadata">

**Author:** ![myuan](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/myuan/32/5160_2.png) [@myuan](https://discourse.mc-stan.org/u/myuan)\
**Post date:** [June 20, 2019, 1:35pm UTC](https://discourse.mc-stan.org/t/inverse-of-non-square-matrix/9322/5 "2019-06-20T13:35:45Z")

</div>

Thanks for your replies. However, I found stan can only compute eigenvector for symmetric matrix.

```
matrix eigenvectors_sym(matrix A) 

```

---

<div class="post-metadata">

**Author:** ![andre.pfeuffer](https://avatars.discourse-cdn.com/v4/letter/a/e480ec/32.png) [@andre.pfeuffer](https://discourse.mc-stan.org/u/andre.pfeuffer)\
**Post date:** [June 20, 2019, 2:03pm UTC](https://discourse.mc-stan.org/t/inverse-of-non-square-matrix/9322/6 "2019-06-20T14:03:57Z")

</div>

How about the QR route?

> <https://math.stackexchange.com/questions/109329/can-qr-decomposition-be-used-for-matrix-inversion>

---

<div class="post-metadata">

**Author:** ![myuan](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/myuan/32/5160_2.png) [@myuan](https://discourse.mc-stan.org/u/myuan)\
**Post date:** [June 21, 2019, 12:32pm UTC](https://discourse.mc-stan.org/t/inverse-of-non-square-matrix/9322/7 "2019-06-21T12:32:04Z")

</div>

Thanks for your suggestion! I had tried. I used **`qr_thin_Q`** , but it exceeds the memory of my computer. :/
