# Solve can not solve nonlinear symbolic equations

**URL:** <https://discourse.julialang.org/t/solve-can-not-solve-nonlinear-symbolic-equations/122942>\
**Category:** Modelling & Simulations\
**Created:** [November 22, 2024, 9:39am UTC](https://discourse.julialang.org/t/solve-can-not-solve-nonlinear-symbolic-equations/122942 "2024-11-22T09:39:04Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Bart\_van\_de\_Lint](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bart_van_de_lint/32/212161_2.png) [@Bart\_van\_de\_Lint](https://discourse.julialang.org/u/Bart_van_de_Lint)\
**Post date:** [November 22, 2024, 9:39am UTC](https://discourse.julialang.org/t/solve-can-not-solve-nonlinear-symbolic-equations/122942/1 "2024-11-22T09:39:04Z")

</div>

It seems like `symbolic_solve` doesn’t symbolically solve nonlinear equations yet. Is this a feature that will be added in the future, so that I for example could do the following? Or is there some alternative way to do this?

```julia
using Symbolics, LinearAlgebra, Nemo

@variables e_x[1:3]
heading = 0.01

eqs = [
    atan(-e_x[2]/-e_x[1]) ~ heading
    norm(e_x) ~ 1.0
    e_x[2] ~ 1.0
]

eqs = Symbolics.scalarize.(reduce(vcat, Symbolics.scalarize.(eqs)))
println("Equations: ", eqs)
println("Solution of e_x[1]: ", symbolic_solve(eqs, e_x[1]))
println("Solution of e_x: ", symbolic_solve(eqs, e_x))
println("Solution of e_x[2] in equation $(eqs[1]): ", symbolic_solve(eqs[1], e_x[2]))
println("Solution of e_x[2] in equation $(eqs[2]): ", symbolic_solve(eqs[2], e_x[2]))
println("Solution of e_x[2] in equation $(eqs[3]): ", symbolic_solve(eqs[3], e_x[2]))

```

output:

```julia
Equations: Equation[atan(e_x[2] / e_x[1]) ~ 0.01, sqrt(abs2(e_x[3]) + abs2(e_x[1]) + abs2(e_x[2])) ~ 1.0, e_x[2] ~ e_x[1]]
┌ Warning: Solve can not solve this input currently
└ @ Symbolics ~/.julia/packages/Symbolics/GYV9b/src/solver/main.jl:169
Solution of e_x[1]: nothing
┌ Warning: Solve can not solve this input currently
└ @ Symbolics ~/.julia/packages/Symbolics/GYV9b/src/solver/main.jl:169
Solution of e_x: nothing
┌ Warning: Var not present in given expression
└ @ Symbolics ~/.julia/packages/Symbolics/GYV9b/src/solver/ia_main.jl:275
Solution of e_x[2] in equation atan(e_x[2] / e_x[1]) ~ 0.01: Any[]
┌ Warning: Var not present in given expression
└ @ Symbolics ~/.julia/packages/Symbolics/GYV9b/src/solver/ia_main.jl:275
Solution of e_x[2] in equation sqrt(abs2(e_x[3]) + abs2(e_x[1]) + abs2(e_x[2])) ~ 1.0: Any[]
Solution of e_x[2] in equation e_x[2] ~ e_x[1]: SymbolicUtils.BasicSymbolic{Real}[e_x[1]]

```

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [November 22, 2024, 10:16am UTC](https://discourse.julialang.org/t/solve-can-not-solve-nonlinear-symbolic-equations/122942/2 "2024-11-22T10:16:27Z")

</div>

> [@Bart\_van\_de\_Lint](#):
>
> doesn’t symbolically solve nonlinear equations yet

Note that there is no generic algorithm for solving nonlinear systems. Some special cases are handled by each CAS, but it is very easy to run into systems that don’t have a closed-form solution, or the CAS cannot obtain it.

---

<div class="post-metadata">

**Author:** ![sumiya11](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sumiya11/32/207147_2.png) [@sumiya11](https://discourse.julialang.org/u/sumiya11)\
**Post date:** [November 22, 2024, 11:27am UTC](https://discourse.julialang.org/t/solve-can-not-solve-nonlinear-symbolic-equations/122942/3 "2024-11-22T11:27:37Z")

</div>

We could implement this in Symbolics. It is definitely worth opening an issue.

For future reference, Maple seems to produce a sensible answer

```julia
solve([
    arctan((-e_x[2])/(-e_x[1])) = 0.01,
    Norm(Vector(3,symbol=e_x)) = 1,
    e_x[2] = 1
]);

{e_x[1] = 99.99666664, e_x[2] = 1., e_x[3] = 99.99666664*I}, {e_x[1] = 99.99666664, e_x[2] = 1., e_x[3] = -99.99666664*I}

```
