Программа система уравнений методом гаусса

Метод Гаусса онлайн

Данный онлайн калькулятор находит решение системы линейных уравнений (СЛУ) методом Гаусса. Дается подробное решение. Для вычисления выбирайте количество переменных и количество уравнений. Затем введите данные в ячейки и нажимайте на кнопку «Вычислить.»

Предупреждение

Инструкция ввода данных. Числа вводятся в виде целых чисел (примеры: 487, 5, -7623 и т.д.), десятичных чисел (напр. 67., 102.54 и т.д.) или дробей. Дробь нужно набирать в виде a/b, где a и b (b>0) целые или десятичные числа. Примеры 45/5, 6.6/76.4, -7/6.7 и т.д.

Метод Гаусса

Метод Гаусса − это метод перехода от исходной системы линейных уравнений (при помощи эквивалентных преобразований) к системе, которая решается проще, чем исходная система.

Эквивалентными преобразованиями системы линейных уравнений являются:

  • перемена местами двух уравнений в системе,
  • умножение какого-либо уравнения в системе на ненулевое действительное число,
  • прибавление к одному уравнению другого уравнения, умноженного на произвольное число.

Рассмотрим систему линейных уравнений:

(1)

Запишем систему (1) в матричном виде:

Ax=b(2)
(3)

A-называется матрица коэффициентов системы, b − правая часть ограничений, x− вектор переменных, которую нужно найти. Пусть rang(A)=p.

Эквивалентные преобразования не меняют ранг матрицы коэффициентов и ранг расширеннной матрицы системы. Не меняется также множество решений системы при эквивалентных преобразованиях. Суть метода Гаусса заключается в приведении матрцы коэффициентов A к диагональному или ступенчатому.

Построим расшренную матрицу системы:

(4)

Предположим a11≠0. Если это не так, то можно поменять местами эту строку со строкой с ненулевым элементом в столбце 1 (если нет таких строк, то переходим к следующему столбцу). Обнуляем все элементы столбца 1 ниже ведущего элемента a11. Для этого сложим строки 2,3, . m со строкой 1, умноженной на −a21/a11, −a31/a11, . −am1/a11, соответственно. Тогда (4) примет следующий вид:

(5)

На следующем этапе обнуляем все элементы столбца 2, ниже элемента . Если данный элемент нулевой, то эту строку меняем местами со строкой, лежащий ниже данной строки и имеющий ненулевой элемент во втором столбце. Далее обнуляем все элементы столбца 2 ниже ведущего элемента a22. Для этого сложим строки 3, . m со строкой 2, умноженной на −a32/a22, . −am2/a22, соответственно. Продолжая процедуру, получим матрицу диагонального или ступенчатого вида. Пусть полученная расширенная матрица имеет вид:

(6)

Обратим внимание на последние строки. Если . равны нулю, то система линейных уравнений имеет решение, если же хотя бы один из этих чисел отлично от нуля, то система несовместна. Иными словами, система (2) совместна тогда и только тогда, когда ранг матрицы A навен рангу расширенной матрицы (A|b).

Пусть . Тогда

(7)

Так как rangA=rang(A|b), то множество решений (7) есть (n−p)− многообразие. Следовательно n−p неизвестных можно выбрать произвольно. Остальные неизвестные из системы (7) вычисляются так. Из последнего уравнения выражаем xp через остальные переменные и вставляем в предыдущие выражения. Далее из предпоследнего уравнения выражаем xp−1 через остальные переменные и вставляем в предыдущие выражения и т.д. Рассмотрим метод Гаусса на конкретных примерах.

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

Пример 1. Найти общее решение системы линейных уравнений методом Гаусса:

Матричный вид записи: Ax=b, где

Для решения системы, запишем расширенную матрицу:

Обозначим через aij элементы i-ой строки и j-ого столбца.

Исключим элементы 1-го столбца матрицы ниже элемента a1 1. Для этого сложим строки 2,3 со строкой 1, умноженной на -2/3,-1/2 соответственно:

Исключим элементы 2-го столбца матрицы ниже элемента a2 2. Для этого сложим строку 3 со строкой 2, умноженной на 9/8:

Делим каждую строку матрицы на соответствующий ведущий элемент (если ведущий элемент существует):

Из вышеизложенной таблицы можно записать:

Подставив верхние выражения в нижние, получим решение.

,,.

Пример 2. Найти общее решение системы линейных уравнений методом Гаусса:

Матричный вид записи: Ax=b, где

Для решения системы, построим расширенную матрицу:

Обозначим через aij элементы i-ой строки и j-ого столбца.

Исключим элементы 1-го столбца матрицы ниже элемента a11. Для этого сложим строки 2,3 со строкой 1, умноженной на -1/5,-6/5 соответственно:

Исключим элементы 2-го столбца матрицы ниже элемента a22. Для этого сложим строку 3 со строкой 2, умноженной на -1:

Делим каждую строку матрицы на соответствующий ведущий элемент (если ведущий элемент существует):

Выразим переменные x1, x2 относительно остальных переменных.

где x3, x4− произвольные действительные числа.

Подставив верхние выражения в нижние, получим решение.

где x3, x4− произвольные действительные числа.

Векторный вариант решения:

Запишем вышеизложенное решение, представив свободные переменные в виде тождеств:

Тогда векторное решение можно представить так:

где x3, x4− произвольные действительные числа.

Онлайн калькулятор. Решение систем линейных уравнений методом Гаусса.

Используя этот онлайн калькулятор для решения систем линейных уравнений (СЛУ) методом Гаусса, вы сможете очень просто и быстро найти решение системы.

Воспользовавшись онлайн калькулятором для решения систем линейных уравнений методом Гаусса, вы получите детальное решение вашей задачи, которое позволит понять алгоритм решения задач на решения систем линейных уравнений, а также закрепить пройденный материал.

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

Изменить названия переменных в системе

Заполните систему линейных уравнений:

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

  • В онлайн калькулятор вводить можно числа или дроби. Более подробно читайте в правилах ввода чисел.
  • Для изменения в уравнении знаков с «+» на «-» вводите отрицательные числа.
  • Если в уравнение отсутствует какая-то переменная, то в соответствующем поле ввода калькулятора введите ноль.
  • Если в уравнение перед переменной отсутствуют числа, то в соответствующем поле ввода калькулятора введите единицу.

Например, линейное уравнение x 1 — 7 x 2 — x 4 = 2

будет вводится в калькулятор следующим образом:

Дополнительные возможности калькулятора для решения систем линейных уравнений методом Гаусса

  • Между полями для ввода можно перемещаться нажимая клавиши «влево», «вправо», «вверх» и «вниз» на клавиатуре.
  • Вместо x 1, x 2, . вы можете ввести свои названия переменных.

Вводить можно числа или дроби (-2.4, 5/7, . ). Более подробно читайте в правилах ввода чисел.

Метод Гаусса на Java

Статья посвящена реализации алгоритма Гаусса для решения системы линейных алгебраических уравнений на языке Java.

Теоретические сведения

Рассмотрим математическую теорию. Система линейных уравнений может иметь одно решение, бесконечно много решений или же быть несовместной (не иметь решений). Не все методы решения СЛАУ могут справится с вторым случаем, когда система имеет бесконечно много решений. Например, метод Крамера и матричный метод не применимы, но метод Гаусса вполне можно использовать.

Алгоритм можно условно разделить на два этапа:

  • Прямой ход
  • Обратный ход

В первом этапе образуются нули ниже или выше главной диагонали, за счет использования элементарных преобразований матрицы. На втором этапе находят неизвестные начиная с конца. Подробную теорию можно посмотреть по ссылке: метод Гаусса, поэтому с теорией пожалуй все. Перейдем к реализации.

Реализация

Начнем с постановки задачи:

  • нам нужно создать программу, реализующую систему линейных уравнений в виде некоторой структуры данных, используя приемы обобщенного программирования. Система должна содержать коэффициенты производного типа от класса Number (т.е. Float, Integer, Double и т.д.)
  • Запрограммировать алгоритм, который получив на вход структуру данных системы образует нули ниже главной диагонали

Начнем с написания интерфейса, который должно реализовывать каждое уравнение:

Здесь все должно быть ясно, N некоторый наследник Number‘а, T — некоторый тип, реализующий данный интерфейс (рекурсивные дженерики). Метод addEquation(T item) позволяет прибавить каждый элемент уравнения item к каждому своему элементу. Остальные методы работают аналогично.

Теперь рассмотрим класс системы уравнений. Как видно в листинге ниже, он дженеризирован так же, как и интерфейс Gauss и содержит методы для удобного доступа к приватному списку содержащих в себе уравнений.

Теперь можно приступать к реализации «частного случая» структуры уравнения. Создадим класс MyEquation, реализующий наш интерфейс. Пусть наследником Number‘а будет сверхточный класс Float (на практике лучше брать Double). Обратите внимание, что в методе addEquation(MyEquation item) используется объект класса ListIterator, позволяющий изменять элементы перебираемого списка.

Теперь имеем полноценную структуру данных, реализующую систему уравнений. Составим алгоритм который будет принимать некоторый объект, реализующий интерфейс Gauss, затем вызывая нужные методы приведет матрицу к нужному виду.

Алгоритм простой, найти нужный коэффициент, домножить на него i-ю строку (i=0..n-1), и прибавить ее к j-й строке (j=i..n). Заметьте, алгоритм не знает как именно реализуются методы findCoefficient, mul и addEquation, это придает коду бОльшую гибкость, т.к. при потребности изменить способы манипуляции уравнениями (строками), будут изменены только реализации трех вышеупомянутых методов, а главный алгоритм останется нетронутым.

Почти все. Осталось запустить это все в методе main:

Запустим это чудо, что бы проверить корректность работы…

Это все. Исходники можно скачать на github’е.

Вывод

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


источники:

http://ru.onlinemschool.com/math/assistance/equation/gaus/

http://habr.com/ru/post/270289/