как сгенерировать карту "exchange" или "своп" карту - PullRequest
0 голосов
/ 26 сентября 2011

Я ищу простой способ создать простую линейную карту в Octave.Матрица, которая мне нужна, назовите ее sigma (n) , определяется следующим свойством: для всех матриц A и B (оба размера n) мыиметь уравнение:
sigma(n) * kron(A,B) = kron(B,A) * sigma(n)

Например,
sigma(2) = [1,0,0,0; 0,0,1,0; 0,1,0,0; 0,0,0,1].

Существует ли простая функция для sigma(n)?

Для моих целей n будет довольно небольшим, менее 50, поэтому эффективность не имеет значения.

РЕДАКТИРОВАТЬ: теперь с правильным определяющим уравнением

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Я понимаю, что отвечать на свой вопрос плохо, но с небольшим количеством царапин на голове мне удалось явно сгенерировать матрицу:

function sig = sigma_(n) 
  sig = zeros(n^2,n^2);
  for i = 0:(n-1)
    for j = 0:(n-1)
      sig(i*n + j + 1, i+ (j*n) + 1) = 1;
    endfor
  endfor
endfunction

Если у кого-то есть более аккуратный способ сделать это, мне все равно интересно.

0 голосов
/ 26 сентября 2011

Интересный вопрос!

Не думаю, что то, что вы спрашиваете, вполне возможно.Однако два произведения Кронекера схожи по матрице перестановок, т. Е. Один имеет:

kron(A,B) = P kron(B,A) P^{-1}

Эта матрица перестановок такова, что значение Px получается путем помещения x в строку матрицы с помощьюстроки и сложение столбцов этой результирующей матрицы вместе.

Редактировать Доказательство, которое вы запрашиваете, невозможно.Рассмотрим матрицы

A = 1 1       B = 1 0
    1 1           0 0

Тогда два произведения Кронекера:

1 1 0 0      1 0 1 0
1 1 0 0      0 0 0 0
0 0 0 0      1 0 1 0
0 0 0 0      0 0 0 0

Предположим, вы умножаете первую матрицу слева на любую сигма матрицы: последняядва столбца останутся равными нулю, поэтому результат не может быть равен второй матрице.QED.

...