Аджатная матрица в октаве - PullRequest
3 голосов
/ 15 декабря 2010

есть ли в октаве gnu какая-либо функция, которая присоединяет матрицу (аналогично присоединению в matlab и т. Д.)?

1 Ответ

8 голосов
/ 15 декабря 2010

адъюгат вероятно не тот, который вы на самом деле хотите.

Если вы хотите нормальное сопряженное (сопряженное транспонирование), то x' выдаст его вам за x. (Несопряженная транспонирование - x.', или transpose(x). conj(x) дает комплексное сопряжение, а также работает с матрицами и векторами.)

Если вам на самом деле нужен адъюгат (он же классический сопряженный) , я не верю, что в Octave он встроен. Есть несколько способов рассчитать это. Если вы можете предполагать обратимость, то это просто det(x)*inv(x). Если нет, это немного сложнее. В целом, адъюгат является транспонированной матрицей кофактора. Матрица кофактора заменяет каждый элемент в исходной матрице своим кофактором (плюс или минус его минор, который является определителем исходной матрицы без этой строки и столбца. Правило плюс или минус одинаково для расширения определителя - если сумма строки и столбца четные, они положительные, если отрицательные, то нечетные).

Самый простой кодовый код, вероятно, заключается в использовании SVD (который является встроенным) - адъюгат является антигомоморфизмом с adj (xy) = adj (y) adj (x). SVD для x - это набор матриц u, s, v, где u * s * v '= x, s диагональ, u и v оба унитарны. adj (x) = adj (u * s * v ') = adj (v') adj (s) adj (u). Для обратимых матриц адъюгат - это просто определитель, умноженный на обратную. Для унитарных матриц это просто сопряженная транспонирование. adj (x) = det (v ') v adj (s) det (u) u' = det (v '* u) v adj (s) u'. Адъюгат диагональной матрицы s относительно легко вычислить - каждая запись вне диагонали равна нулю, и каждая запись в диагонали является произведением других.

...