Контейнер для множественных :: math :: linearalgebra :: mkMatrices в TCL - PullRequest
0 голосов
/ 17 марта 2019

Я хотел бы разделить большее ::math::linearalgebra::mkMatrix на несколько меньших и сохранить их в списке или любом другом контейнере. К сожалению, мне не удалось найти способ сделать это с помощью списков. Можно ли хранить несколько ::math::linearalgebra::mkMatrices в списке, массиве или даже в словаре.

Я пытался сохранить имена в списке, а затем всякий раз, когда мне понадобился mkMtarix, я использовал [lindex matrices 0]. Однако это не сработало.

Есть ли хороший материал по этому поводу?

1 Ответ

1 голос
/ 17 марта 2019

Большинство команд в math::linearalgebra предполагают использование имени переменной, содержащей матрицу.Это означает, что, хотя их значение может хорошо отображаться в списке для хранения, вы не можете по-настоящему манипулировать ими таким образом. Вам гораздо лучше использовать массив Tcl для того, что вы делаете. Тогда вы можете перейти:

# An all-zero 3x3 matrix
set collection(0) [math::linearalgebra::mkMatrix 3 3 0.0]

# Turn it into an identity matrix; notice the use of a variable to name the element
set matrixID 0
for {set i 0} {$i < 3} {incr i} {
    math::linearalgebra::setelem collection($matrixID) $i $i 1.0
}

Единственное, о чем следует помнить, это то, что элементы TclМассив не упорядочен, но в качестве компенсации вы можете использовать нетривиальные ключи в массиве, а также простые целые числа.Это означает, что вы можете использовать составные ключи, такие как 1,2 (или fred,wilma), которые вы можете сгенерировать как $x,$y, то есть, как в:

set matrixX 1
set matrixY 2
for {set i 0} {$i < 3} {incr i} {
    math::linearalgebra::setelem collection($matrixX,$matrixY) $i $i 1.0
}

Мощная техника, которая может оказаться очень полезной.

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