2014 dxdy logo

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

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




 
 Как численно решать линейные задачи с нулевым определителем?
Сообщение11.12.2023, 10:35 
Аватара пользователя
Допустим определитель линейной системы нулевой (система конечно очень большая).
Нужно какое-нибудь ненулевое решение, скажем вектор единичной длины.
Есть ли какое-нибудь стандартное численное решение такой задачи?

 
 
 
 Re: Как численно решать линейные задачи с нулевым определителем?
Сообщение11.12.2023, 11:01 
Можно попробовать минимизировать сумму квадратов невязок.

 
 
 
 Re: Как численно решать линейные задачи с нулевым определителем?
Сообщение11.12.2023, 11:32 
Аватара пользователя
Псевдообратная матрица не подходит?
И вроде бы, всё это хорошо реализовано в MatLab'е - можно посмотреть конкретные детали...

 
 
 
 Re: Как численно решать линейные задачи с нулевым определителем?
Сообщение12.12.2023, 10:42 
Аватара пользователя
Сингулярное разложение?
(И вообще - лучше конкретно описать задачу, "рецепта на все случаи жизни" не существует).

 
 
 
 Re: Как численно решать линейные задачи с нулевым определителем?
Сообщение12.12.2023, 12:05 
Аватара пользователя
Евгений Машеров в сообщении #1622085 писал(а):
И вообще - лучше конкретно описать задачу

Для начала - система совместная или нет? Иначе, как понять требование:
DLL в сообщении #1621899 писал(а):
Нужно какое-нибудь ненулевое решение, скажем вектор единичной длины.

 
 
 
 Re: Как численно решать линейные задачи с нулевым определителем?
Сообщение19.12.2023, 21:05 
Аватара пользователя
Да, система совместная.
Правая часть нулевая!

 
 
 
 Re: Как численно решать линейные задачи с нулевым определителем?
Сообщение19.12.2023, 23:14 
DLL в сообщении #1623041 писал(а):
Да, система совместная.
Правая часть нулевая!

Не, это совсем не задача с линейной системой, а задача на поиск нулевых сингулярных чисел и соответсвующих им сингулярных векторов.

Как решать - зависит от того, какая точность Вас интересует и какова размерность задачи.

Например, если Вас $O(N^3)$ вычислительной сложности не напрягает и $O(N^2)$ памяти у Вас имеется, то надо просто посчитать нулевые сингулярные вектора. Тогда решением будет любая линейная комбинация всех правых сингулярных векторов, которые соответсвуют нулевым сингулярным значениям.

Если столько ресурсов нет, то надо смотреть в сторону итерационных алгоритмов Ланцоша и Арнольди, возможно с рестартом. При больших размерностях матриц не забывать, что численно вычисленное скалярное произведение двух очень больших по размерности векторов имеет большую численную ошибку, которая накапливается в таких итерационных методах, если на это не обращать внимание.

Если задача не рыба, не мясо, или матрица не большая, но хочется решать быстро, то надо делать $QR$ c rank-revealing, и использовать верхний недотреугольник для получения решения.

 
 
 
 Re: Как численно решать линейные задачи с нулевым определителем?
Сообщение20.12.2023, 08:35 
Аватара пользователя
И тут ещё интересен вопрос, какими инструментами (библиотеками программ, мат. пакетами) можно пользоваться?

 
 
 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group