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

Вопрос школьника по предмету Информатика

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

Ответ учителя по предмету Информатика

Ответ:

#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;  

}

Объяснение:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Похожие вопросы от пользователей