Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 23.09.2014, 19:18   #1 (permalink)
ChoPaPopa
Новичок
 
Регистрация: 23.09.2014
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question LU-разложение

Всем добра, помогите с программой на си
Код:
#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;
}
должно быть так, а у меня какая-то чушь получается.
Миниатюры
5.jpg   2014-09-23_215315.png  
ChoPaPopa вне форума   Ответить с цитированием

Старый 23.09.2014, 19:18
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Возможно вы не обращали внимания, но на нашем форуме так же есть аналогичные темы

Разложение музыки на составляющие
Разложение функции Y в ряд S

Старый 25.09.2014, 12:50   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Да в принципе всё правильно, вот только здесь:
Код:
  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];
  }
Не знаю, может быть так, как у Вас, тоже правильно. Но попробуйте этот другой вариант - вдруг?
Vladimir_S вне форума   Ответить с цитированием
Старый 25.09.2014, 20:17   #3 (permalink)
ChoPaPopa
Новичок
 
Регистрация: 23.09.2014
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо большое (я не знаю где тут спасибо просто ставить)
ChoPaPopa вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.