Обнаружение структуры и разреженности
Используя систему трассировки, предоставляемую выражениями Symbolics.jl, Symbolics.jl может автоматически определять шаблоны разреженности функций Julia. Более подробно эта функциональность описана в документе:
@article{gowda2019sparsity, title={Sparsity Programming: Automated Sparsity-Aware Optimizations in Differentiable Programming}, author={Gowda, Shashi and Ma, Yingbo and Churavy, Valentin and Edelman, Alan and Rackauckas, Christopher}, year={2019} }
Если вы используете эту функциональность, ссылайтесь на приведенный документ.
Обнаружение разреженности
#
Symbolics.jacobian_sparsity
— Function
jacobian_sparsity(
exprs::AbstractArray,
vars::AbstractArray
) -> SparseMatrixCSC{Bool, Int64}
Возвращает шаблон разреженности якобиана массива выражений относительно массива выражений переменных.
Аргументы
-
exprs
: массив символьных выражений. -
vars
: массив символьных переменных.
Примеры
julia> using Symbolics
julia> vars = @variables x₁ x₂;
julia> exprs = [2x₁, 3x₂, 4x₁ * x₂];
julia> Symbolics.jacobian_sparsity(exprs, vars)
3×2 SparseArrays.SparseMatrixCSC{Bool, Int64} with 4 stored entries:
1 ⋅
⋅ 1
1 1
jacobian_sparsity(
f!::Function,
output::AbstractArray,
input::AbstractArray,
args...;
kwargs...
) -> SparseMatrixCSC{Bool, Int64}
Возвращает шаблон разреженности якобиана изменяемой функции f!
.
Аргументы
-
f!
: функцияf!(output, input, args...; kwargs...)
на месте. -
output
: выходной массив. -
input
: входной массив.
Тип eltype output
и input
может быть либо символьным, либо примитивным.
Примеры
julia> using Symbolics
julia> f!(y, x) = y .= [x[2], 2x[1], 3x[1] * x[2]];
julia> output = Vector{Float64}(undef, 3);
julia> input = Vector{Float64}(undef, 2);
julia> Symbolics.jacobian_sparsity(f!, output, input)
3×2 SparseArrays.SparseMatrixCSC{Bool, Int64} with 4 stored entries:
⋅ 1
1 ⋅
1 1
#
Symbolics.hessian_sparsity
— Function
hessian_sparsity(
expr,
vars::AbstractVector;
full
) -> Union{SparseMatrixCSC{Bool, Int64}, SparseMatrixCSC{Int64, Int64}}
Возвращает шаблон разреженности гессиана выражения относительно массива выражений переменных.
Аргументы
-
expr
: символьное выражение. -
vars
: вектор символьных переменных.
Примеры
julia> using Symbolics
julia> vars = @variables x₁ x₂;
julia> expr = 3x₁^2 + 4x₁ * x₂;
julia> Symbolics.hessian_sparsity(expr, vars)
2×2 SparseArrays.SparseMatrixCSC{Bool, Int64} with 3 stored entries:
1 1
1 ⋅
hessian_sparsity(
f::Function,
input::AbstractVector,
args...;
full,
kwargs...
) -> Union{SparseMatrixCSC{Bool, Int64}, SparseMatrixCSC{Int64, Int64}}
Возвращает шаблон разреженности гессиана заданной функции f
.
Аргументы
-
f
: функцияf(input, args...; kwargs...)
не на месте. -
input
: вектор входных значений, тип eltype которого может быть либо символьным, либо примитивным.
Примеры
julia> using Symbolics
julia> f(x) = 4x[1] * x[2] - 5x[2]^2;
julia> input = Vector{Float64}(undef, 2);
julia> Symbolics.hessian_sparsity(f, input)
2×2 SparseArrays.SparseMatrixCSC{Bool, Int64} with 3 stored entries:
⋅ 1
1 1