#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. Спасибо за помощь. Теперь это работает.