Вычислительная схема метода Гаусса состоит из двух этапов. Первый этап заключается в приведении системы к трапециевидной. Этот этап называется прямым ходом. Второй этап — определение неизвестных — называется обратным ходом.
Прямой ход метода Гаусса состоит в последовательном исключении коэффициентов при неизвестных начиная с первого столбца.
Прямой ход реализуется по следующим формулам (индекс k в круглых скобках означает номер цикла — номер столбца).
Умножение k-й строки на число
Вычитание k-й строки из j-й строки
Обратный ход — вычисление неизвестных — реализуется по следующим формулам, начиная с последнего уравнения системы
Код C++
using namespace std;
cout «Poryadok: » > n;
double **a = new double *[n];
for (i = 0; i new double [n];
double **a1 = new double *[n];
for (i = 0; i new double [n];
double *b = new double [n];
double *x = new double [n];
cout «Vvedite koefficienty i svobodnye chleny » for (i = 1; i for (j = 1; j «a[ » «,» «] Korni sistemy: » for ( i = 1; i «x[» «]=» » » return 0;
Решение системы уравнений методом Гаусса
Написать программу для решения системы линейных алгебраических уравнений методом гаусса
Наиболее известным и популярным точным способом решения систем линейных алгебраических уравнений (СЛАУ) является метод Гаусса. Этот метод заключается в последовательном исключении неизвестных. Пусть в системе уравнений
первый элемент a11 (0) не равен 0. Назовем его ведущим элементом первой строки. Поделим все элементы этой строки на a11 (0) и исключим x1 из всех последующих строк, начиная со второй, путем вычитания первой (преобразованной), умноженной на коэффициент при x1 в соответствующей строке. Получим
Если a22 (1) , то, продолжая аналогичное исключение, приходим к системе уравнений с верхней треугольной матрицей
Из нее в обратном порядке находим все значения xi:
Процесс приведения к системе с треугольной матрицей называется прямым ходом, а нахождения неизвестных — обратным. Если один из ведущих элементов равен нулю, изложенный алгоритм метода Гаусса неприменим. Тем не менее, для нормальной матрицы с ненулевым определителем всегда возможна такая перестановка уравнений, что на главной диагонали не будет нулей. В приведенном коде для простоты перестановок не делается, зато делается проверка решения, а прямой и обратный ход для наглядности вынесены в отдельные подпрограммы.
Аналогичная программа на C++ выглядит следующим образом:
Здесь матрица и вектор правой части генерируются случайным образом из чисел в диапазоне от 1 до 5:
Написать программу для решения системы линейных алгебраических уравнений методом гаусса
Dev C++ Решение линейных систем уравнений методом Гаусса
Здесь реализован алгоритм без всяких перестановок что бы было понятней
Также выводятся все этапы расчета до приведения к верхнетреугольному виду прямое ход
Математика без Ху%!ни. Метод Гаусса.
Обратный ход более прост не расписывается
исходник Здесь
using namespace std;
int main(int argc, char** argv) d;
cout ‘3’||d > n;//читаем из потока связонного с файлом первую строку n-количество строк в мвтрице матрица должна быть квадратной 3Х3; 4Х4; 5Х5
m = n+1;//m-количество столбцов; матрица расширенная последний столбец — свободные члены
//создаем массив
matrix = new float *[n];//выделяем память кол строк
for (i = 0; i > matrix[i][j];//пишим в матрицу данные из файла
>
fin.close();//закрываем поток отключ от файла файл может использовать другая программа
>
if(d == ‘1’) n;//
cout > m;//
m += 1;
//создаем массив
matrix = new float *[n];
for (i = 0; i > matrix[i][j];//заполняем матрицу коэффициентами и свободными членами
>
>
//выводим массив
cout
//Метод Гаусса
//Прямой ход, приведение к верхнетреугольному виду
float tmp;
int k;
float *xx = new float[m];
for (i = 0; i = i; j—) >» .
В результате форма приложения примет вид, как показано на рисунке 9.
Рис. 9. Главная форма приложения после размещения всех компонент
3. Программирование события клика на кнопке «Выход».
Вызовем событие OnClick компонента Button1 (кнопка « Выход «) (рис. 10). Событие размещается на вкладыше Events в Object Inspector .
Процесс программирования события OnClick подробно описан здесь.
Рис. 10. Вызов события OnClick компонента Button1
В результате, откроется окно с программным кодом метода обработки события. Между скобками вводим вызов метода Close() .
Метод Close() закрывает окно главной формы приложения и осуществляет все необходимые операции по освобождению памяти, ресурсов и т.д.
Листинг метода обработки события следующий:
4. Разработка формы ввода числа уравнений n.
4.1. Размещение компонент на форме и их настройка.
Процесс создания новой формы подробно описан здесь.
Для создания новой формы вызовем команду
В результате, будет создана новая форма, как показано на рисунке 11. Сохраняем форму под именем « Unit2.cpp «.
Создаются файлы, которые соответствуют форме:
– файл « Unit2.h «, содержащий описания глобальных переменных и подключения других модулей;
– файл « Unit2.cpp «, содержащий реализацию методов формы;
– файл « Unit2.dfm «, содержащий описание изображения формы на экране (размеры окна, координаты формы относительно окна экрана, значение цветов и прочее).
Новосозданной форме отвечает объект с именем Form2 . С помощью этого имени можно приступаться к свойствам и методам формы Form2 .
Рис. 11. Новосозданная форма Form2
Осуществим настройку формы Form2 .
Сначала настроим свойства формы:
– свойство Caption = «Задайте число уравнений» ;
– свойство BorderStyle = bsDialog ;
– свойство Position = poScreenCenter ;
– в свойстве Font нужно выбрать следдующие параметры шрифта: шрифт Tahoma, размер шрифта 12.
Размещаем на форме такие компоненты:
– компонент типа TGroupBox которому будет отвечать объект GroupBox1;
– компонент типа TLabel, размещается внутри области компонента GroupBox1 . Компоненту типа TLabel отвечает объект-переменная Label1 ;
– компонент типа TEdit , размещается внутри области компонента GroupBox1 . Этому компоненту отвечает объект (переменная) Edit1 ;
– два компонента типа TButton , которым отвечают объекты с именами Button1 и Button2 .
Осуществим настройку свойств компонент:
– в компоненте GroupBox1 значение свойства Caption = «» (пустая строка);
– в компоненте Label1 значение свойства Caption = «n = « ;
– в компоненте Edit1 значение свойства Text = «» ;
– в компоненте Button1 значение свойства Caption = « ;
– в компоненте Button2 значение свойства Caption = «Далее >>» .
После размещения компонент и корректирования размеров формы, форма Form2 имеет вид как показано на рисунке 12.
Рис. 12. Форма Form2 после размещения и настройки всех компонент
4.2. Программирование обработчиков событий формы Form2 .
В форме Form2 программируем два обработчика событий:
– обработчик события OnClick клика на кнопке « «;
– обработчик события OnClick клика на кнопке « Далее >> «.
Листинг обработчика события клика на кнопке Button1 (« «):
Листинг обработчика события клика на кнопке Button2 (« Продолжить >> «):
Глобальная переменная ModalResult отвечает за состояние формы. Если глобальная переменная ModalResult=0 , то это означает что форма открытая как модальное окно. Как только значение ModalResult станет ненулевым, то форма Form2 закроется с кодом возврата, помещенным в ModalResult .
Таким образом, если пользователь сделает клик на кнопке Button1 , то форма Form2 закроется с кодом возврата mrNo. Если пользователь сделает клик на кнопке Button2, то форма Form2 закроется с кодом возврата mrOk .
5. Построение формы ввода коэффициентов в уравнениях.
5.1. Размещение компонент на форме и их настройка.
Создание формы происходит стандартным путем и описано в п. 4.
Сохраняем форму под именем предлагаемым по умолчанию « Unit3.cpp «.
После создания формы получим объект с именем Form3 . С помощью этого объекта можно будет использовать методы и свойства формы Form3 .
Данной форме отвечают файлы с именами « Unit3.h «, « Unit3.cpp » и « Unit3.dfm «.
Сначала осуществим настройку свойств формы Form3 так, как описано в п. 4:
– свойство Caption = «Ввод коэффициентов уравнений «;
– свойство BorderStyle = bsDialog ;
– свойство Position = poScreenCenter ;
– в свойстве Font нужно выбрать параметры шрифта: шрифт Tahoma , размер шрифта 12 .
Для построения формы ввода коэффициентов уравнений используем такие компоненты:
– два компонента типа TLabel . Автоматически будут созданы объекты с такими именами: label1 и label2 ;
– компонент типа TStringGrid (рис. 13) для ввода коэффициентов, которые размещаются в левой части системы уравнений.
Компонент TStringGrid размещается во вкладке Additional панели инструментов « Tool Palette «. Создается объект с именем StringGrid1 ;
– компонент типа TStringGrid (рис. 13) для введения коэффициентов, которые размещаются в правой части системы уравнений. Создается объект с именем StringGrid2 ;
– два компонента типа TButton (кнопки « » и « Продолжить >> «). Создаются два объекта с именами Button1 и Button2 .
Рис. 13. Компонент TStringGrid на палитре компонент
После размещения компонент и корректировки их размеров, форма Form3 будет иметь приблизительно следующий вид (рис. 14).
Рис. 14. Форма Form3
Формируем свойства компонент формы Form3:
– в компоненте Label1 свойство Caption = « Коэффициенты в левой части уравнения «;
– в компоненте Label2 свойство Caption = «Правая часть» ;
– в компоненте Button1 свойство Caption = « ;
– в компоненте Button2 свойство Caption = «Далее >>» .
Формируем свойства компонентов типа TStringGrid :
– в компоненте StringGrid1 свойство FixedCols = 0 (число фиксированных колонок);
– в компоненте StringGrid1 свойство FixedRows = 0 (число фиксированных строк);
– в компоненте StringGrid2 свойство FixedCols = 0 ;
– в компоненте StringGrid2 свойство FixedRows = 0 ;
– в компоненте StringGrid1 выбираем вкладку Options и устанавливаем опцию goEditing в значение « true «;
– в компоненте StringGrid2 во вкладке Options опция goEditing = « true «.
Рис. 15. Установление опции goEditing во вкладке Options компонента StringGrid1
После выполненных действий, форма Form3 будет иметь вид как показано на рисунке 16.
Рис. 16. Форма Form3 после окончательного формирования
5.2. Программирование обработчиков событий формы Form3 .
Программируем обработчики событий OnClick клика на кнопках Button1 и Button2 формы Form3 .
Листинг обработчиков событий приведен ниже.
6. Создание формы вывода результата.
Последней в приложении создается форма, которая будет выводить результат вычислений. Процесс создания и сохранения формы подробно описан здесь. При сохранении формы оставляем имя по умолчанию « Unit4.cpp «.
В результате получаем объект с именем Form4 .
Новосозданная форма Form4 описывается в файле « Unit4.dfm «. Также форме отвечают файлы « Unit4.h » и « Unit4.cpp «.
6.1. Построение формы Form4 .
Сначала настраиваем свойства формы Form4 :
– свойство Caption = «Результат» ;
– свойство BorderStyle = bsDialog ;
– свойство Position = poScreenCenter ;
– в свойстве Font нужно выбрать следующие параметры шрифта: шрифт Tahoma , размер шрифта 12 .
Также корректируем размеры формы.
Следующим шагом идет размещение на форме компонент.
Размещаем на форме следующие компоненты (рис. 17):
– один компонент типа TLabel ;
– два компонента типа TStringGrid ;
– один компонент типа TButton .
Корректируем размеры и позиции компонент для удобного отображения.
После размещения компонент будут созданы объекты с такими именами: Label1 , StringGrid1 , StringGrid2 , Button1 . В компоненте StringGrid1 выводятся номера переменных величин x в уравнении. В компоненте StringGrid2 выводятся значения решения системы уравнений.
Настраиваем компоненты формы следующим образом:
– в компоненте Label1 свойство Caption = «Решение системы» ;
– в компоненте Button1 свойство Caption = «OK» ;
– в компоненте StringGrid1 свойства FixedCols = 0 и FixedRows = 0 ;
– в компоненте StringGrid2 свойства FixedCols = 0 и FixedRows = 0 .
После размещения и настройки компонент, форма Form4 будет иметь вид, как показано на рисунке 17.
Рис. 17. Форма Form4 после окончательного формирования
6.2. Программирование события клика на кнопке « ОК » формы Form4 .
Листинг обработчика события клика на кнопке « ОК » следующий:
7. Написание программного кода расчета.
7.1. Подключение модулей «Unit2.h», «Unit3.h», «Unit4.h» к модулю «Unit1.h».
Для того, чтобы из главной формы приложения Form1 вызвать второстепенные формы, нужно осуществить их подключения в модуле « Unit1.h «.
Подключение модулей форм Form2 , Form3 , Form4 к форме Form1 осуществляется стандартным для языка C/C++ способом.
Сначала нужно перейти в модуль « Unit1.h «.
Затем после строк
Рубрики
- C# (160)
- Практика (42)
- MS Visual Studio 2010 (34)
- MS Visual Studio 2017 (7)
- MS Visual Studio 2019 (10)
- Практика (31)
- Borland C++ Builder 2007 (16)
- MS Visual Studio 2010 (18)
- Visual C++ (112)
- Практика (6)
- Теория (97)
- Практика (1)
- Теория (5)
- Практика (1)
- Теория (18)
- Практика (19)
- Delphi-7 (3)
- Embarcadero RAD Studio 2010 (17)
- Практика (4)
- Теория (87)
Свежие записи
- C++. Примеры сохранения/чтения объектов класса. Сериализация 26 апреля, 2022
- C++. Пространства имен. Ключевые слова namespace, using 17 апреля, 2022
- Java. Класс ArrayList. Методы преобразующие массив в целом 16 апреля, 2022
- Java. Класс ArrayList. Методы определяющие общие характеристики массива 13 апреля, 2022
- Java. Класс ArrayList. Методы, определяющие информацию об элементах массива 13 апреля, 2022
- C++. Умные указатели. Классы указателей unique_ptr, shared_ptr, weak_ptr 10 апреля, 2022
- C++. Умные указатели. Автоматический указатель. Класс auto_ptr 7 апреля, 2022
- Java. Класс ArrayList. Методы изменяющие данные в массиве 6 апреля, 2022
- Java. Класс ArrayList. Динамический массив. Общие сведения 5 апреля, 2022
- Java. Общие сведение о Java Collections Framework 4 апреля, 2022
При использовании материалов сайта, ссылка на сайт обязательна.
Источник: al-shell.ru
XV Международная студенческая научная конференция Студенческий научный форум — 2023
Решение системы линейных алгебраических уравнений методом Гаусса на языке программирования С++
Гаврилов М.В. 1 , Балабан Е.И. 1 , Щука С.Ю. 1
1 Коломенский институт (филиал) Московского политехнического университета
Работа в формате PDF
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке «Файлы работы» в формате 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 ++
printf(«Введите число переменных и уравнений «);
void ScanMatrix(double **matrix, int quantity)
int j = quantity;
printf («Введите значение для правой части всех уравнений n «);
void TriangularMatrix(double **matrix, int quantity)
while (matrix[f][j] == 0)
Источник: scienceforum.ru
Программа решения СЛАУ по методу Гаусса
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Студопедия рекомендует:
Экзистенциализм. Основные идеи и представители: С. Кьеркегор, М. Хайдеггер, К. Ясперс, Ж.П. Сартр, А. Камю, Г. Марсель, Х. Ортега-и-Гассет Экзистенциализм и философская антропология Учебная цель: рассмотреть связь онтологии с антропологией.
Принципы физического воспитания Общепедагогические принципы – это отправные положения, определяющие общую методику процесса физического воспитания.
ТЕОРИЯ ЗАЩИТНЫХ МЕХАНИЗМОВ ЛИЧНОСТИ В современной психологической литературе встречаются различные термины, касающиеся феноменов защиты.
Аналогия закона и аналогия права В тех случаях, когда возникли определенные отношения, которые прямо не урегулированы законодательством или соглашением сторон и.
Метод диаграмм Вейча Диаграмма Вейча – это специального вида таблица, используемая для задания логических функций и позволяющая упростить процесс.
Источник: studopedia.ru