2011-06-15 5 views
4

В следующем бит кода Mathematicaпроизведение трех матриц заканчивается нечетной блочной матрицей?

a1 = {{0, -I}, {I, 0}} 
a2 = {{0, 1}, {1, 0}} 
a3 = {{1, 0}, {0, -1}} 
c = I*a1*a2 // MatrixForm 
d = c*a3 // MatrixForm 

Дисплей D показывает, как два по две матрицы а, где 1,1 и 2,2 элементы сами являются матрицами 2х2, тогда как я ожидать, что она будет простая старая 2x2-матрица скаляров?

ответ

5
use() to protect expression from MatrixFrom which is a wrapper. 
use '.' for matrix multiplication. Not '*' 

a1 = {{0, -I}, {I, 0}} 
a2 = {{0, 1}, {1, 0}} 
a3 = {{1, 0}, {0, -1}} 
(c = I a1.a2) // MatrixForm 
(d = c.a3) // MatrixForm 

Это выход я получаю за д:

(1 0 
0 1) 
+0

Вы избили меня «---» так много! (Кроме того, [нет необходимости подписывать свои сообщения в SO] (http://meta.stackexchange.com/questions/2950/should-hi-thanks-and-taglines-and-salutations-be-removed-from- сообщения), я удалил вашу подпись.) – Simon

5

Это один из классических подводных камней в Mathematica.

Обертка дисплея MatrixForm имеет более высокий приоритет, чем оператор Set (=).

Предполагая (на основе выбора тегов), которые предназначены для использования матричного умножения Dot (.) вместо Times (*), я хотел бы написать

a1 = {{0, -I}, {I, 0}} 
a2 = {{0, 1}, {1, 0}} 
a3 = {{1, 0}, {0, -1}} 
(c = I a1.a2) // MatrixForm 
(d = c.a3) // MatrixForm 

, который возвращает для c и d соответственно:

(1 0 
0 -1) 

(1 0 
0 1) 

Edit:
Я забыл упомянуть, если ввести

c = I a1.a2 // MatrixForm 

Тогда быстрый взгляд на FullForm из c покажет вам, что проблема:

In[6]:= FullForm[c] 
Out[6]//FullForm= MatrixForm[List[List[1,0],List[0,-1]]] 

Вы можете видеть, что он имеет Head[c] == MatrixForm и так он не будет хорошо играть с другими матрицами.

+3

@Peeter Значение «FullForm» не может быть подчеркнуто достаточно. Вы будете использовать его, когда вам нужно понять какой-либо неожиданный результат. –

+2

@belisarius: За исключением объектов «Graph» версии 8. Где 'FullForm' действует больше как метод' __repr __ (self) 'python, он дает вам выход, который позволит вам воссоздать объект. :( – Simon

+0

@Simon Yeah. Если WRI идет именно так, многие задачи станут жесткими :) –

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