Я хочу умножить матрицу на ее транспонированную матрицу, чтобы узнать, выполняется ли условие 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
.