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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
Artegor
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 38
#1

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

02.01.2013, 14:09. Просмотров 3029. Ответов 2
Метки нет (Все метки)

хотел написать программу для 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;
  
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2013, 14:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос LU разложение матрицы (C++):

Разложение матрицы A на треугольные матрицы - C++
Создать разложения матрицы A размером N x N на треугольные матрицы, удовлетворяющие условию PA=LU, с выбором главного элемента (возможное...

LU Разложение - C++
Есть код. #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; void LU(vector &lt;vector &lt;double&gt;&gt; A, vector &lt;vector...

LU-разложение - C++
Решить матрицу методом LU. матрицы задаются рандомно и выводятся на экран, если можно с коментами #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; ...

Неполное LU разложение - C++
Помогите кто-нибудь написать на С неполное LU разложение матрицы. Мне оно нужно как предобуславливатель для решения СЛАУ итерациями. ...

Разложение в ряд - C++
Помогите пожалуйста Функция Разложение в ряд Область сходимости

Разложение числа - C++
Число можно разложить по 5 и по 3, то есть если это допустим 8 то выйдет 5 и 3, причем не должно быть остатка, допустим 22 можно разложить...

2
HighPredator
5541 / 1854 / 346
Регистрация: 10.12.2010
Сообщений: 5,472
Записей в блоге: 2
02.01.2013, 18:35 #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];
        }
    }
}
2
RainStorm
0 / 0 / 0
Регистрация: 08.10.2014
Сообщений: 5
29.03.2016, 18:45 #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;
            }
     }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2016, 18:45
Привет! Вот еще темы с ответами:

разложение числа - C++
Как ,допустим, разложить число 1924 на 1 9 2 4. Даже идей нет

Разложение на слагаемые - C++
Подскажите идею для написания программы, желательно с рекурсией: Дано натуральное число n. Небходимо вывести все возможные варианты...

Разложение числа - C++
вот написал прогу которая которая должна разложить число N на множители по массиву M и К где М {1,5,10,50,100} а К мы должны сами найти....

Разложение на слагаемые - C++
На входе у нас число (нат, пол) которое нужно разложить и ожидаймое количество слагаймых алгоритм решения таков..выделяем место для...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru