# Matrix inverse in constraints in \`@NLconstraint\`

**URL:** https://discourse.julialang.org/t/matrix-inverse-in-constraints-in-nlconstraint/88462
**Category:** Optimization (Mathematical)
**Tags:** jump, optimization, nonlinear
**Created:** [October 9, 2022, 12:14am UTC](https://discourse.julialang.org/t/matrix-inverse-in-constraints-in-nlconstraint/88462 "2022-10-09T00:14:20Z")
**Posts on this page:** 1
**Showing post:** 4

<div class="post-metadata">

### Author: ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)
#### Post date: [October 9, 2022, 3:29am UTC](https://discourse.julialang.org/t/matrix-inverse-in-constraints-in-nlconstraint/88462/4 "2022-10-09T03:29:13Z")

</div>

> Do you happen to know if there is another way to use vector-valued expressions, if it is not possible to be done in `JuMP` ?

You can use vector-valued _linear_ or _quadratic_ expressions in the `@constraint` macro. You just can’t use vector-valued expressions in the `@NLxxx` macros.

I would split out the inner `inv(B(x)) * x` term:

```julia
using JuMP
model = Model()
@variable(model, x[1:2] >= 0)
A(x) = [1 x; 0 1]
B(x) = [1 x; 0 1]
b = [1, 2]
@variable(model, y[1:2])
@constraint(model, B(x) * y .== x)
@constraint(model, A(x) * y .== b)

```

Now you have two non-convex quadratic constraints.

---

_[View the full topic](https://discourse.julialang.org/t/matrix-inverse-in-constraints-in-nlconstraint/88462)._
