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 ] 

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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