Большинство команд в 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
}
Мощная техника, которая может оказаться очень полезной.