1

Я пишу выпуклый решатель, для того, чтобы понять, что он решает обычные наименьшие квадраты: найдите x, который минимизирует || b-Ax ||^2. Так что мой вызов функции будет выглядетьПеременные аргументы ключевого слова с переменными размерами в Julia

x = optim(A, b) 

Я хотел бы быть в состоянии использовать прогреваться начинается, когда они полезны, чтобы обеспечить хорошее начальное приближение к решению. Так что-то вроде

x = optim(A, b; w=some_starting_value) 

Моя проблема заключается в том, что если я хочу, чтобы использовать значение по умолчанию, some_starting_value должен иметь длину, равную числу столбцов в A, который выбирается пользователем. В R можно сделать что-то вроде

x = optim(A, b; w=ncols(A)) 

Существует ли аналогичная функциональность в Джулии? Мое текущее решение сделать что-то вроде

х = Optim (А, Ь, ш = 0)

, а затем проверить, если w != 0 и установить его, правильный вектор размер внутри функции optim. Но это кажется взломанным и (я полагаю) беспорядок с устойчивостью типа.

Есть ли простой способ указать аргумент ключевого слова, размер которого зависит от требуемого аргумента?

Редактировать Похоже, что-то вроде

function foo{T<:Real}(A::Array{T,2}; w=zeros(T,size(x,2))) 
    println("$x") 
    println("$y") 
end 

будет делать трюк.

ответ

4

Оказывается, что параметры по умолчанию в Джулию могут быть выражением, содержащее значения других параметров:

julia> a(x, y=2*x) = println("$x, $y") 
a (generic function with 2 methods) 

julia> a(10) 
10, 20 

Кроме выражение параметров по умолчанию может выполнять вызовы других функций:

julia> b(x) = sqrt(x) 
b (generic function with 1 method) 

julia> a(x, y=b(x)) = println("$x, $y") 
a (generic function with 2 methods) 

julia> a(100) 
100, 10.0 

 Смежные вопросы

  • Нет связанных вопросов^_^