Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Программа решения СЛАУ методом Жордана-Гаусса 
:(
    Опции темы
Reminaru
Дата 28.5.2013, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 28.5.2013

Репутация: нет
Всего: нет



Ребят, необходимо написать программу для решения СЛАУ методом Жордана-Гассу с выбором ведущего элемента.
PM MAIL   Вверх
n199a
Дата 28.5.2013, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Код

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>

main()
{
  clrscr();


  float a[11][11], b[11], x[11], t;
  int i, j, k, m, n;

  n=3;
  a[1][1]= 5.6; a[1][2]= 2.7; a[1][3]=-1.7; b[1]= 1.9;
  a[2][1]= 3.4; a[2][2]=-3.6; a[2][3]=-6.7; b[2]=-2.4;
  a[3][1]= 0.8; a[3][2]= 1.3; a[3][3]= 3.7; b[3]= 1.2;

  cout << "\n\n";
  for (i=1; i<=n; i++)
  {
    for (j=1; j<=n; j++)
      cout << a[i][j] << "  ";
    cout << b[i] << "\n";
  }



   double eps=.000001;
   double max;
   int max_i;
   double lead, a_div_lead;

   for(k=1; k<=n; k++)
   {

      max=0;
      max_i=-1;

      for(int i=k; i<=n; i++)
      {
     if(fabs(a[i][k])>max)
     {
        max=fabs(a[i][k]);
        max_i=i;
     }
      }


      if(max_i==-1 || fabs(a[max_i][k])<eps)
      {
        cout << "\n\n" << "Error: det=0" << "\n\n";
        break;
      }



      lead=a[k][k];

      for(j=k; j<=n; j++)
        a[k][j]/=lead;
      b[k]/=lead;

      for(i=1; i<=n; i++)
      {
        a_div_lead=a[i][k]/a[k][k];

        if(i!=k)
        {
          for(j=k; j<=n; j++)
            a[i][j]-=a[k][j]*a_div_lead;
          b[i]-=b[k]*a_div_lead;
        }
      }
  }

  cout << "\n\n";
  for (i=1; i<=n; i++)
  {
    for (j=1; j<=n; j++)
      cout << a[i][j] << "  ";
    cout << b[i] << "\n";
  }


  getch();
}

PM MAIL   Вверх
Reminaru
Дата 29.5.2013, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 28.5.2013

Репутация: нет
Всего: нет



это просто метод Жордана-Гаусса, без ведущего вроде бы элемента
PM MAIL   Вверх
n199a
Дата 30.5.2013, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Код

public static Row Gauss(Matrix MMG)
{
    int[] mask = new int[MMG.rowCount];
    for (int i = 0; i < MMG.rowCount; i++)
        mask[i] = i;
 
    for (int i = 0; i < MMG.rowCount; i++)
    {
        int Y = i;
        double X = MMG[i,i];
 
        for (int j = i+1; j < MMG.colCount - 1; j++)
            if (Math.Abs(X) < Math.Abs(MMG[i, j]))
            {
                X = MMG[i, j];
                Y = j;
            }
 
        if (X == 0)
        {
            Row x = new Row(MMG.rowCount);
            for (int ii = 0; ii < MMG.rowCount; ii++)
                x[ii] = double.NaN;
            return x;
        }
 
        if (i != Y)
        {
            MMG.ExchangeColumns(i, Y);
            int tmp = mask[i];
            mask[i] = mask[Y];
            mask[Y] = tmp;
        }
 
        MMG[i] = MMG[i] / X;
 
        for (int j = i + 1; j < MMG.rowCount; j++)
            MMG[j] = MMG[j] - MMG[j, i] * MMG[i];
    }
 
    for (int i = MMG.rowCount - 1; i >= 0; i--)
    {
        for (int j = i - 1; j >= 0; j--)
            MMG[j] = MMG[j] - MMG[j, i] * MMG[i];
    }

    Row res = new Row(MMG.rowCount);
    for (int i = 0; i < MMG.rowCount; i++)
        res[mask[i]] = MMG[i, MMG.colCount - 1];
    return res;
}

PM MAIL   Вверх
bsa
Дата 30.5.2013, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.