|
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 4
|
||||||
Метод вращений для пары симметричных матриц27.08.2014, 11:46. Показов 3762. Ответов 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 [ТС] | |
|
Что-то никто не отвечает, у меня все правильно что-ли?
Выкладываю словесное описание алгоритма (так, как я его понял): Кликните здесь для просмотра всего текста
Замечания:
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
|
|
|
Модератор
10373 / 5661 / 3398
Регистрация: 17.08.2012
Сообщений: 17,298
|
||||||
| 29.08.2014, 18:41 | ||||||
|
Пока заметил непорядок с функцией Sign. Так, что ли, надо:
0
|
||||||
|
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 4
|
|
| 29.08.2014, 21:50 [ТС] | |
|
Да, но функцию Sign я специально так написал.
Предположим, что Тогда, если функция Sign описана так, как описали вы, то Я все же попробовал написать функцию Sign так, как надо, и при делении на нуль переходить к следующей итерации. Но таким образом даже для тех матриц, для которых считало правильно, теперь считает неверно.
0
|
|
|
Модератор
10373 / 5661 / 3398
Регистрация: 17.08.2012
Сообщений: 17,298
|
|
| 29.08.2014, 22:04 | |
|
Мда... с ζ нехорошо получается... Будет сегодня время, гляну, что там можно сделать в программе... Посижу, поотлаживаю...
0
|
|
|
0 / 0 / 0
Регистрация: 04.07.2014
Сообщений: 4
|
|
| 30.08.2014, 09:31 [ТС] | |
|
Спасибо, что помогаете.
А вообще, метод странный, я не нашел ничего схожего в интернете. Я так понял, что метод основан на диагонализации пар матриц. Так вот и про диагонализацию через именно такую матрицу я ничего не нашел. И возникает вопрос, правильно ли подобрана матрица для диагонализации.
0
|
|
|
Модератор
10373 / 5661 / 3398
Регистрация: 17.08.2012
Сообщений: 17,298
|
|||
| 30.08.2014, 11:47 | |||
|
Он основан на повороте (поэтому и метод вращения) системы координат в n-мерном пространстве. Обычно этот глобальный n-мерный суперповорот заменяют серией поворотов в специально выбираемых плоскостях на выбранный угол с целью привести к 0 какой-либо элемент матрицы вне главной диагонали (для симметричной - сразу два). Сами плоскости стараются выбрать так, чтобы элементы матрицы (матриц), уже обращённые в нуль, так и остались равны нулю. Метод обычно применяется для приведения матриц к треугольному, трёхдиагональному, диагональному виду.
0
|
|||
| 02.09.2014, 14:16 | |
|
Не по теме: Что-то никак не получается найти ошибку... Попробую сегодня ночью разобраться. Наверное, просто свой вариант напишу.
0
|
|
| 02.09.2014, 14:16 | |
|
Помогаю со студенческими работами здесь
8
Умножение симметричных матриц
метод вращений Найти произведение двух симметричных матриц Среди матриц А(3,3),В(4,4) и С(5,5) определить количество симметричных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|