Ошибка метода: отсутствие сопоставления методов не имеет значения (::Matrix{Float64}, ::Matrix{Float64})

#julia

Вопрос:

Проблема квази-Ньютона с кодом

Это код для квази-ньютоновской задачи. Для этого я получаю сообщение об ошибке

 MethodError: no method matching isless(::Matrix{Float64}, ::Matrix{Float64})
Closest candidates are:
  isless(::Any, ::Missing) at missing.jl:88
  isless(::Missing, ::Any) at missing.jl:87

Stacktrace:
  [1] <(x::Matrix{Float64}, y::Matrix{Float64})
    @ Base .operators.jl:279
  [2] >(x::Matrix{Float64}, y::Matrix{Float64})
    @ Base .operators.jl:305
  [3] bracket_minimum(f::var"#45#46"{typeof(k), Matrix{Float64}, Matrix{Float64}}, x::Int64; s::Float64, k::Float64)
    @ Main .In[122]:12
  [4] bracket_minimum(f::Function, x::Int64) (repeats 2 times)
    @ Main .In[122]:10
  [5] line_search(f::typeof(k), x::Matrix{Float64}, d::Matrix{Float64})
    @ Main .In[122]:35
  [6] step!(M::BFGS, f::Function, ∇f::typeof(l), x::Matrix{Float64})
    @ Main .In[122]:48
  [7] quasi_method(f::typeof(k), g::Function, x0::Matrix{Float64})
    @ Main .In[122]:67
  [8] top-level scope
    @ In[128]:3
  [9] eval
    @ .boot.jl:360 [inlined]
 [10] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base .loading.jl:1116
 

Я все еще не мог понять, в чем проблема со строками 10 и 12. Так помогите мне здесь? Возможно, это связано с используемой нами матрицей или некоторыми другими проблемами, я не смог отладить.

Ответ №1:

Вы забыли векторизовать свой код. Смотрите Пример ниже для справки:

 julia> a=[1. 2.; 3. 4.]; b=[1. 3.; 5. 7.];

julia> a < b
ERROR: MethodError: no method matching isless(::Matrix{Float64}, ::Matrix{Float64})
 

Теперь давайте добавим точку для векторизации:

 julia> a .< b
2×2 BitMatrix:
 0  1
 1  1
 

Если вы хотите проверить, все ли элементы ниже, используйте all :

 julia> all(a .< b)
false
 

В вашем коде bracket_minimum выполняется сравнение yc > yb , и эти значения являются матрицами, в то время как ваш код ожидает скаляров.

Комментарии:

1. Спасибо за помощь. Теперь это работает.