как умножить матрицу на ее транспонированную?

как умножить матрицу на ее транспонированную?

Я хочу умножить матрицу на ее транспонированную матрицу, чтобы узнать, выполняется ли условие Q t Q=I.

Однако когда я вычисляю это в Matlab, я получаю нечто странное, используя концепцию, о которой я не знаю: conj(x).

  • Итак, как умножить матрицу на ее транспонированную?

Вот код, который я попробовал:

>> syms x
>> A=[cos(x) -sin(x);
sin(x) cos(x)]

A =

[ cos(x), -sin(x)]
[ sin(x),  cos(x)]

>> A'*A

ans =

[ cos(conj(x))*cos(x) + sin(conj(x))*sin(x), sin(conj(x))*cos(x) - cos(conj(x))*sin(x)]
[ cos(conj(x))*sin(x) - sin(conj(x))*cos(x), cos(conj(x))*cos(x) + sin(conj(x))*sin(x)]

решение1

Я понимаю, что это старый вопрос, но, поскольку бот сообщества намерен поднять его, стоит на него ответить.

Причина, по которой MATLAB выдает вам conjвыходные данные, заключается в том, что вы используете оператор комплексного сопряжения и транспонирования '(он же ctranspose()).

Поскольку это символьная математика, MATLAB не делает никаких предположений относительно того, xявляется ли число действительным или комплексным, поэтому он должен оставить conj()в выходных данных — для действительного числа функция ничего не делает, для комплексного она возьмет сопряженное значение.

Если вы используете .'вместо этого, это обычное транспонирование матрицы (также известное как transpose()). В результате MATLAB не добавляет никаких комплексно-сопряженных вызовов к выходу, поскольку он игнорирует содержимое массива при выполнении транспонирования.

>> A'*A
 
ans =
 
[ cos(conj(x))*cos(x) + sin(conj(x))*sin(x), sin(conj(x))*cos(x) - cos(conj(x))*sin(x)]
[ cos(conj(x))*sin(x) - sin(conj(x))*cos(x), cos(conj(x))*cos(x) + sin(conj(x))*sin(x)]

>> A.'*A
 
ans =
 
[ cos(x)^2 + sin(x)^2,                   0]
[                   0, cos(x)^2 + sin(x)^2]

Примечание: cos(x)^2 + sin(x)^2 == 1, поэтому ans == [1 0;0 1] == I.

Связанный контент