2014 dxdy logo

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

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


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


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

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

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Решение СЛУ специального вида. Как быстрее решить?
Сообщение04.06.2006, 08:49 


28/02/06
7
Итак, имеем задачу: Дана СЛУ вида:
(A B) (C1)
(-B A) (C2)

где А и В - квадратные матрицы [N x N], о которых ничего не известно (разве что вся эта система ЛНЗ), С1 и С2 - столбцы свободного члена [N х 1].
В итоге имеем матрицу [2*N x 2*N].
Сейчас применяю метод Гаусса (матрица решается 1 раз. То есть в цикле, конечно, раз 500, но при этом меняется и матрица и столбец свободных членов) .
Подскажите, как можно ускорить процесс? Просто нормальным явлением является 500 итераций цикла, в каждом из них решается по 1-й матрице 800 х 800

 Профиль  
                  
 
 Re: Решение СЛУ специального вида. Как быстрее решить?
Сообщение04.06.2006, 19:20 
Заслуженный участник


15/05/05
3445
USA
Можно свести решение Вашей системы порядка 2N к обращению матрицы порядка N и решению системы порядка N:

1. Запишем исходную систему в виде
\left( \begin{array} {cc} A & B \\ -B  & A \end{array}  \right)  \left( \begin{array} {c} X_1 \\ X_2 \end{array}  \right) = \left( \begin{array} {c} C_1 \\ C_2 \end{array}  \right)

2. Перепишем ее в виде двух матричных уравнений порядка N
A  X_1 + B X_2 = C_1
- B  X_1 + A X_2 = C_2

3. Из второго
X_2 = A^{-1} C_2 + A^{-1} B X_1

4. Подставим в 1-е:
A  X_1 + B A^{-1} C_2 + B A^{-1} B X_1 = C_1
или
\left( A + B A^{-1} B \right) X_1 = C_1 - B A^{-1} C_2

Алгоритм:
- обратить матрицу A;
- решить систему 4-б) и найти X_1;
- подстановкой X_1 найти X_2 из 3)

И еще некоторые замечания:
5. Для решения больших систем итерационные методы часто эффективнее, чем прямые (типа Гаусса). Например, попробуйте метод сопряженных градиентов.
6. Поскольку у Вас ~500 итераций на шаге можно попробовать применить идею преград: на начальных итерациях иногда нет смысла решать СЛУ слишком точно.
7. Если матрица A от шага к шагу меняется мало, можно применить алгоритм корректировки обратной матрицы при изменении элемента / столбца / строки прямой. Алгоритм работает быстро, но неустойчив, так что нужно периодически выполнять обращение.
-

 Профиль  
                  
 
 
Сообщение04.06.2006, 20:05 


28/02/06
7
Очень интересные мысли. Насчет обращения матрицы А - обмозгую и наверняка применю.
По поводу "7" - матрица меняется мало (метод дискретных вихрей для сингулярного интегрального уравнения). Но матрица меняется вся (элементы матрицы - значение ядра в точке). Вопщем, все попробую. Как сделаю - отпишусь.

 Профиль  
                  
 
 
Сообщение06.06.2006, 10:30 


28/02/06
7
Еще одна поправка. Исследовал матрицы и увидел: Матрицы А и В тоже имеют особый вид:
А=\left(\begin{array}{ccccc}a_0&a_1&a_2&a_3&a_4\\a_-_1&a_0&a_1&a_2&a_3\\a_-_2&a_-_1&a_0&a_1&a_2\\a_-_3&a_-_2&a_-_1&a_0&a_1\\a_-_4&a_-_3&a_-_2&a_-_1&a_0\end{array}\right)
Матрица В аналогична, но не равна матрице А (в общем случае)
Возможно ли еще ускорить за счет этого замечания (весь вечер парился - ничего не придумал)

 Профиль  
                  
 
 
Сообщение06.06.2006, 16:33 
Заслуженный участник


15/05/05
3445
USA
Матрицы вида $A_i_j = a_{i-j}$ называются тёплицевыми (теплицевыми, Toeplitz matrix). Можете попробовать копать в эту сторону, т.к. для них существуют быстрые алгоритмы, напоминающие FFT. К сожалению Ваша главная матрица - не теплицева. Матрица в предложенном мною алгоритме: $A + B A^{-1} B$ , скорее всего тоже не теплицева.

 Профиль  
                  
 
 
Сообщение06.06.2006, 17:09 
Заслуженный участник


09/02/06
4382
Москва
Если бы матрицы были цикличными, т.е. $a(i,j)=a_{i-j(mod \ n)}$, то решение действительно бы упростилось. Сойство цикличности матриц сохраняется и для произведений и для обратных, что не верно для теплицевых.

 Профиль  
                  
 
 
Сообщение08.06.2006, 10:11 


28/02/06
7
Спасибо, буду копать.
Блин, матрицы - вообще не моя специализация. (в смысле, специальные матрицы)

 Профиль  
                  
 
 
Сообщение09.06.2006, 13:47 


09/06/06
367
В 1984 году я столкнулся с этой же проблемой в этой же задаче . Решается весьма просто .
За праздники постараюсь вспомнить .

 Профиль  
                  
 
 
Сообщение09.06.2006, 21:32 


28/02/06
7
Буду очень благодарен.
Люди, если кто знает ссылку - киньте плз. Ничего хорошего не нашел.
Кстати, проверил - матрица не циклическая.
Блин. 5 дней осталось до того, как сдавать диплом. Если не успею - придется с методом Гаусса сдавать (не хочется).

 Профиль  
                  
 
 Re: Решение СЛУ специального вида. Как быстрее решить?
Сообщение10.06.2006, 13:46 


02/05/06
56
liter писал(а):
Сейчас применяю метод Гаусса


Вообще-то принято писать _метод Гаусса с выбором ведущего элемента_. :)

 Профиль  
                  
 
 
Сообщение11.06.2006, 08:11 


28/02/06
7
Вообще-то, это один из частных случаев метода Гаусса, ибо:
1) Можно вообще не выбирать ведущий элемент (только в случае нуля). Я так делал на первом курсе. У нас тогда еще ЧМ небыло и никто бы меня не убедил, что это снижает точность.
2) Есть МГ с частичным выбором ведущего элемента
3) Ты можешь выбор элемента заменить чем-нибудь другим. Например, подготовить матрицу заранее. Или доказать, что на главной диагонали все будет хорошо.
4) Когда ты решал на бумаге системы методом Гаусса ты выбирал ведущий элемент?

 Профиль  
                  
 
 
Сообщение12.06.2006, 22:39 


28/02/06
7
Люди, если у кого есть - киньте плиз алгоритм. Либо исходник. Все равно на чем (почти. На Ассемблере я вряд ли разбиру этот алгоритм). Либо мысль, как решить клеточно-теплицеву матрицу.

 Профиль  
                  
 
 
Сообщение13.06.2006, 06:43 


09/06/06
367
Алгоритм следующий .
Если обратить внимание на то как меняется столбец свободных членов во время прямого хода Гаусса,
то видно следуещее : каждый новый элемент ,начиная со второго , является линейной комбинацией
предыдущих и старого значения .
Значения для линейной комбинации однозначно определяются во время прямого хода Гаусса из коэффициэнтов матрицы стоящей в левой части и очень удобно размещаются в освободившейся нижней левой треуголке .
Таким образом , при изменении в исходной системе правого столбца ,достаточно произвести пересчет столбца свободных членов пользуясь коэффициэнтами в левой нижней треуголке ,начиная с измененного элемента
и вниз.Для получения нового решения достаточно выполнить обратный ход Гаусса .
Необходимо хранить первоначальный столбец свободных членов .
С удовольствием изложил бы формулы ,но не умею их записывать в данной системе .
Если не понятно ,вопрошайте .Удачи.
P.S.Алгоритм был разработан для неизменой правой части.

 Профиль  
                  
 
 
Сообщение30.06.2006, 09:59 


09/06/06
367
Черт возьми ! Для неизменной левой ...

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

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



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

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


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

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