Hello! I am using value function iteration to maximize a Bellman equation. When I check the difference between two vectors then take the absolute value, I get an error from the “di” line:
subt = vnew - v
println(subt)
di = abs.(subt)
v = vnew
For context, “subt” looks like:
[41474.08152719693 46131.513156937144; 42846.34653896693 47535.076846955286; 45098.84448852737
MethodError: no method matching isless(::Float64, ::Matrix{Float64})
Closest candidates are:
isless(::T, ::T) where T<:Union{Float16, Float32, Float64} at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/float.jl:460
isless(::AbstractFloat, ::AbstractFloat) at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/operators.jl:184
isless(::Real, ::AbstractFloat) at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/operators.jl:185
But
It’s probably not hard to track this down. Maybe someone else can see the issue already; I don’t. Some things that might help
- the expression for
subt
that you gave is incomplete. What is the full expression?
- You wrote “But”… Is something missing?
Perhaps some context is missing from your post. I have no problems (v 1.8.1, Intel Mac)
julia> v=rand(3); vnew=rand(3); subt=vnew-v;
julia> println(subt)
[2.32118e-01, -6.61210e-02, 2.67815e-01]
julia> di=abs.(subt);
julia> v = vnew;
julia> di
3-element Vector{Float64}:
2.32118e-01
6.61210e-02
2.67815e-01
You don’t happen to have a variable called abs
or otherwise accidentally redefined the abs
function?
What’s the full stacktrace?
1 Like
abs.(subt)
is the elementwise absolute value, which returns a vector. It sounds like you want the norm of the difference, i.e. a single number norm(vnew - v)
. (The norm
function is provided by the LinearAlgebra
standard library.)
(Your MethodError: no method matching isless
sounds like it is coming from a later line in your code, where you are comparing di
to a scalar, e.g. you have di ≤ sometolerance
, which fails because you can’t compare a vector to a scalar.)
3 Likes