2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 минимальное собственное значение матрицы
Сообщение21.11.2017, 12:14 


12/12/11
11
Здравствуйте, я хотел бы попросить вашей помощи в некоторой задаче в области численных методов.
У меня есть большая матрица (100x100) квадратная, симметричная, действительная. Мне необходимо найти минимальное собственное значение (СЗ) этой матрицы.
Я читал про разные методы и остановился на двух.
1) QR разложение, позволяет найти все СЗ матрицы. На этом методе я остановился. Однако он слишком медленный и не устраивает меня.
2) Степенной метод. Очень быстрый метод, по сравнению с QR, позволяет найти модуль максимального СЗ матрицы. Если обратить матрицу, то можно найти модуль минимального СЗ.

Проблема с которой я столкнулся -- не смог найти метод позволяющий найти обратную матрицу. Я делал две разные реализации, но они работают с небольшими матрицами, при этом с небольшими (4х4) эти методы работают. Если я не ошибаюсь, я использовал метод в лоб. Проблема с большими матрицами в том, что появляются очень большие числа, которые не помещаются даже в double precision.

Можете подсказать, если ли какие-то другие эффективные методы нахождения минимального СЗ матрицы или её обращения?

Спасибо.

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение21.11.2017, 12:55 


10/03/16
4444
Aeroport
MrWorm

100 х 100 это не большая матрица -- это смехотворно маленькая матрица. Никакие реализации методов нахождения обратной матрицы и сз делать не нужно-- для этого есть стандартные функции в R и Matlab, которые в вашем случае найдут обратную матрицу и минимальное сз примерно за 0.000001 секунды

Если не секрет из какой области задача?

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение21.11.2017, 13:15 
Заслуженный участник
Аватара пользователя


11/03/08
10043
Москва
Присоединяясь к замечанию о том, что 100х100 это не очень большая матрица, разве что руками считать, отмечу, что для нахождения минимального С.З. степенным методом не обязательно использовать обратную матрицу, хотя это и даёт лучшую скорость сходимости.
Если взять матрицу $B=(kI-A)$, то её собственные значения будут связаны с С.З. исходной матрицы, как $\lambda^B_i=k-\lambda^A_i$ и "последние будут первыми". В качестве k лучше взять величину, несколько большую максимального С.З. матрицы А.
И на всякий случай напомню, что степенной метод даёт не максимальное, а максимальное по модулю С.З., и если там будут отрицательные - может быть интересно...

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение21.11.2017, 13:32 


12/12/11
11
Спасибо за ответы!

ozheredov

Согласен, что матрица не большая, я несколько не корректно написал. Большая в смысле того, что считать руками такие матрицы сложно. Это университетская задача не имеющая конкретного приложения.

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

Евгений Машеров

Спасибо, попробую этот метод!

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение21.11.2017, 13:50 


10/03/16
4444
Aeroport
MrWorm

А, извините, я не понял что это просто у вас часть программы. Тогда подключите нормальную математическую библиотеку -- они есть на с++, пайтон, джава и т.п. В любом случае библиотечная функция будет работать надёжнее и гораздо быстрее, поскольку их оптимизируют на уровне машинного кода

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение21.11.2017, 15:59 
Заслуженный участник
Аватара пользователя


11/03/08
10043
Москва
Ещё бы для хорошего совета было бы полезно знать, это упражнение по программированию, по вычислительной математике или часть проекта по какой-то прикладной дисциплине?

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение21.11.2017, 16:22 


12/12/11
11
ozheredov

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

Евгений Машеров

Совершенно верно, это упражнение по программированию.

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение21.11.2017, 19:19 


12/12/11
11
Евгений Машеров

Я попробовал написанный вами метод. Я тестировал его на простых матрицах (3х3) и получалось находить минимальные и максимальные СЗ. К сожалению на моей матрице он ведёт себя очень не стабильно, при увеличении числа итерраций на порядки и фиксированном приближении, СЗ на выходе имеют разброс на десятки.

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение22.11.2017, 19:41 
Заслуженный участник


11/05/08
32166
MrWorm в сообщении #1267638 писал(а):
увеличении числа итерраций на порядки и фиксированном приближении, СЗ на выходе имеют разброс на десятки.

Непонятно, что все эти слова означают. Но, во всяком случае, следует иметь в виду, что метод простых итераций сходится очень медленно -- со скоростью геометрической прогрессии, знаменатель которой более-менее равен отношению предпоследнего собственного числа к последнему. Для матрицы сто на сто типичным значением будет что-то вроде $q=0.99$. И это не только медленно; надо ещё считаться с тем, что фактическая погрешность будет примерно в сотню раз больше, чем разность соседних приближений. Т.е. если стабилизировались три цифры, то достигнутая точность -- лишь порядка десяти процентов.

А ведь для матриц такого же размера (некоторого специального вида) и $q=0.999$ -- тоже вполне типично...

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение23.11.2017, 10:05 
Заслуженный участник
Аватара пользователя


11/03/08
10043
Москва
Ну, собственно, для матрицы 100х100 степенной метод имеет одно достоинство - программировать его не просто, а очень просто. Хотя и тут можно нарваться.
Помнится, один мой знакомый слишком буквально понял правило расчёта $x=Ax$ и, вычислив очередной элемент вектора, его сразу же помещал на место. И долго недоумевал.
Скорость сходимости - да, может быть прискорбно низкой. И даже никакой Заратустра не запретил максимальному С.З. быть кратным. Хотя для некоторых матриц можно доказать факт отсутствия кратности и получить оценки скорости сходимости.

(Оффтоп)

Задача о рейтинге футбольных команд - матрица A содержит встреч команд меж собой, для расчёта рейтинга принимается, что победа над сильной командой даёт больший вклад в рейтинг, задача сводится к $x=\frac 1 \lambda Ax$, и поскольку матрица A неразложима и имеет положительные элементы, по теореме Фробениуса-Перрона у неё одно максимальное действительное С.З.
А при кратном С.З. собственный вектор в ходе вычислений вправе прыгать как угодно в пространстве, натянутом на соответствующие кратному значению собственные вектора.
Для борьбы с этим в рамках степенного метода придумали одновременные итерации, когда берётся набор k ортогональных (для начала - можно просто случайных) векторов, их умножают на матрицу, полученные вектора ортогонализуют и запускают в цикл по новой. Работает, но не панацея. Скорость определяется отношением первого и (k+1) С.З., и тоже может быть невысока.
Степенной метод и иже с ним не для доступной обычным образом матрицы, они для случая, когда матрица очень велика и разрежена, или велика и хранима во внешней памяти, или велика и её элементы не хранятся, а вычисляются по требованию, в общем, когда единственная доступная операция это умножить вектор на эту матрицу. Да и там степенной метод и его продвинутые версии не единственный вариант, но, по крайней мере, "препарат выбора".
Хотя лично я испытываю нежные чувства к методу Якоби (вращений), но в данном случае его рекомендовать бы не стал. Его главное достоинство - гарантированная ортогональность всех собственных векторов - здесь явно излишне, да и "покупать корову ради одного бифштекса" в смысле считать все собственные значения и вектора, когда требуется одно минимальное - "половое излишество, паркетный пол линолеумом покрывать".
Мне кажется, тут лучше QR найти трудно. Правда, программируется он двухэтапно. Сперва надо привести (отражениями) к трёхдиагональной форме, а уж потом QR. Причём без сдвигов сразу будет находиться наименьшее С.З.

(Оффтоп)

Силами студентов в подшефном колхозе был построен Q-рятник на 1024 QRместа

Или можно, также приведя к трёхдиагональному виду, использовать бисекции.

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение23.11.2017, 12:33 
Заслуженный участник


11/05/08
32166
Евгений Машеров в сообщении #1268277 писал(а):
И даже никакой Заратустра не запретил максимальному С.З. быть кратным.

Речь шла вроде как о симметричных матрицах, а для них это не имеет значения. Т.е.

Евгений Машеров в сообщении #1268277 писал(а):
при кратном С.З. собственный вектор в ходе вычислений вправе прыгать как угодно в пространстве, натянутом на соответствующие кратному значению собственные вектора


-- соотв., не вправе.

-- Чт ноя 23, 2017 13:48:35 --

Да, не обратил сначала внимания. Даже и кратность с.ч. не заставит с.в. скакать -- разве что ползти, но для поиска с.ч. это не важно. Скакать он будет в другом случае -- если есть разные максимальные по модулю с.ч. Но в симметричном случае и это не проблема -- надо просто отслеживать по отдельности приближения к с.в., получаемые на чётных и на нечётных итерациях, проверяя их коллинеарность.

 Профиль  
                  
 
 Re: минимальное собственное значение матрицы
Сообщение24.11.2017, 09:30 
Заслуженный участник
Аватара пользователя


11/03/08
10043
Москва
Это да, пример, в котором наблюдается скакание, требует асимметричной матрицы...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Geen


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group