# Julia equivalent for python scipy.optimize.fsolve

**URL:** <https://discourse.julialang.org/t/julia-equivalent-for-python-scipy-optimize-fsolve/46139>\
**Category:** General Usage\
**Tags:** package, roots\
**Created:** [September 6, 2020, 12:09pm UTC](https://discourse.julialang.org/t/julia-equivalent-for-python-scipy-optimize-fsolve/46139 "2020-09-06T12:09:12Z")\
**Posts on this page:** 1\
**Showing post:** 8

<div class="post-metadata">

**Author:** ![simeonschaub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simeonschaub/32/216566_2.png) [@simeonschaub](https://discourse.julialang.org/u/simeonschaub)\
**Post date:** [September 6, 2020, 1:27pm UTC](https://discourse.julialang.org/t/julia-equivalent-for-python-scipy-optimize-fsolve/46139/8 "2020-09-06T13:27:54Z")

</div>

[ModellingToolkit.jl](https://mtk.sciml.ai/stable/) also works quite well for this kind of manipulation:

```julia
julia> using ModelingToolkit

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

julia> eqs = [3x + 5y + 2z - 12, 2x + 5y - 4z - 9, 4x - y + 5z + 3]
3-element Array{Operation,1}:
 ((3x + 5y) + 2z) - 12
  ((2x + 5y) - 4z) - 9
   ((4x - y) + 5z) + 3

julia> M = get.(ModelingToolkit.jacobian(eqs, [x, y, z]))
3×3 Array{Int64,2}:
 3 5 2
 2 5 -4
 4 -1 5

julia> b = get.(substitute.(eqs, Ref([x, y, z] .=> 0)))
3-element Array{Int64,1}:
 -12
  -9
   3

julia> M \ -b
3-element Array{Float64,1}:
 -0.8918918918918918
  2.675675675675676
  0.6486486486486486

julia> substitute.(eqs, Ref([x, y, z] .=> ans))
3-element Array{ModelingToolkit.Constant,1}:
 ModelingToolkit.Constant(0.0)
 ModelingToolkit.Constant(0.0)
 ModelingToolkit.Constant(0.0)

```

To explicitely get the augmented matrix, you can just do the following:

```julia
julia> [M -b]
3×4 Array{Int64,2}:
 3 5 2 12
 2 5 -4 9
 4 -1 5 -3

```

---

_[View the full topic](https://discourse.julialang.org/t/julia-equivalent-for-python-scipy-optimize-fsolve/46139)._
