Commit a37be117 authored by Alberto Ramos's avatar Alberto Ramos

Corrected bug in call to fit_error

Thanks to Alejandro Saez Gonzalvo <asaez_@hotmail.com>

Soy Alejandro Sáez, el nuevo estudiante de doctorado de Gregorio
Herdoiza en el IFT. Te contacto porque hemos estado trabajando con
ADerrors ultimamente, y el otro día, haciendo unos fits con la función
fit_error, encontramos lo que creimos que era un pequeño
error. Concretamente queríamos hacer un fit correlado (usando una
matriz W como weight en el fit, en lugar de un vector). Llamamos a la
función de la siguiente forma:
(uprm,chiexp) = fit_error(chisq, coef(fit), udt, W=Wm) Sin embargo,
esto nos dio un error: ERROR: LoadError: TypeError: in keyword
argument W, expected Array{Float64,1}, got a value of type
Array{Float64,2} Este error solo aparece cuando el argumento Wm es una
matriz (incluso en el caso diagonal), y si le metemos un vector no hay
ningún problema. Lo solucionamos de la siguiente forma:
(uprm,chiexp) = fit_error(chisq, coef(fit), udt,
Dict{Int64,Vector{Float64}}(), Wm) Mirando el código de la función
fit_error(), creemos entender que debería funcionar omitiendo también
el argumento Dict{Int64,Vector{Float64}}(), pero en ese caso nos salta
el error. El código ya nos funciona, pero Gregorio me dijo que quizás
te interesaba conocer este comportamiento. Te mando el código entero
que daba error en caso de que sirva de aclaración.  PD: Igualmente, en
el caso de introducir una matriz Wm en lugar de un vector, la funcion
curve_fit tambien nos devuelve un error extraño: ERROR: LoadError:
MethodError: curve_fit(::typeof(lmfcn), ::Array{Float64,1},
::Array{Float64,1}, ::Array{Float64,2}, ::Array{Float64,1}) is
ambiguous. Candidates: curve_fit(model, xdata::AbstractArray,
ydata::AbstractArray, wt::AbstractArray{T,2}, p0; kwargs...) where T
in LsqFit at
/home/asaez/.julia/packages/LsqFit/wmSYK/src/curve_fit.jl:167
curve_fit(model, xdata::AbstractArray, ydata::AbstractArray,
wt::AbstractArray{T,N} where N, p0::AbstractArray; inplace, kwargs...)
where T in LsqFit at
/home/asaez/.julia/packages/LsqFit/wmSYK/src/curve_fit.jl:136 Possible
fix, define curve_fit(::Any, ::AbstractArray, ::AbstractArray,
::AbstractArray{T,2}, ::AbstractArray) where T
parent 25dfd2b2
......@@ -279,7 +279,7 @@ println("chi^2 / chi_exp^2: ", chisq(xp, value.(dt)), " / ", csqexp, " (dof: ",
function fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
wpm::Dict{Int64,Vector{Float64}};
wpm::Dict{Int64,Vector{Float64}},
W::Vector{Float64} = Vector{Float64}(),
chi_exp::Bool = true)
......@@ -342,7 +342,7 @@ function fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
wpm::Dict{Int64,Vector{Float64}},
W::Array{Float64, 2};
W::Array{Float64, 2},
chi_exp::Bool = true)
n = length(xp) # Number of fit parameters
......@@ -388,30 +388,16 @@ end
fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal};
W::Vector{Float64} = Vector{Float64}(),
chi_exp::Bool = true) =
fit_error(chisq, xp, data, Dict{Int64,Vector{Float64}}(), W=W, chi_exp=chi_exp)
fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
W::Array{Float64,2};
W::Union{Vector{Float64}, Array{Float64,2}} = Vector{Float64}(),
chi_exp::Bool = true) =
fit_error(chisq, xp, data, Dict{Int64,Vector{Float64}}(), W=W, chi_exp=chi_exp)
fit_error(chisq, xp, data, Dict{Int64,Vector{Float64}}(), W, chi_exp)
fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
wpm::Dict{String,Vector{Float64}};
W::Vector{Float64} = Vector{Float64}(),
W::Union{Vector{Float64}, Array{Float64,2}} = Vector{Float64}(),
chi_exp::Bool = true) =
fit_error(chisq, xp, data, dict_names_to_id(wpm), W=W, chi_exp=chi_exp)
fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
wpm::Dict{String,Vector{Float64}},
W::Array{Float64,2};
chi_exp::Bool = true) =
fit_error(chisq, xp, data, dict_names_to_id(wpm), W=W, chi_exp=chi_exp)
fit_error(chisq, xp, data, dict_names_to_id(wpm), W, chi_exp)
@doc raw"""
int_error(fint::Function, a, b, p::Vector{uwreal})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment