Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   LU-разложение (http://www.tehnari.ru/f41/t98501/)

ChoPaPopa 23.09.2014 19:18

LU-разложение
 
Вложений: 2
Всем добра, помогите с программой на си
Код:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
 
int main ()
{
  int n;
  double sum = 0;
 
  cout << "Введите порядок матрицы\n n = ";
  cin >> n;
 
  double A [ n ][ n ];
  double L [ n ][ n ];
  double U [ n ][ n ];
 
  for (int i  = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
    {
      cout << "\na[" << i << "][" << j << "] = ";
      cin >> A [i][j];
 
      L [i][j] = 0;
      U [i][j] = 0;
 
      if (i == j)
        U [i][j] = 1;
    }
  }
 
  for (int i = 0; i < n; i++)
  {
    L [i][0] = A [i][0];
    U [0][i] = A [0][i] / L [0][0];
  }
 
  for (int i = 1; i < n; i++)
  {
      for (int j = 1; j < n; j++)
      {
          if (i >= j)
          {
              sum = 0;
              for (int k = 0; k < j; k++)
                  sum += L [i][k] * U [k][j];
 
              L [i][j] = A [i][j] - sum;
          }
          else
          {
              sum = 0;
              for (int k = 0; k < i; k++)
                  sum += L [i][k] * U [k][j];
 
              U [i][j] = (A [i][j] - sum) / L [i][i];
          }
      }
  }
  cout << "\n\n";
  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
        printf("%12.6f", U[i][j]);
        printf("\n");
  }
  cout << "\n\n";
  for (int i  = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
 
      printf("%12.6f", L[i][j]);
        printf("\n");
  }
 
  return 0;
}

должно быть так, а у меня какая-то чушь получается.

Vladimir_S 25.09.2014 12:50

Да в принципе всё правильно, вот только здесь:
Код:

  for (int i = 0; i < n; i++)
  {
    L [i][0] = A [i][0];
    U [0][i] = A [0][i] / L [0][0];
  }

несколько не соответствует тому, что я видел в Сети. Там так:
Код:

  for (int i = 0; i < n; i++)
  {
    U [0][i] = A [0][i];
    L [i][0] = A [i][0] / U [0][0];
  }

Не знаю, может быть так, как у Вас, тоже правильно. Но попробуйте этот другой вариант - вдруг?

ChoPaPopa 25.09.2014 20:17

Спасибо большое (я не знаю где тут спасибо просто ставить)


Часовой пояс GMT +4, время: 11:13.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.