Суббота, 18.01.2025, 10:38
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Категории раздела
Форма входа
ДРУЗЬЯ САЙТА

Вызвать мастера в Красноярске

8 983 207 5474

8 902 918 9334

8 933 332 3164

---------------------------------

Запчасти бытткхники

  • Велес т.2935600
  • СЦ Близнецов т.2296595
  • Вираж
  • Красраб 110 т.2589503
  • Комплекстур Щорса30 т.2606797
  • Радиодетали

  • Якорный 9 т.2688317
  • Воронова 16 т.2202990
  • Красраб 125а т.2456544
  • Профи т.2702737
  • Дайте две т.+79237713323
  • Электрика

  • Электро +
  • Планета электрика
  • ЗАКЛАДКИ
    Поиск
    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Главная » Статьи » Dev C++ » Простые примеры

    Dev C++ Решение линейных систем уравнений методом Гаусса

    Dev C++ Решение линейных систем уравнений методом Гаусса

    Здесь реализован алгоритм без всяких перестановок что бы было понятней

    Также выводятся все  этапы расчета до приведения к верхнетреугольному виду прямое ход

    Обратный ход более прост не расписывается

    исходник  Здесь

    =

    =

    #include <iostream>
    #include <fstream>

    using namespace std;

    int main(int argc, char** argv) {
        setlocale (LC_ALL, "Russian");    
         int i, j, n, m; //solution of systems of linear algebraic equations by the Gauss method
         char d;//для меню
         float **matrix ;//объявляем двойной указатель на матрицу
        cout << "Решение систем линейных алгебраических уравнений методом Гаусса "; 
         cout << endl; 
        kt : 
    //    cout << "1- manual input "; 
        cout << "1- ручной ввод "; 
         cout << endl;
        cout << "2- ввод из файла "; 
         cout << endl; 
        cout << "3- выход "; 
         cout << endl;  
        cout << "введите: ";
        cin >> d;
        cout << endl;
        if(d > '3'||d < '1'   )
        {
        cout << "правильно выберите пункт меню и введите число "; 
         cout << endl;    
        goto kt;//переход на метку kt: если не выбран один из предложанных пунктов
        }
        
        if(d == '3'){return 0;}    
        
        if(d == '2'){//ввод матрици из файла
        
        ifstream fin;//объявляем перемен для работы с потоком
               
        fin.open("input.txt");//открываем поток и связываем его с файлом
        if (!fin) //поток не открылся ошибка
        {
        cout << "Файл не существует или поврежден"; 
        cout << endl;
        goto kt;//файл поврежден или не найден переход к меню выбери ручной ввод данных
        }
        
        fin >> n;//читаем из потока связонного с файлом первую строку n-количество строк в мвтрице матрица должна быть квадратной 3Х3; 4Х4; 5Х5
        m = n+1;//m-количество столбцов; матрица расширенная последний столбец - свободные члены
        //создаем массив
        matrix = new float *[n];//выделяем память кол строк 
        for (i = 0; i<n; i++) { matrix[i] = new float[m]; }//выдиляем память кол столбцов
        //инициализируем    
        for (int i = 0; i < n; i++)//сначала переключаем строки 
        {
            for (int j = 0; j < m; j++)//потом выбираем столбец
                fin >> matrix[i][j];//пишим в матрицу данные из файла
            }   
            fin.close();//закрываем поток отключ от файла файл может использовать другая программа
        }
        
        
            if(d == '1'){//ручной ввод данных в матрицу
        cout << "Количество уравнений: ";
        cin >> n;//
        cout << "Количество переменных: ";
        cin >> m;//
        m += 1;    
         //создаем массив
        matrix = new float *[n];
        for (i = 0; i<n; i++){ matrix[i] = new float[m]; }      
     
        //инициализируем
     
        for (i = 0; i<n; i++)
     
            for (j = 0; j<m; j++)
            {
                cout << " Элемент " << "[" << i + 1 << " , " << j + 1 << "]: ";
     
                cin >> matrix[i][j];//заполняем матрицу коэффициентами и свободными членами
            }
    }
        //выводим массив
        cout << "расширенная матрица" << endl;//паказываем созданную матрицу "уравнений" 
        for (i = 0; i<n; i++)
        {
            for (j = 0; j<m; j++)
                cout << matrix[i][j] << " ";
            cout << endl;
        }
        cout << endl;

        //Метод Гаусса
        //Прямой ход, приведение к верхнетреугольному виду
        float  tmp;
        int k;
        float *xx = new float[m];
     
        for (i = 0; i<n; i++)
        {
            tmp = matrix[i][i];
           
    cout <<"tmp1 = matrix ["<<i<<","<<i<<"] =" << matrix[i][i] ;     //[i][i];" <<tmp << " i= "<<i ;
    //cout << endl;
                    
            for (j = n; j >= i; j--){
               
    //cout <<"matrix ["<<i<<","<<j<<"] = " << matrix[i][j] ; 
    float vb=matrix[i][j] ;
    cout << endl;
                   
                    matrix[i][j] /= tmp;
                    
    cout <<"matrix ["<<i<<","<<j<<"]("<<vb<<")" <<" /= " <<"tmp1("<<tmp<<") == " <<matrix[i][j] ;  
    //cout << endl;
    }
    cout << endl;
    cout << "матрица после деления на tmp1" << endl;//паказываем созданную матрицу "уравнений" 
    for (int i = 0; i<n; i++)
    {
    for (int j = 0; j<m; j++)
    cout << matrix[i][j] << " ";
    cout << endl;
    }
    cout << endl;  
                         
            for (j = i + 1; j<n; j++)
            {
    cout << endl;            
                tmp = matrix[j][i];
    cout <<"tmp2 = matrix ["<<j<<","<<i<<"] = " << matrix[j][i] ;
    //cout << endl;   
          
                for (k = n; k >= i; k--){
                
    //cout <<"matrix ["<<j<<","<<k<<"] = " << matrix[j][k] ;
    float vb=matrix[j][k] ;
    cout << endl;              
                    matrix[j][k] -= tmp*matrix[i][k];
    cout <<"matrix ["<<j<<","<<k<<"]("<<vb<<")"<<" -= tmp2" <<"("<<tmp<<")"<<" * "<<"matrix ["<<i<<","<<k <<"]("<<matrix[i][k]<<")"<< " == " <<matrix[j][k] ;  
    //cout << endl;                
                  }
    cout << endl;                
            }
    cout << endl;      
        }
        
    //////////////////////////////////////////////////////////////////////////////////////////////////////    
         cout << "матрица в верхнетреугольном виде" << endl;//матрица в верхнетреугольном виде
        for (i = 0; i<n; i++)
        {
            for (j = 0; j<m; j++)
                cout << matrix[i][j] << " ";
            cout << endl;
        }
        cout << endl;
    //////////////////////////////////////////////////////////////////////////////////////////////////////////    
        /*обратный ход*/
        xx[n - 1] = matrix[n - 1][n];
        for (i = n - 2; i >= 0; i--)
        {
            xx[i] = matrix[i][n];
            for (j = i + 1; j<n; j++) xx[i] -= matrix[i][j] * xx[j];
        }
     
        //Выводим решения
    cout << "решения системы уравнений"<< endl;    
        for (i = 0; i<n; i++)
            cout << xx[i] << " ";
        cout << endl;
     
        delete[] matrix;
       // system("pause");//зависимость от windows лучьше не использовать
       cout << "нажмите Enter для выхода "; 
         cout << endl;
        cin.get();//а это пауза 
        cin.get();
        return 0;
    }

    =

    =

    Категория: Простые примеры | Добавил: doka (28.11.2020)
    Просмотров: 3993 | Рейтинг: 0.0/0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]