# Problem computing Jacobian with Symbolics.jl 3.3

**URL:** <https://discourse.julialang.org/t/problem-computing-jacobian-with-symbolics-jl-3-3/68336>\
**Category:** Modelling & Simulations\
**Tags:** symbolics\
**Created:** [September 17, 2021, 1:53pm UTC](https://discourse.julialang.org/t/problem-computing-jacobian-with-symbolics-jl-3-3/68336 "2021-09-17T13:53:09Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![prittjam](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/prittjam/32/21267_2.png) [@prittjam](https://discourse.julialang.org/u/prittjam)\
**Post date:** [September 17, 2021, 1:53pm UTC](https://discourse.julialang.org/t/problem-computing-jacobian-with-symbolics-jl-3-3/68336/1 "2021-09-17T13:53:09Z")

</div>

I’m using Julia v.1.6.2 and the package Symbolic v.3.3. I have a simple script to compute that Jacobian that gives an error:

```julia
typeusing Symbolics
using LinearAlgebra

renormI(x) = x ./ x[[end],:]
homogenize(x) = [x; ones(1,size(x,2))]
cross_product_matrix(v) = [0 -v[3] v[2]; v[3] 0 -v[1]; -v[2] v[1] 0]

@variables H[1:3,1:3]
@variables x[1:3] 

xp = H*x
J = Symbolics.jacobian(xp,x)

```

which gives the error

```julia
MethodError: no method matching similar(::Type{Matrix{Num}}, ::Tuple{UnitRange{Int64}, UnitRange{Int64}})
Closest candidates are:
  similar(!Matched::AbstractArray{T, N} where N, ::Tuple) where T at abstractarray.jl:740
  similar(::Type{A}, !Matched::Type{T}, !Matched::StaticArrays.Size{S}) where {A<:Array, T, S} at /home/jbpritts/.julia/packages/StaticArrays/vxjOO/src/abstractarray.jl:163
  similar(::Type{T}, !Matched::Union{Integer, AbstractUnitRange}...) where T<:AbstractArray at abstractarray.jl:783
  ...

_array_for(#unused#::Type{Num}, itr::Base.Iterators.ProductIterator{Tuple{Symbolics.Arr{Num, 1}, Symbolics.Arr{Num, 1}}}, #unused#::Base.HasShape{2}) at array.jl:670
jacobian(ops::Symbolics.Arr{Num, 1}, vars::Symbolics.Arr{Num, 1}; simplify::Bool) at diff.jl:356
jacobian(ops::Symbolics.Arr{Num, 1}, vars::Symbolics.Arr{Num, 1}) at diff.jl:356
top-level scope at make_cov_expressions.jl:12
eval at boot.jl:360 [inlined]
eval_in_module(fully_qualified_module_name::Vector{Symbol}, expr::Expr) at JuliaSnail.jl:160
eval_tmpfile(tmpfile::String, modpath::Vector{Symbol}, realfile::String, linenum::Int64) at JuliaSnail.jl:190
top-level scope at none:1
eval at boot.jl:360 [inlined]
eval_in_module(fully_qualified_module_name::Vector{Symbol}, expr::Expr) at JuliaSnail.jl:160
macro expansion at JuliaSnail.jl:698 [inlined]
(::Main.JuliaSnail.var"#28#32"{Sockets.TCPSocket})() at task.jl:411e

```

---

<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:** [September 17, 2021, 2:59pm UTC](https://discourse.julialang.org/t/problem-computing-jacobian-with-symbolics-jl-3-3/68336/2 "2021-09-17T14:59:58Z")

</div>

`collect(x)` first?

---

<div class="post-metadata">

**Author:** ![prittjam](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/prittjam/32/21267_2.png) [@prittjam](https://discourse.julialang.org/u/prittjam)\
**Post date:** [September 17, 2021, 3:46pm UTC](https://discourse.julialang.org/t/problem-computing-jacobian-with-symbolics-jl-3-3/68336/3 "2021-09-17T15:46:57Z")

</div>

Can you explain why this is needed or point to some documentation? I don’t understand what is expected.

Thanks.

---

<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:** [September 17, 2021, 3:50pm UTC](https://discourse.julialang.org/t/problem-computing-jacobian-with-symbolics-jl-3-3/68336/4 "2021-09-17T15:50:56Z")

</div>

[https://symbolics.juliasymbolics.org/dev/manual/arrays/#Scalar-indexing-and-scalarization-1](https://symbolics.juliasymbolics.org/dev/manual/arrays/#Scalar-indexing-and-scalarization-1)

It’s just a quick way to scalarize.

---

<div class="post-metadata">

**Author:** ![prittjam](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/prittjam/32/21267_2.png) [@prittjam](https://discourse.julialang.org/u/prittjam)\
**Post date:** [September 17, 2021, 3:56pm UTC](https://discourse.julialang.org/t/problem-computing-jacobian-with-symbolics-jl-3-3/68336/5 "2021-09-17T15:56:37Z")

</div>

Ok, thanks, I thought it would be able to parse the symbolic vector. But now I try to do some computation and compute the Jacobian and again I get a failure. I suspect because v is some expression.

```julia
using Symbolics
using LinearAlgebra

renormI(x) = x ./ x[3,:]
homogenize(x) = [x; ones(1,size(x,2))]
cross_product_matrix(v) = [0 -v[3] v[2]; v[3] 0 -v[1]; -v[2] v[1] 0]

@variables H[1:3,1:3]
@variables u[1:3]

up = H*u
v = renormI(up)
dx = collect(x)
J = Symbolics.jacobian(v,dx)

```

Afterward I would like to do common subexpression elimination and then replace the subexpressions and generate code. I’m just starting with Symbolics.jl to see if I can get off of MATLAB 🙂

---

<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:** [September 20, 2021, 7:59pm UTC](https://discourse.julialang.org/t/problem-computing-jacobian-with-symbolics-jl-3-3/68336/6 "2021-09-20T19:59:39Z")

</div>

Make an issue for this one. I haven’t run it but I’m busy and don’t want it to get lost. If you make an issue it can get checked and added to the tests.
