Форум программистов, компьютерный форум CyberForum.ru

LU разложение матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
Artegor
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 38
02.01.2013, 14:09     LU разложение матрицы #1
хотел написать программу для LU разложения матрицы.
взял формулы с вики , не правильно находит элемент (3,3) в матрице U.
(пробовал только матрицу 3х3 ,иожет при больших размерах ещё больше неточностей будет )
что не так ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
 
 
int main(int argc, char* argv[])
{
    int i,j,k, n=3;
    float sum;
   
  float ** A=new float *[n];
  float ** L=new float *[n];
  float ** U=new float *[n];
 
    for (int i=1; i<=n; i++) {
        A[i]=new float [n];
        L[i]=new float [n];
        U[i]=new float [n];  }
 
    std::cout<<"A matr \n";
 
        for (i=1;i<=n;i++){
        for (j=1;j<=n;j++){
            A[i][j]=rand()%9;
            L[i][j]=0;
            U[i][j]=0;
            L[i][i]=1;
            std::cout<<A[i][j]<<"  ";
        }std::cout<<"\n";}
 
    /////////// L и U марицы 
    
         
    for (j=1;j<=n;j++) {
        U[1][j]=A[1][j];}
    for (j=2;j<=n;j++) {
        L[j][1]=A[j][1]/A[1][1]; }
        
 
    for (i=2;i<=n;i++){
     for (j=i;j<=n;j++){
      sum=0;
       for (k=1;k<i;k++){sum=sum+L[i][k]*U[k][j];}
    U[i][j]=A[i][j]-sum;
 
    }}
 
 
 
    for (i=2;i<=n;i++){
     for (j=i+1;j<=n;j++){
      sum=0;
      for (k=1;k<i;k++){sum=sum+L[j][k]*U[k][i];}
      L[j][i]=(A[j][i]-sum)/U[i][i];
      L[i][i]=1;
    }}
 
    
 
    std::cout<<"L matr \n";
    for (i=1;i<=n;i++){
    for (j=1;j<=n;j++){
    std::cout<<L[i][j]<<"  ";
    }std::cout<<"\n";}
    
    std::cout<<"U matr \n";
    for (i=1;i<=n;i++){
    for (j=1;j<=n;j++){
    std::cout<<U[i][j]<<"  ";
    }std::cout<<"\n";}
 
 
  system("pause");
   return 0;
  
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2013, 14:09     LU разложение матрицы
Посмотрите здесь:

C++ Разложение числа
разложение тангенса C++
LU-разложение C++
Разложение даты C++
Неполное LU разложение C++
C++ разложение числа
C++ Разложение матрицы A на треугольные матрицы
C++ LU Разложение

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5350 / 1733 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
02.01.2013, 18:35     LU разложение матрицы #2
Не совсем понимаю, что вы пытались сделать. В общем, LU-разложение можно выполнить так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void LU(double **A,double **L,double **U,int N)
{
    //инициализация матриц L и U
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            if(i==j) L[i][j]=1.0;
            else L[i][j]=0.0;
            U[i][j]=0.0;
        }
    }
    //непосредственно разложение
    for(int k=0;k<N;k++)
    {
        U[k][k]=A[k][k];
        for(int i=k+1;i<N;i++)
        {
            L[i][k]=A[i][k]/U[k][k];
            U[k][i]=A[k][i];
        }
        for(int i=k+1;i<N;i++)
        {
            for(int j=k+1;j<N;j++) A[i][j]=A[i][j]-L[i][k]*U[k][j];
        }
    }
}
RainStorm
0 / 0 / 0
Регистрация: 08.10.2014
Сообщений: 5
29.03.2016, 18:45     LU разложение матрицы #3
Тащемта там 2 цикла последних for при поиске элементов матрицы U и элементов матрицы L надо в один цикл соединить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (i=2;i<=n;i++){
        for (j=i;j<=n;j++)
        {
            sum=0;
            for (k=1;k<i;k++){sum=sum+L[i][k]*U[k][j];}
            U[i][j]=A[i][j]-sum;
        }
            for (j=i+1;j<=n;j++)
            {
                sum=0;
                for (k=1;k<i;k++){sum=sum+L[j][k]*U[k][i];}
                L[j][i]=(A[j][i]-sum)/U[i][i];
                L[i][i]=1;
            }
     }
Yandex
Объявления
29.03.2016, 18:45     LU разложение матрицы
Ответ Создать тему
Опции темы

Текущее время: 13:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru