Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [C++]собственные значения |
Автор: MxAxKxC 4.12.2007, 16:23 |
Помогите с данной задачей пожайлуста. |
Автор: MxAxKxC 7.12.2007, 22:08 |
суть метода в том, что в результате преобразований данной нам матрицы, мы получаем матрицу, с диагональными элементами, которые являются собственными числами нашей исходной матрицы. Вот примерный алгоритм: 1.В исходной симметрической матрице A(k)=A(0) выберается максимальный по модулю наддиагональный элемент. 2. Нужно найти ортогональную данной матрицу(U), чтобы элемент, выбранный нами в пункте 1 был равен 0. В качестве ортогональной матрицы выбирается матрица вращения, в которой элемент А[i,j]=-sin(a), угол а= 0.5*arctg((i*j)/(A[i,i]+A[j,j])), если А[ii]=A[jj], a=pi/4. элемент A[j,i]=sin(a);элемент A[i,i]=cos(a);элемент A[j,j]=cos(a), остальные элементы на главной диагонали равны 1, а все остальные элементы равны 0. 3.Находим матрицу A(k+1) по формуле: A(k+1)=U(транспонированную)(К)*A(k)*U(k). 4. Итерационный процесс останавливается когда достигается необходимая точность Е. То есть когда корень из суммы квадратов наддиагональных элементов матрицы А(К+1)будет меньше Е. Написал несколько функций: |
Автор: MxAxKxC 8.12.2007, 17:35 | ||
так, осталось еще немного, нужно сделать условие остановки итерационного процесса. вот что получилось пока:
|
Автор: MxAxKxC 9.12.2007, 12:08 | ||||
как я понимаю должен быть цикл, но как его запрограммировать незнаю... вот собственно это надо как то в цикл запихнуть:
я думаю примерно условие выхода должно быть таким:
но у меня воид функции, незнаю как с ними цикл составить. ![]() |
Автор: MxAxKxC 13.12.2007, 21:45 |
Задача решена, спасибо всем, что поддержали морально ![]() Добавлено @ 21:47 вот код, если вдруг комунить понадобится |
Автор: MxAxKxC 27.12.2007, 19:50 |
вот 100% рабочая версия программы |