0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 4
|
||||||
1 | ||||||
Метод вращений для пары симметричных матриц27.08.2014, 11:46. Показов 3465. Ответов 7
Метки нет (Все метки)
Здравствуйте!
У меня возникла проблема с реализацией метода вращения для определения собственных значений и векторов пары матриц. Для матриц размерность N=2 считает вроде бы верно, для N=3 иногда выдает верные ответы, а для N>3 выдает совсем неверно. В приложении представлен алгоритм, нужно реализовать именно его. Прошу помочь, найти ошибку. Может я что-то не понял, пояснить. Вот, собственно, код, который я написал:
Приложение
Метод вращений определения определения собственных значений и векторов пары симметричных матриц Задание Дана пара симметричных матриц K и M размерности n. Требуется: 1. Составить алгоритм и программу для определения всех собственных значений и собственных векторов пары матриц K и M с использованием метода вращений (обобщённого метода Якоби). 2. Использовать программу для решения варианта задания. 3. Выполнить проверку и сделать выводы. Варианты заданий где i - номер варианта. Методические указания Собственные векторы xi и собственные значения λi пара матриц K и M удовлетворяют условию Задача определения λ_i и x_i, i=1,...,n, называется обобщённой проблемой собственных значений. В методе вращений решения этой задачи матрицы K и M одновременно приводят к диагональному виду с помощью матриц вращения по формулам где K1=K; M1=M, а несимметричная матрица вращения на s-м шаге Ps имеет вид У матрицы Ps все диагональные элементы равны единице, а из внедиагональных - отличны от нуля только два элемента: Pij= γ и Pji=α. Значения γ и α выбирают так, чтобы после преобразования (6.2) элементы kij(s+1) и mij(s+1) матриц Ks+1 и Ms+1 равнялись нулю. Вычисление элементов γ и α производится с помощью следующего алгоритма: Номера i, j выбирают так, чтобы аннулировать наибольшие по модулю внедиагональные элементы kij(s) и mij(s). В простейшем случае на итерации с номером t допустимо организовать двойной цикл по i=2,...,n и j=1,...,i-1 с тем, чтобы аннулировать поочерёдно внедиагональные элементы kij(s) и mij(s). На новой, (t+1)-й итерации цикл повторяют. С увеличением количества вращений по формулам (6.2)-(6.4) матрицы Ks+1 и Ms+1 приобретают диагональный вид. Тогда приближение к i-у собственному значению после s-го вращения определяют по формуле Оценка сходимости процесса производится на основе вычисленных приближений λi(s+1) и λi(s), а также проверки малости всех внедиагональных элементов матриц Ks+1 и Ms+1. В простейшем случае вращения продолжают, пока по окончании итерации с номером (t+1) не выполнится условие где ε - заданная малая погрешность вычислений (принять ε=10-5). Окончательно принимается λi=λi(r+1), где r - номер последнего вращения, а матрица X=[x1,...,xn], состоящая из собственных векторов, представляется в виде произведения X=P1P2...Pr.
0
|
27.08.2014, 11:46 | |
Ответы с готовыми решениями:
7
Метод вращений Якоби для решения СЛАУ Написать три алгоритма решения СЛАУ: Метод прогонки, метод квадратных корней, метод вращений Сложение симметричных матриц Умножение симметричных матриц |
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 4
|
|
29.08.2014, 14:59 [ТС] | 2 |
Что-то никто не отвечает, у меня все правильно что-ли?
Выкладываю словесное описание алгоритма (так, как я его понял): Кликните здесь для просмотра всего текста
Замечания:
1) K и M - симметричные матрицы 2) Для транспонирования матрицы P можно просто поменять местами alpha и gamma 3) массив L - это массив собственных чисел (лямбды) 4) массив PL - это массив собственных чисел, вычисленных на предыдущем шаге 5) матрица X - массив собственных векторов (в алгоритме тоже обозначена как X) 6) цикл с постусловием в алгоритме обозначен итерацией t 7) циклы i и j вместе в алгоритме обозначены итерацией s 8) циклы i, j и цикл с постусловием все вместе обозначены итерацией r Инициализируем элементы: a) P, X - единичные матрицы b) L = K / M, i=1..n (по формуле 6.5) 1. Начинаем цикл с постусловием (проверка по формуле 6.6) 1.1. Начинаем цикл i=2,..,n 1.1.01. Начинаем цикл j=1,..,i-1 1.1.02. Находим ai, aj, a, z, gamma, alpha по формулам 6.4 1.1.03. Присваиваем P[j] = alpha, P[j] = gamma (строим сразу транспонированную матрицу) 1.1.04. K = P * K (матричное умножение; P мы построили так, что это транспонированная матрица; часть формулы 6.2) 1.1.05. M = P * M (часть формулы 6.2) 1.1.06. Присваиваем P = gamma, P[j] = alpha (строим нормальную матрицу, не транспонированную) 1.1.07. K = K * P (оставшаяся часть формулы 6.2) 1.1.08. M = M * P (оставшаяся часть формулы 6.2) 1.1.09. X = X * P (по формуле 6.7) 1.1.10. Зануляем P[j] и P[j] (теперь у нас матрица P снова единичная) 1.1.11. Присваиваем PL = L 1.1.12. Обновляем значения массива L по формуле 6.5 1.1.13. Выходим из цикла j 1.2. Выходим из цикла i 2. Проверяем постусловие цикла (начало цикла в п.1): если для всех i=1..n выполняется abs(L - PL) < eps, то завершаем цикл. Теперь ответ будет лежать в L и X.
0
|
Модератор
9853 / 5223 / 3304
Регистрация: 17.08.2012
Сообщений: 15,980
|
||||||
29.08.2014, 18:41 | 3 | |||||
Пока заметил непорядок с функцией Sign. Так, что ли, надо:
0
|
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 4
|
|
29.08.2014, 21:50 [ТС] | 4 |
Да, но функцию Sign я специально так написал.
Предположим, что , значит Тогда, если функция Sign описана так, как описали вы, то и далее деление на нуль. Я все же попробовал написать функцию Sign так, как надо, и при делении на нуль переходить к следующей итерации. Но таким образом даже для тех матриц, для которых считало правильно, теперь считает неверно.
0
|
Модератор
9853 / 5223 / 3304
Регистрация: 17.08.2012
Сообщений: 15,980
|
|
29.08.2014, 22:04 | 5 |
Мда... с ζ нехорошо получается... Будет сегодня время, гляну, что там можно сделать в программе... Посижу, поотлаживаю...
0
|
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 4
|
|
30.08.2014, 09:31 [ТС] | 6 |
Спасибо, что помогаете.
А вообще, метод странный, я не нашел ничего схожего в интернете. Я так понял, что метод основан на диагонализации пар матриц. Так вот и про диагонализацию через именно такую матрицу я ничего не нашел. И возникает вопрос, правильно ли подобрана матрица для диагонализации.
0
|
Модератор
9853 / 5223 / 3304
Регистрация: 17.08.2012
Сообщений: 15,980
|
|
30.08.2014, 11:47 | 7 |
Странно. Этот метод применяется при решении систем линейных уравнений, ещё он называется метод Якоби.
Нет. И не обязательно пар матриц. Просто в Вашей задаче используются две матрицы.
Он основан на повороте (поэтому и метод вращения) системы координат в n-мерном пространстве. Обычно этот глобальный n-мерный суперповорот заменяют серией поворотов в специально выбираемых плоскостях на выбранный угол с целью привести к 0 какой-либо элемент матрицы вне главной диагонали (для симметричной - сразу два). Сами плоскости стараются выбрать так, чтобы элементы матрицы (матриц), уже обращённые в нуль, так и остались равны нулю. Метод обычно применяется для приведения матриц к треугольному, трёхдиагональному, диагональному виду.
0
|
Cyborg Drone
|
02.09.2014, 14:16
Метод вращений для пары симметричных матриц
#8
|
Не по теме: Что-то никак не получается найти ошибку... Попробую сегодня ночью разобраться. Наверное, просто свой вариант напишу.
0
|
02.09.2014, 14:16 | |
Метод вращений метод вращений Найти произведение двух симметричных матриц Среди матриц А(3,3),В(4,4) и С(5,5) определить количество симметричных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |