2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 LDR разложение, алгоритм.
Сообщение14.09.2014, 10:45 


20/10/12
235
Добрый день, уважаемые участники форума!
Не могли бы вы мне подсказать (или дать источник, где это есть) про алгоритм разложения матрицы в произведение LDR (нижнетреугольная, диагональная, верхнетреугольная) для решений СЛАУ. Сам в интернете нигде не найду.
Материалы из линейной алгебры дают очень запутанный и бессмысленный рекурсивный алгоритм. (Хотя бы тем, что для вычислений там необходимо вычислять обратную матрицу.)

 Профиль  
                  
 
 Re: LDR разложение, алгоритм.
Сообщение14.09.2014, 12:33 
Заслуженный участник
Аватара пользователя


30/01/09
7068
shukshin в сообщении #907565 писал(а):
Сам в интернете нигде не найду.

Учебники не пробовали смотреть (Воеводин?)?

 Профиль  
                  
 
 Re: LDR разложение, алгоритм.
Сообщение14.09.2014, 12:52 


20/10/12
235
там есть на эту тему, но все-таки не оно (разложение $A = L L^T $ вроде)

 Профиль  
                  
 
 Re: LDR разложение, алгоритм.
Сообщение14.09.2014, 15:36 
Заслуженный участник


27/04/09
28128
Обычно это, насколько я понимаю, называется LDU — может, потому плохо искалось?

 Профиль  
                  
 
 Re: LDR разложение, алгоритм.
Сообщение14.09.2014, 18:06 
Заслуженный участник


15/05/05
3445
USA
Уилкинсон, Райнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра.
Алгоритм I.7 на стр.92 (разложение LDU).

 Профиль  
                  
 
 Re: LDR разложение, алгоритм.
Сообщение14.09.2014, 21:44 


20/10/12
235
Нашел вот здесь в итоге:

Изображение
Но не получается алгоритм, ни в какую. Может свежим взглядом, кто зацепит? (индексы сдвинуты на 1, так как в С нумерация массивов с 0)
код: [ скачать ] [ спрятать ]
Используется синтаксис C
  1. void LDU_decomposition(matrix_t *A, matrix_t *L, matrix_t *D, matrix_t *U)
  2. {
  3.         int i, j ,k;
  4.         double S;
  5.  
  6.         Make_E(L), Make_E(D), Make_E(U);
  7.  
  8.         D->p[0][0] = A->p[0][0];
  9.  
  10.         for(j = 1; j < A->x; ++j)
  11.         {
  12.        
  13.           for(i = 0; i <= j - 1; ++i)
  14.           {
  15.                     if(i == 0)
  16.                         {
  17.                                 U->p[i][j] = (double)(A->p[i][j]) / (D->p[i][i]);
  18.                                 L->p[j][i] = (double)(A->p[j][i]) / (D->p[i][i]);
  19.                         }
  20.                         else if(i > 0)
  21.                         {
  22.                                 for(S = 0, k = 0; k < i - 1; ++k)
  23.                                         S += L->p[i][k] * D->p[k][k] * U->p[k][j];
  24.                                 U->p[i][j] = (double)(A->p[i][j] - S) / (D->p[i][i]);
  25.  
  26.                                 for(S = 0, k = 0; k < j - 1; ++k)
  27.                                         S += U->p[k][i] * D->p[k][k] * L->p[j][k];
  28.                         L->p[j][i] = (double)(A->p[j][i] - S) / (D->p[i][i]);
  29.                         }
  30.           }
  31.          
  32.           for(S = 0, k = 0; k < j - 1; ++k)
  33.                 S += (U->p[k][j]) * (D->p[k][k]) * (L->p[j][k]);
  34.           D->p[j][j] = (A->p[j][j] - S);
  35.          
  36.          
  37.         }
  38. }

 Профиль  
                  
 
 Re: LDR разложение, алгоритм.
Сообщение14.09.2014, 22:58 
Заслуженный участник
Аватара пользователя


30/01/09
7068
А в этой вашей книге отражено. что для устойчивости вычислений в матрице на каждом шагу надо находить максимальный элемент (по модулю)?

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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

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