Написать программу решения системы линейных уравнений методом интеграций c++
программа должна иметь графический интерфейс

лера2083 лера2083    3   22.04.2020 13:49    0

Ответы
2281337xD 2281337xD  13.10.2020 16:27

#include "stdafx.h"

#include "iostream"

#include "vector"

#include "cmath"

#include "locale.h"

using namespace std;

int main()

{

   // Считываем размер вводимой матрицы

   setlocale(LC_ALL, "rus");

   int size;

   cout << "Введите размер вводимой матрицы: ";

   cin >> size;

   cout << endl;

   

   // Будем хранить матрицу в векторе, состоящем из

   // векторов вещественных чисел

   vector <vector <long double> > matrix;

   

   // Матрица будет иметь размер (size) x (size + 1),

   // c учетом столбца свободных членов    

   matrix.resize (size);

   cout << "Введите элементы матрицы " << size << "x" << size+1 <<":" <<endl;

   for (int i = 0; i < size; i++)

   {

       matrix[i].resize (size + 1);

       for (int j = 0; j < size + 1; j++)

       {

           cin >> matrix[i][j];

       }

   }

   // Считываем необходимую точность решения

   long double eps;

   cout << endl;

   cout << "Введите точность решения: ";

   cin >> eps;

   // Введем вектор значений неизвестных на предыдущей итерации,

   // размер которого равен числу строк в матрице, т.е. size,

   // причем согласно методу изначально заполняем его нулями

   vector <long double> previousVariableValues (size, 0.0);

   // Будем выполнять итерационный процесс до тех пор,

   // пока не будет достигнута необходимая точность    

   while (true)

   {

       // Введем вектор значений неизвестных на текущем шаге      

       vector <long double> currentVariableValues (size);

       // Посчитаем значения неизвестных на текущей итерации

       // в соответствии с теоретическими формулами

       for (int i = 0; i < size; i++)

       {

           // Инициализируем i-ую неизвестную значением

           // свободного члена i-ой строки матрицы

           currentVariableValues[i] = matrix[i][size];

           // Вычитаем сумму по всем отличным от i-ой неизвестным

           for (int j = 0; j < size; j++)

           {

               if (i != j)

               {

                   currentVariableValues[i] -= matrix[i][j] * previousVariableValues[j];

               }

           }

           // Делим на коэффициент при i-ой неизвестной

           currentVariableValues[i] /= matrix[i][i];

       }

       // Посчитаем текущую погрешность относительно предыдущей итерации

       long double error = 0.0;

       

       for (int i = 0; i < size; i++)

       {

           error += abs (currentVariableValues[i] - previousVariableValues[i]);

       }

       // Если необходимая точность достигнута, то завершаем процесс

       if (error < eps)

       {

           break;

       }

       // Переходим к следующей итерации, так

       // что текущие значения неизвестных

       // становятся значениями на предыдущей итерации

       previousVariableValues = currentVariableValues;

   }

   // Выводим найденные значения неизвестных с 8 знаками точности

   for (int i = 0; i < size; i++)

   {

       printf ("%.8llf ", previousVariableValues[i]);

   }

   cout << endl;

   system("pause");

   return 0;  

}

Объяснение:

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика