# Solving overdetermined systems in ModelingToolkit.jl

**URL:** <https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366>\
**Category:** Modelling & Simulations\
**Tags:** linearalgebra, symbolic, modelingtoolkit\
**Created:** [February 1, 2021, 11:03am UTC](https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366 "2021-02-01T11:03:19Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![elkaps](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elkaps/32/18968_2.png) [@elkaps](https://discourse.julialang.org/u/elkaps)\
**Post date:** [February 1, 2021, 11:03am UTC](https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366/1 "2021-02-01T11:03:19Z")

</div>

Hi,  
I’m getting to know ModelingToolkit.jl and I’d like to know if it’s possible to solve a system where there are more equations than variables.

For example:

```julia
@variables x, y
julia> eqs = [Equation(x + y, 2), Equation(y, 1), Equation(x, y)]
3-element Array{Equation,1}:
 x + y ~ 2
 y ~ 1
 x ~ y

julia> ModelingToolkit.solve_for(eqs, [x, y])
ERROR: DimensionMismatch("matrix is not square: dimensions are (3, 2)")

```

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 1, 2021, 12:24pm UTC](https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366/2 "2021-02-01T12:24:09Z")

</div>

If you build it as a nonlinear system and then alias eliminate I think it will actually just give the answer. This is something that will be documented soon.

---

<div class="post-metadata">

**Author:** ![elkaps](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elkaps/32/18968_2.png) [@elkaps](https://discourse.julialang.org/u/elkaps)\
**Post date:** [February 1, 2021, 1:50pm UTC](https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366/3 "2021-02-01T13:50:05Z")

</div>

Thanks for the hint. I still get 3 equations though.

```julia
sys = NonlinearSystem(eqs, [x, y], [])
julia> ModelingToolkit.alias_elimination(sys).eqs
3-element Array{Equation,1}:
 0 ~ 2 - x - y
 0 ~ 1 - y
 0 ~ y - x

```

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 1, 2021, 1:56pm UTC](https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366/4 "2021-02-01T13:56:16Z")

</div>

With master?

---

<div class="post-metadata">

**Author:** ![elkaps](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elkaps/32/18968_2.png) [@elkaps](https://discourse.julialang.org/u/elkaps)\
**Post date:** [February 1, 2021, 2:05pm UTC](https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366/5 "2021-02-01T14:05:56Z")

</div>

Yes I saw that alias\_elimination for nonlinear systems was implemented in [Make alias elimination work with NonlinearSystem by YingboMa · Pull Request #758 · SciML/ModelingToolkit.jl · GitHub](https://github.com/SciML/ModelingToolkit.jl/pull/758)

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 1, 2021, 2:14pm UTC](https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366/6 "2021-02-01T14:14:57Z")

</div>

Hmm I would’ve expected that to work. That’s a question for @YingboMa then since he was the one who just did it.

---

<div class="post-metadata">

**Author:** ![YingboMa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yingboma/32/2181_2.png) [@YingboMa](https://discourse.julialang.org/u/YingboMa)\
**Post date:** [February 2, 2021, 10:57pm UTC](https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366/7 "2021-02-02T22:57:43Z")

</div>

Writing `Equation(x + y, 2)` is not quite right. Users should use `~`.

Also, for `NonlinearSystem` to work, you need to have the same number equations and states. So, it should be

```julia
julia> using ModelingToolkit

julia> @variables x, y
(x, y)

julia> sys = NonlinearSystem([x + y ~ 2, x ~ y], [x, y], [])
Equations (2):
 x + y ~ 2
 x ~ y
States (2):
  x
  y
Parameters (0):

julia> equations(alias_elimination(sys))
1-element Vector{Equation}:
 0 ~ 2 - (2y)

julia> observed(alias_elimination(sys))
1-element Vector{Equation}:
 x ~ y

```

Or to use `solve_for`

```julia
julia> ModelingToolkit.solve_for([x + y ~ 2, x ~ y], [x, y])
2-element Vector{Float64}:
 1.0
 1.0

```

---

<div class="post-metadata">

**Author:** ![elkaps](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elkaps/32/18968_2.png) [@elkaps](https://discourse.julialang.org/u/elkaps)\
**Post date:** [February 8, 2021, 10:29pm UTC](https://discourse.julialang.org/t/solving-overdetermined-systems-in-modelingtoolkit-jl/54366/8 "2021-02-08T22:29:08Z")

</div>

Thanks for clarifying!
