LINUX.ORG.RU
решено ФорумTalks

Диагонализация симметричной матрицы


0

1

Есть теорема о том, что симметричную матрицу M можно диагонализировать преобразованием D = B^T M B.

Но конкретный алгоритм так сходу я не припоминаю. И в интернете тоже не нахожу.

PS: В общем, я решил эту проблему через многочлены

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 1)

Ответ на: комментарий от Sadler

К диагональному. Нам на первом курсе, ЕМНИП, доказывали, что это всегда возможно преобразованием B^T*M*B

cvs-255 ★★★★★
() автор топика

ЕМНИП она диагональна в базисе из собственных векторов. Соответственно, находишь собственные векторы, берешь их координатные столбцы, пишешь их друг за дружкой и получаешь матрицу перехода в новый базис.

h31 ★★★★
()
Ответ на: комментарий от h31

Только надо не путать закон преобразования билинейной формы B^t M B и закон преобразования оператора B^{-1} M B. Так что не абы какой базис из собственных векторов надо брать, а ортогональный, когда B^{-1}=B^t.

alpha ★★★★★
()

матрицы ненужны многочлены наше фсио!!!!!!11

vvff
()

Есть теорема о том, что симметричную матрицу M можно диагонализировать преобразованием D = B^T M B.

B - это базис из собственных векторов матрицы M.

Все.

dikiy ★★☆☆☆
()
Ответ на: комментарий от alpha

Только надо не путать закон преобразования билинейной формы B^t M B и закон преобразования оператора B^{-1} M B. Так что не абы какой базис из собственных векторов надо брать, а ортогональный, когда B^{-1}=B^t.

если собственные значения разные, то базис автоматически будет ортогонален.

dikiy ★★☆☆☆
()

еще можно с помощью симметричного алгоритма Гаусса. Это когда как только ты обнулил столбец - тут же обнуляешь строку.

Матрица B в общем случае будет другая, но это не страшно.

dikiy ★★☆☆☆
()
Ответ на: комментарий от cvs-255

Как я помню, это диагонализация B^{-1}*M*B. А мне нужно B^T*M*B.

если у тебя матрица невырожденная и все собвстенные значения положительны, то базис из собственных векторов будет отвечать требованиям B^-1 = B^t

иначе просто симметричным алгоритмом Гаусса пробуй. хотя там придется в общем случае строки смещать, если матрица вырожденная.

dikiy ★★☆☆☆
()

и это. симметричный Гаусс это по-большому счету Cholesky Decomposition.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

если собственные значения разные, то базис автоматически будет ортогонален.

неправда. Очевидный пример


(2 -1)
(0  1)

f1 = (1)
     (1)

f2 = (1)
     (0)



cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Сопоставив матрице билинейную форму и разложив ее на суммы и разности квадратов.

А теперь давай такую матрицу:

(0 1)
(1 0)

:)

Вот я для тебя пример набросал. Думаю понятно, как симметричный Гаусс работает - http://ompldr.org/vZXloag

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от cvs-255

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

конечно верно. Симметричная матрица самосопряженная =>

пусть v1 и v2 вектора к значениям l1 и l2 тогда:

<Av1, v2>=<v1, Av2> => l1<v1, v2>=l2<v1, v2> => <v1,v2>=0

ЧТД.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

M = (0 1)
    (1 0)

соответствует форме 2*x1*x2 = ((x1+x2)^2-(x1-x2)^2)/2

y1 = (x1+x2)/sqrt(2)
y2 = (x1-x2)/sqrt(2)

x1 = (y1+y2)/sqrt(2)
x2 = (y1-y2)/sqrt(2)

B = 1/sqrt(2) * (1  1)
                (1 -1)  

B^t * M *B = (1  0)
             (0 -1)

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от dikiy

Это если собственные значения не совпадают. В таком случае надо по другому доказывать.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от dikiy

в задаче про разные собственные значения ничего не сказано, так что не вижу причин рассматривать частный случай

alpha ★★★★★
()
Ответ на: комментарий от cvs-255

Это если собственные значения не совпадают. В таком случае надо по другому доказывать.

если они совпадают, то ты ничего не докажешь. Ибо тогда собственному значению отвечает не вектор, а пространство. И в этом подпространстве базис может быть любым. В том числе и ортогональным. И если ты выберешь ортогональный базис для этого пространства, то вкупе с остальными векторами опять же получишь ортогональный базис для всей матрицы.

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Ну на компьютере вполне можно. Алгоритм совершенно тупой.

вполне возможно, что он даже заработает. Фактически это тот же самый Гаусс, только через задницу :) Так почему не использовать сразу его?

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.