Как эффективно построить блочную матрицу следующей формы в JULIA? - PullRequest
0 голосов
/ 04 февраля 2019

Итак, я работаю над кодом, который требует от меня построения большой матрицы M с использованием меньших "квадратных" матриц J И M размеров nxn каждаяповторяется так:

Вот так должна выглядеть матрица!

т.е. с размерами M , такими, что M повторяется 'L' по диагонали, J ' повторяется по верхней второй диагонали и J по нижней второй диагонали.

Обратите внимание, чтоЯ работаю над Julia v 1.0.0 и, насколько я понимаю, в Julia нет прямых способов назначения блочных матриц, в отличие от Mathematica .

Я пытался использовать продукты Kronecker для решения своей проблемы:

 ?=Diagonal(ones(L)) #IDENTITY matrix of L x L size
 ?=kron(?,M)

При этом я могу сделать диагональную матрицу блоков M с маленькой матрицей M повторяется по диагонали.Но теперь, как мне разместить матрицы J и J ' вдоль его вторых диагоналей, как требуется?

1 Ответ

0 голосов
/ 04 февраля 2019

BlockArrays.jl (и, возможно, BlockBandedMatrices.jl ) должно быть тем, что вы ищете, поскольку это делает обработку структур блочной матрицы очень удобной.

Пример(с Strings с):

julia> using BlockArrays

julia> M = fill("M", 2,2);

julia> J = fill("J", 2,2);

julia> B = BlockArray{String}(undef_blocks, [2,2], [2,2])
4×4 BlockArray{String,2,Array{String,2}}:
 #undef  #undef  │  #undef  #undef
 #undef  #undef  │  #undef  #undef
 ────────────────┼────────────────
 #undef  #undef  │  #undef  #undef
 #undef  #undef  │  #undef  #undef

julia> setblock!(B, M, 1,1);

julia> setblock!(B, M, 2,2);

julia> setblock!(B, J, 1,2);

julia> setblock!(B, J, 2,1);

julia> B
4×4 BlockArray{String,2,Array{String,2}}:
 "M"  "M"  │  "J"  "J"
 "M"  "M"  │  "J"  "J"
 ──────────┼──────────
 "J"  "J"  │  "M"  "M"
 "J"  "J"  │  "M"  "M"

Для получения дополнительной информации ознакомьтесь с документацией пакета .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...