• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

LU-разложение

ChoPaPopa

Ученик
Регистрация
23 Сен 2014
Сообщения
3
Реакции
0
Баллы
0
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.webp
    5.webp
    63.2 KB · Просмотры: 91
  • 2014-09-23_215315.png.webp
    2014-09-23_215315.png.webp
    16.8 KB · Просмотры: 87
Да в принципе всё правильно, вот только здесь:
Код:
  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];
  }
Не знаю, может быть так, как у Вас, тоже правильно. Но попробуйте этот другой вариант - вдруг?
 
Спасибо большое (я не знаю где тут спасибо просто ставить)
 
Назад
Сверху