# Confusing dimension mismatch error

**URL:** <https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035>\
**Category:** General Usage\
**Created:** [August 8, 2021, 6:43pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035 "2021-08-08T18:43:48Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![usman0311](https://avatars.discourse-cdn.com/v4/letter/u/2bfe46/32.png) [@usman0311](https://discourse.julialang.org/u/usman0311)\
**Post date:** [August 8, 2021, 6:43pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035/1 "2021-08-08T18:43:48Z")

</div>

I am trying to extract fitting parameters, but I am unable to understand the error, it looks like dimensions are same. Both En and abs are row vector of size 601.

```julia
using LsqFit, DataFrames,DelimitedFiles, QuadGK

α(E,p) = ( p[1].*sqrt(p[2])./(E.*(2π) )).*(sum(m-> (2*p[2]/(m^3))*(1/p[4])*exp(-((E .- (p[3] - p[2]/(m^2)))^2)/(2*(p[4]^2))),1:1000 ) .+ (1/p[5]).*quadgk(x-> exp.(-(x .- E).^2/(2*p[5].^2))./(1 .- exp.(-2π*sqrt(p[2]./(x .- p[3]))) ),p[3],Inf,rtol=1e-3 ) )

p0=[1e+6,0.08,5.1,0.2,0.2]

fit=curve_fit(α,En,abs,p0)

DimensionMismatch("A has dimensions (1,601) but B has dimensions (1,601)")

Stacktrace:
  [1] gemm_wrapper!(C::Matrix{Float64}, tA::Char, tB::Char, A::Matrix{Float64}, B::Matrix{Float64}, _add::LinearAlgebra.MulAddMul{true, true, Bool, Bool})
    @ LinearAlgebra C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\LinearAlgebra\src\matmul.jl:643
  [2] mul!
    @ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\LinearAlgebra\src\matmul.jl:169 [inlined]
  [3] mul!
    @ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\LinearAlgebra\src\matmul.jl:275 [inlined]
  [4] *
    @ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\LinearAlgebra\src\matmul.jl:160 [inlined]
  [5] power_by_squaring(x_::Matrix{Float64}, p::Int64)
    @ Base .\intfuncs.jl:262
  [6] ^
    @ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\LinearAlgebra\src\dense.jl:442 [inlined]
  [7] macro expansion
    @ .\none:0 [inlined]
  [8] literal_pow
    @ .\none:0 [inlined]
  [9] (::var"#11#13"{LinearAlgebra.Transpose{Float64, Vector{Float64}}, Vector{Float64}})(m::Int64)
    @ Main .\In[20]:1
 [10] mapreduce_impl(f::var"#11#13"{LinearAlgebra.Transpose{Float64, Vector{Float64}}, Vector{Float64}}, op::typeof(Base.add_sum), A::UnitRange{Int64}, ifirst::Int64, ilast::Int64, blksize::Int64)
    @ Base .\reduce.jl:242
 [11] mapreduce_impl
    @ .\reduce.jl:257 [inlined]
 [12] _mapreduce(f::var"#11#13"{LinearAlgebra.Transpose{Float64, Vector{Float64}}, Vector{Float64}}, op::typeof(Base.add_sum), #unused#::IndexLinear, A::UnitRange{Int64})
    @ Base .\reduce.jl:415
 [13] _mapreduce_dim
    @ .\reducedim.jl:318 [inlined]
 [14] #mapreduce#672
    @ .\reducedim.jl:310 [inlined]
 [15] mapreduce
    @ .\reducedim.jl:310 [inlined]
 [16] #_sum#682
    @ .\reducedim.jl:878 [inlined]
 [17] _sum
    @ .\reducedim.jl:878 [inlined]
 [18] #sum#680
    @ .\reducedim.jl:874 [inlined]
 [19] sum
    @ .\reducedim.jl:874 [inlined]
 [20] α(E::LinearAlgebra.Transpose{Float64, Vector{Float64}}, p::Vector{Float64})
    @ Main .\In[20]:1
 [21] #18
    @ C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:114 [inlined]
 [22] lmfit(f::LsqFit.var"#18#20"{typeof(α), LinearAlgebra.Transpose{Float64, Vector{Float64}}, Vector{Float64}}, p0::Vector{Float64}, wt::Vector{Float64}; autodiff::Symbol, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ LsqFit C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:61
 [23] lmfit
    @ C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:61 [inlined]
 [24] curve_fit(model::typeof(α), xdata::LinearAlgebra.Transpose{Float64, Vector{Float64}}, ydata::Vector{Float64}, p0::Vector{Float64}; inplace::Bool, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ LsqFit C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:115
 [25] curve_fit(model::Function, xdata::LinearAlgebra.Transpose{Float64, Vector{Float64}}, ydata::Vector{Float64}, p0::Vector{Float64})
    @ LsqFit C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:106
 [26] top-level scope
    @ In[20]:3
 [27] eval
    @ .\boot.jl:360 [inlined]
 [28] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base .\loading.jl:1116
```

---

<div class="post-metadata">

**Author:** ![mcabbott](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mcabbott/32/6603_2.png) [@mcabbott](https://discourse.julialang.org/u/mcabbott)\
**Post date:** [August 8, 2021, 7:22pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035/2 "2021-08-08T19:22:04Z")

</div>

I think this is the same issue as here: [Error in mul!(c,a,b) if size(b) = (n,1) - #8 by lmiq](https://discourse.julialang.org/t/error-in-mul-c-a-b-if-size-b-n-1/47999/8)

tl;dr is that LsqFit’s functions accept anything, but they only actually work with vector input. You probably want to call `vec(p0)` before passing it in, and make sure your function `En` accepts that.

---

<div class="post-metadata">

**Author:** ![usman0311](https://avatars.discourse-cdn.com/v4/letter/u/2bfe46/32.png) [@usman0311](https://discourse.julialang.org/u/usman0311)\
**Post date:** [August 8, 2021, 7:41pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035/3 "2021-08-08T19:41:14Z")

</div>

@mcabbott Thanks for the quick reply, I tried to vectorize the input but now it gives another dimension mismatch error.

```julia
fit=curve_fit(α,vec(En),abs,p0)

DimensionMismatch("arrays could not be broadcast to a common size; got a dimension with lengths 601 and 2")
Stacktrace:
  [1] _bcs1
    @ .\broadcast.jl:501 [inlined]
  [2] _bcs
    @ .\broadcast.jl:495 [inlined]
  [3] broadcast_shape
    @ .\broadcast.jl:489 [inlined]
  [4] combine_axes
    @ .\broadcast.jl:484 [inlined]
  [5] _axes
    @ .\broadcast.jl:209 [inlined]
  [6] axes
    @ .\broadcast.jl:207 [inlined]
  [7] combine_axes
    @ .\broadcast.jl:484 [inlined]
  [8] instantiate
    @ .\broadcast.jl:266 [inlined]
  [9] materialize
    @ .\broadcast.jl:883 [inlined]
 [10] α(E::Vector{Float64}, p::Vector{Float64})
    @ Main .\In[30]:3
 [11] #18
    @ C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:114 [inlined]
 [12] lmfit(f::LsqFit.var"#18#20"{typeof(α), Vector{Float64}, Vector{Float64}}, p0::Vector{Float64}, wt::Vector{Float64}; autodiff::Symbol, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ LsqFit C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:61
 [13] lmfit
    @ C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:61 [inlined]
 [14] curve_fit(model::typeof(α), xdata::Vector{Float64}, ydata::Vector{Float64}, p0::Vector{Float64}; inplace::Bool, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ LsqFit C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:115
 [15] curve_fit(model::Function, xdata::Vector{Float64}, ydata::Vector{Float64}, p0::Vector{Float64})
    @ LsqFit C:\Users\usmaa\.julia\packages\LsqFit\hgZQe\src\curve_fit.jl:106
 [16] top-level scope
    @ In[32]:1
 [17] eval
    @ .\boot.jl:360 [inlined]
 [18] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base .\loading.jl:1116

I know my input arrays are of length 601, what dimension this 2 represents here
```

---

<div class="post-metadata">

**Author:** ![mcabbott](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mcabbott/32/6603_2.png) [@mcabbott](https://discourse.julialang.org/u/mcabbott)\
**Post date:** [August 8, 2021, 7:57pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035/4 "2021-08-08T19:57:03Z")

</div>

The 2 is surprising, I don’t know!

Maybe add some fake data (and triple-backticks ````` around code) to the example? It’s easier for people to help if this can be run on a fresh session.

---

<div class="post-metadata">

**Author:** ![usman0311](https://avatars.discourse-cdn.com/v4/letter/u/2bfe46/32.png) [@usman0311](https://discourse.julialang.org/u/usman0311)\
**Post date:** [August 8, 2021, 8:36pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035/5 "2021-08-08T20:36:15Z")

</div>

Thanks have resolved the issue, 2 was because of quadgk. But I think LsqFit.jl is not a good package for this kind of curve fit and parameter extraction exercise, could you suggest any other julia package for the same

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [August 8, 2021, 8:41pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035/6 "2021-08-08T20:41:49Z")

</div>

> [@usman0311](#):
>
> Both En and abs are row vector of size 601.

You could create a MWE providing for instance `En` and `abs` of small sizes, say 10.

---

<div class="post-metadata">

**Author:** ![usman0311](https://avatars.discourse-cdn.com/v4/letter/u/2bfe46/32.png) [@usman0311](https://discourse.julialang.org/u/usman0311)\
**Post date:** [August 8, 2021, 9:04pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035/7 "2021-08-08T21:04:51Z")

</div>

@rafael.guerra what is MWE

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [August 8, 2021, 9:06pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035/8 "2021-08-08T21:06:23Z")

</div>

Please read [here](https://discourse.julialang.org/t/please-read-make-it-easier-to-help-you/14757).

---

<div class="post-metadata">

**Author:** ![usman0311](https://avatars.discourse-cdn.com/v4/letter/u/2bfe46/32.png) [@usman0311](https://discourse.julialang.org/u/usman0311)\
**Post date:** [August 8, 2021, 9:13pm UTC](https://discourse.julialang.org/t/confusing-dimension-mismatch-error/66035/9 "2021-08-08T21:13:02Z")

</div>

Thanks all, i have solved my problem. Normallization works here to get it converged, normallize so that all parameters are in the similar range.
