Решение системы линейных алгебраических уравнений методом Гаусса на языке программирования С++ - Студенческий научный форум

XV Международная студенческая научная конференция Студенческий научный форум - 2023

Решение системы линейных алгебраических уравнений методом Гаусса на языке программирования С++

Гаврилов М.В. 1, Балабан Е.И. 1, Щука С.Ю. 1
1Коломенский институт (филиал) Московского политехнического университета
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

М.В. Гаврилов

студент 2 курса направления подготовки

«Информатика и вычислительная техника»

С.Ю. Щука

студент 2 курса направления подготовки

«Информатика и вычислительная техника»

Научный руководитель Е.И. Балабан

доцент кафедры Естественно-научных дисциплин

Коломенский институт (филиал) федерального

государственного автономного образовательного учреждения

высшего образования

«Московский политехнический университет»

Решение системы линейных алгебраических уравнений методом Гаусса на языке программирования С++

Метод Гаусса является популярным методом решения системы линейных алгебраических уравнений. Он предполагает последовательное исключение переменных, при котором с помощью преобразований система уравнений приводится к системе треугольного вида. Затем последовательно, начиная с последних переменных, находят все остальные переменные.

Система линейных уравнений с действительными постоянными коэффициентами:


В матричной форме она выглядит следующим образом:

Решение системы линейных уравнений методом Гаусса предполагает две стадии:

- последовательное исключение;

- обратная подстановка.

Рассмотрим частный случай метода Гаусса, когда система имеет единственное решение, число уравнений равно числу переменных. Для того, чтобы решить систему линейных алгебраических уравнений методом Гаусса на языке программирования С++ потребуется выполнить следующие этапы работы:

изучить метод решения линейных уравнений – метод Гаусса;

составить математическую модель решения линейных уравнений методом Гаусса;

составить алгоритм решения линейных уравнений методом Гаусса в виде блок-схемы;

написать программу по составленным блок-схемам на языке программирования С++;

проверить работоспособность программы.

Результат исследования: программа, реализующая частный случай метода Гаусса.

При написании программы в основном будут использоваться условные операторы и циклы.

Описание последовательности действий:

Ввод данных: количество уравнений; с помощью двух вложенных циклов вводим значения коэффициентов в каждом уравнении (левая часть), затем, используя цикл, вводим значение правой части всех уравнений.

Приводим матрицу к треугольному виду. Для нужно выполнить следующие действия:

Перебор элементов главной диагонали левой части матрицы кроме последнего.

Проверка на предмет, является ли элемент главной диагонали равным нулю. Если да: нахождение с помощью цикла while строку, в которой элемент с номером перебираемого столбца не равен нулю. Окончание цикла while. Затем, с помощью цикла for происходит перестановка строк местами.

Перебор строки ниже элемента главной диагонали.

Нахождение коэффициента, на который нужно помножить первую строку, перед её вычитанием из нижней строки.

Вычитание строки, с помощью цикла for.

Окончание двух циклов for.

Нахождение переменных.

3.1. Перебор строки, начиная с последней до первой.

3.2. Суммирование левой части уравнения, за исключением искомой переменной с помощью цикла while. Окончание цикла while.

3.3. Вычитание из правой части левой.

3.4. Подстановка значения переменной в системы линейных уравнений, с помощью цикла while. Окончание цикла while.

3.5. Вывод переменной.

3.6. Окончание цикла for.

Реализация на C++

#include <stdio.h>

#include <iostream>

int KeepQuantityChangesSystemEquations()

{int quantity;

printf("Введите число переменных и уравнений ");

std::cin >> quantity;

return quantity;}

void ScanMatrix(double **matrix, int quantity)

{for (int j = 0; j < quantity; j++)

{printf("Введите значения коэфициентов при %d переменной для всех уравнений\n", j+1);

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

{std::cin >> matrix[i][j];}}

int j = quantity;

printf("Введите значение для правой части всех уравнений\n");

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

{std::cin >> matrix[i][j];}}

void TriangularMatrix(double **matrix, int quantity)

{for (int j = 0; j < quantity - 1; j++)

{if (matrix[j][j] == 0)

{ int f = j+1;

while (matrix[f][j] == 0)

{f = f + 1;}

int c = 0;

for (int q = j; q < quantity + 1; q++)

{c = matrix[f][q];

matrix[f][q] = matrix[j][q];

matrix[j][q] = c;}}

for (int i = j + 1; i < quantity; i++)

{double k = -matrix[i][j]/matrix[j][j];

for (int n=j + 1; n < quantity+1; n++)

{matrix[i][n] = matrix[i][n]+matrix[j][n]*k;}

matrix[i][j]=0;}}}

void FindVariables(double **matrix, int quantity)

{for (int i = quantity-1; i >= 0; i--)

{double summa=0;

int j = quantity-1;

while (j > i)

{summa = summa + matrix[i][j];

j=j-1;}

matrix[i][quantity]=matrix[i][quantity]-summa;

double k = matrix[i][quantity] / matrix[i][i];

int f = i - 1;

while (f >= 0)

{matrix[f][i] = matrix[f][i] * k;

f=f-1;}

printf("%d переменная = %lf\n", i+1, k);}}

void Gauss(double **matrix, int quantity)

{TriangularMatrix(matrix, quantity);

FindVariables(matrix, quantity);}

int main()

{int quantity = KeepQuantityChangesSystemEquations();

double **matrix;

matrix = new double *[quantity];

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

{matrix[i] = new double [quantity+1]; }

ScanMatrix(matrix, quantity);

Gauss(matrix, quantity);

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

{delete matrix[i];}

delete []matrix;

return 0;}

Пример решения системы линейных уравнений с помощью метода Гаусса:

Таким образом, решение системы линейных алгебраических уравнений методом Гаусса на языке программирования С++ возможно, благодаря применению условных операторов и циклов.

Список использованной литературы:

Киреев В.И. Численные методы в примерах и задачах: Учеб. пособие/В.И. Киреев, А.В. Пантелеев. – 3-е изд. стер. – М.: Высш. шк., 2008. – 480 с.: ил. ISBN 978-5-06-004763-9

Просмотров работы: 885