С++ программная реализация метода Гаусса
Вычислительная схема метода Гаусса состоит из двух этапов. Первый этап заключается в приведении системы к трапециевидной. Этот этап называется прямым ходом. Второй этап — определение неизвестных — называется обратным ходом.
Прямой ход метода Гаусса состоит в последовательном исключении коэффициентов при неизвестных начиная с первого столбца.
Прямой ход реализуется по следующим формулам (индекс k в круглых скобках означает номер цикла — номер столбца).
Умножение k-й строки на число
. (1)
Вычитание k-й строки из j-й строки
. (2)
. (3)
Обратный ход — вычисление неизвестных — реализуется по следующим формулам, начиная с последнего уравнения системы
. (4)
Код C++
#include <iostream>
using namespace std;
int n, i, j, k;
double d, s;
int main()
{
cout «Poryadok: »
cin >> n;
double **a = new double *[n];
for (i = 0; i
a[i] = new double [n];
double **a1 = new double *[n];
for (i = 0; i
a1[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
{
cout «a[ » «,» «]= «;
cin >> a[i][j];
a1[i][j] = a[i][j];
}
cout «b,[ » «]= «;
cin >> b[i];
}
for (k = 1; k // прямой ход
{
for (j = k + 1; j
{
d = a[j][k] / a[k][k]; // формула (1)
for (i = k; i
{
a[j][i] = a[j][i] — d * a[k][i]; // формула (2)
}
b[j] = b[j] — d * b[k]; // формула (3)
}
}
for (k = n; k >= 1; k—) // обратный ход
{
d = 0;
for (j = k + 1; j
{
s = a[k][j] * x[j]; // формула (4)
d = d + s; // формула (4)
}
x[k] = (b[k] — d) / a[k][k]; // формула (4)
}
cout «Korni sistemy: »
for( i = 1; i
cout «x[» «]=» » »
return 0;
}
function-x.ru
метод Гаусса | C++ для приматов
Задача А50. Даны действительные числа [latex]a_{1}[/latex], [latex]b_{1}[/latex], [latex]c_{1}[/latex], [latex]a_{2}[/latex], [latex]b_{2}[/latex], [latex]c_{2}[/latex]. Выяснить, верно ли что [latex]\left|a_{1} b_{2} -a_{2} b_{1} \right|\geq 0.0001[/latex], и если верно, то найти решение системы линейных уравнений
[latex]a_{1} x+b_{1} y+c_{1} =0[/latex],
[latex]a_{2} x+b_{2} y+c_{2} =0[/latex]
(при выполнении выписанного неравенства система заведомо совместна и имеет единственное решение).
[latex]a_{1}[/latex] | [latex]b_{1}[/latex] | [latex]c_{1}[/latex] | [latex]a_{2}[/latex] | [latex]b_{2}[/latex] | [latex]c_{2}[/latex] | [latex]x[/latex] | [latex]y[/latex] | Комментарий. |
3,8 | 5 | -2 | 6 | 8,4 | 3 | 16,5625 | -12,1875 | Тест пройден. |
0 | 4 | 5 | 2 | 0 | 9 | -4,5 | -1,25 | Тест пройден. |
1 | 2 | -3 | 3 | 2 | -1 | -1 | 2 | Тест пройден. |
1 | 0.00002 | 5 | 2 | 0.00005 | 8 | — | — | Тест не пройден. Неравенство не выполняется. |
1 | 4 | 5 | 2 | 8 | 3 | — | — | Тест не пройден. Неравенство не выполняется. |
Код программы (C++):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <stdio.h> #include <math.h>
int main() { double a1, b1, c1, a2, b2, c2; // Переменные, предоставленные в условии. double x, y; // Переменные, которые нужно найти. double b0, c0; // Вспомогательные переменные. scanf («%lf %lf %lf %lf %lf %lf», &a1, &b1, &c1, &a2, &b2, &c2); // Ввод данных с клавиатуры. if (fabs(a1*b2-a2*b1)>=0.0001) { if (a1!=0) { b0=b2-(b1/a1*a2); c0=-(c2-(c1/a1*a2)); y=c0/b0; x=(-c1-((b1*c0)/b0))/a1; printf («x=%lf \ny=%lf \n», x, y); } else { b0=b1-(b2/a2*a1); c0=-(c1-(c2/a2*a1)); y=c0/b0; x=(-c2-((b2*c0)/b0))/a2; printf («x=%lf \ny=%lf \n», x, y); } } else { puts («Неравенство не выполняется.»); } return 0; } |
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { double a1, b1, c1, a2, b2, c2, x, y, b0, c0; Scanner in = new Scanner (System.in); a1=in.nextDouble(); b1=in.nextDouble(); c1=in.nextDouble(); a2=in.nextDouble(); b2=in.nextDouble(); c2=in.nextDouble(); if (Math.abs(a1*b2-a2*b1)>=0.0001) { if (a1!=0) { b0=b2-(b1/a1*a2); c0=-(c2-(c1/a1*a2)); y=c0/b0; x=(-c1-((b1*c0)/b0))/a1; } else { b0=b1-(b2/a2*a1); c0=-(c1-(c2/a2*a1)); y=c0/b0; x=(-c2-((b2*c0)/b0))/a2; } System.out.format («x=%f %ny=%f %n», x, y); } else { System.out.println(«Неравенство не выполняется.»); } } } |
По условию задачи необходимо решить систему линейных уравнений и вывести на экран [latex]x[/latex], [latex]y[/latex].
Программа решает это уравнение по методу Гаусса.
Изначально она делает проверку на наличие ненулевого аргумента [latex]a_{1}[/latex]. Если таковой имеется, то программа решает задачу, исходя из первого уравнения системы, в противном случае — решение начинается со второго уравнения.
Далее я ввела в программу переменные [latex]b_{0}[/latex], [latex]c_{0}[/latex], чтобы не перегружать формулы большим количеством данных. Алгоритм действий таков:
1) Перенести [latex]c_{1}[/latex] и [latex]c_{2}[/latex] в правую часть уравнения, что автоматически меняет их знак на противоположный.
2) Если в программе присутствует ненулевой аргумент [latex]a_{1}[/latex], то она вычитает из второго уравнения первое, предварительно домножив второе на [latex]\frac{b_{1} a_{2} }{a_{1} }[/latex].
3) Из преобразованного второго уравнения находится [latex]y[/latex], который впоследствии подставляется в первое уравнение системы для нахождения [latex]x[/latex] .
Для выполнения программы и проверки тестов можно воспользоваться следующим объектом (C++) и этим (Java).
cpp.mazurok.com
Программа решения системы линейных алгебраических уравнений методом Гаусса
Глава 3 Более сложные элементы языка
____________________________________________________________________
лизовать этот алгоритм для вас не составит труда. И лишь после этого сопос-
тавьте свою программу с приведенной в книге. Думайте, анализируйте, сравни-
вайте коды, ищите лучшие решения, нещадно критикуйте меня! Вполне воз-
можно, что вы напишете программу лучше. Лучше не в смысле получаемых ре-
зультатов (они должны совпадать!), а с точки зрения реализации. Может быть,
вы напишете более эффективную программу или реализуете отдельные фраг-
менты алгоритма более просто, ну и т.д. И имейте в виду, что и сами алгорит-
мы, решающие одну и ту же задачу, можно составлять по-разному!Так что по-
пробуйте и алгоритм придумать свой.
Для сравнения я приведу три варианта программы, написанных тремя моими студентами. Первый, назовем его «плохим программистом», реализовал алгоритм, как говорится в «лоб». Как записано в блок-схеме,так и реализовано в программе. На защите своей программы он признался мне, что так и не смог написать эту программу без оператораgoto. Кроме того, его программа не умела определять существует решение или нет, а также не был организован ввод коэффициентов расширенной матрицы. Его программа умела решать только систему из трех уравнений с тремя неизвестными.
Второй студент, назовем его «средним программистом», сумел написать программу без goto, но также действовал в «лоб». Правда его программа уже
«умела» вводить коэффициенты расширенной матрицы.
И, наконец, третий студент, назовем его «хорошим программистом», сумел написать очень изящную по реализации программу. Его программа оказалась намного короче по количеству операторов в тексте программы. В программе он использовал динамические массивы, что позволило реализовать алгоритм ме-тода Гаусса для любого числа уравнений. Кроме того, часть кода, где непосред-
ственно реализуется алгоритм метода Гаусса, организовал в виде процедуры.
В качестве модельного примера выбрана система:
studfiles.net
Gauss 1.3 Rus — Программа для решения систем уравнений методом Гаусса [ARCHIVE EXE IMAGE]
Программа Mat JV предназначена для решения задач линейной алгебры. Основной особеннстью Mat JV является пошаговое решение задач. — Решение системы алгебраических уравнений методом Гаусса. — Решение системы алгебраических уравнений по правилу Крамера. — Нахождение определителя матрицы. — Вычисление математических выражений. Решение может быть получено как численно…
- 248,51 КБ
- дата добавления неизвестна
- изменен
Прога для решения МАТРИЦ до 7-го ранга. Полезна по ТОЭ и Вышке.
- 266,27 КБ
- дата добавления неизвестна
- изменен
Программа — решатель. Решает примеры из векторной алгебры, системы уравнений, операции с матрицами. Кряк прилагается. Я так понял, что автор программы забросил свой проект, думаю, что публикация такой полезной программы не будет нарушением авторских прав.
- 264,92 КБ
- дата добавления неизвестна
- изменен
Задачник Кузнецова Л. А. по высшей математике Здесь представлен задачник Кузнецова Л. А. (Сборник заданий по высшей математике (типовые расчеты) — СПб.: Лань, 2005) в электронном виде. Данный сборник является одним из основных пособий, используемых в обучении студентов технических ВУЗов. Задачник разбит на соответствующие подразделы и содержит задания по всем основным темам…
- 3,24 МБ
- дата добавления неизвестна
- изменен
Программа для решения задач по линейной алгебре: сложение, вычитание, перемножение матриц, нахождение определителя и другие действия над матрицами, нахождение решения системы алгебраических уравнений с выводом подробного ответа
- 466,78 КБ
- дата добавления неизвестна
- изменен
Уфа, УГАТУ. — 19 с. Преподаватель: Савенко О.В. Тематика задач: Группировка и ее виды. Графическое построение рядов распределений Обобщающие статистические показатели Структурные средние величины Показатели вариации Выборочное наблюдение Корреляционно-регрессионный анализ Ряды динамики и их статистический анализ Экономические индексы Полностью решенный один вариант задач….
- 119,04 КБ
- дата добавления неизвестна
- изменен
www.twirpx.com
Метод Гаусса для решения систем линейных алгебраических уравнений (СЛАУ)
Теоретическая часть
Метод Гаусса представляет собой обобщение способа подстановки и состоит в последовательном исключении неизвестных до тех пор, пока не останется одно уравнение с одним неизвестным.
При этом матрица СЛАУ приводится треугольному виду, где ниже главной диагонали располагаются только нули.
Приведение матрицы к треугольному виду называется прямым ходом метода Гаусса. Обратный ход начинается с решения последнего уравнения и заканчивается определением первого неизвестного.
Имеем Ax=b, где A=[aij] — матрица размерности n?n, det A>0, b=(a1, n+1, …, an, n+1)T.
В предположении, что a11>0, первое уравнение системы (1):
делим на коэффициент a11, в результате получаем уравнение
Затем из каждого из остальных уравнений вычитается первое уравнение, умноженное на соответствующий коэффициент ai1. В результате эти уравнения преобразуются к виду
Первое неизвестное оказалось исключенным из всех уравнений, кроме первого. Далее предполагаем, что и исключаем неизвестное x2 из всех уравнений, начиная со второго, и т.д. В результате последовательного исключения неизвестных система уравнений преобразуется в систему уравнений с треугольной матрицей (2):
Совокупность проведенных действий называется прямым ходом метода Гаусса.
Из n—го уравнения системы (2) определяем xn, из (n-1)-го — xn-1и т.д. до x1. Совокупность таких действий называется обратным ходом метода Гаусса.
Реализация прямого хода требует арифметических операций, а обратного — арифметических операций.
Алгоритм
Описание входной информации: Str (Stlb) — количество строк (столбцов) в расширенной матрице, Ab [i, j] — матрица A (i — строки, j — столбцы).
Описание выходной информации: Ans — матрица-ответ.
Ссылки для скачивания:
Метод Гаусса на MatLab7
Метод Гаусса на Pascal ABC
Вернуться назад
pcfu.ru
2.1 Программа решения СЛАУ по методу Гаусса. Паскаль. Метод Гаусса
Похожие главы из других работ:
Задача линейного программирования
§ 4 Построение начального опорного решения методом Гаусса
Приводим задачу к каноническому виду…
Использование метода ветвей и границ при адаптации рабочей нагрузки к параметрам вычислительного процесса
4.3 Модификация последовательности решения задач в пакете по методу ветвей и границ
Описанная выше структура пакета рабочей нагрузки позволяет выделить следующие возможные случаи количества типов заданий. 1. Все задания пакета рабочей нагрузки имеют один и тот же тип (i=1). 2…
Метод Жордана-Гаусса рішення системи лінійних рівнянь
2.6 Приклад використовування методу Жордана-Гаусса
Вирішити систему лінійних рівнянь методом Жордана-Гаусса: Решение СЛАУ методом Жордано-Гаусса. Запишемо систему у вигляді: Послідовно будемо вибирати дозволяє елемент РЕ, який лежить на головній діаго-налі матриці…
Особенности вычисления определителя матрицы
2.2 Метод Гаусса для решения систем линейных уравнений
Пусть дана квадратная матрица A размером NxN. Требуется вычислить её определитель. Воспользуемся идеями метода Гаусса решения систем линейных уравнений. Дана система: a11 x1 + a12 x2 + … + a1n xn = b1 a21 x1 + a22 x2 + … + a2n xn = b2 … an1 x1 + an2 x2 + …..
Программа для решения линейных уравнений
2.2 РЕШЕНИЕ ОБЩЕЙ СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ ПО МЕТОДУ ГАУССА
Практическое значение правила Крамера для решения системы n линейных уравнений с п неизвестными невелико, так как при его применении приходится вычислять п +1 определителей n-го порядка: , x1, x2, …,xn…
Программирование системы уравнений
4 Разработка блок схемы решения системы уравнения методом Гаусса
…
Разработка прикладной программы для решения систем линейных алгебраических уравнений
1.2 Обзор программных средств для решения СЛАУ
Во все времена инженерам, исследователям (т.е. специалистам в своих областях) был необходим удобный и достаточно эффективный (для своего времени) инструмент для решения своих задач…
Разработка прикладной программы для решения систем линейных алгебраических уравнений
2.1 Описание алгоритма решения СЛАУ
Системы уравнений появляются почти в каждой области прикладной математики. В некоторых случаях эти системы уравнений непосредственно составляют ту задачу, которую необходимо решать, в других случаях задача сводится к такой системе. Например…
Разработка прикладной программы для решения систем линейных алгебраических уравнений
2.2 Компьютерная реализация алгоритма решения СЛАУ
программа листинг алгебраический уравнение Компьютерная реализация метода Гаусса часто осуществляется с использованием LU-разложения матриц…
Разработка системы для оценки перспективности производственных направлений на предприятии
1.4 Метод Гаусса для решения систем уравнений
Метод Гаусса — классический метод решения системы линейных алгебраических уравнений. Состоит в постепенном понижении порядка системы и исключении неизвестных. Пусть исходная система выглядит следующим образом (1.4…
Реализация иерархии классов для решения системы линейных алгебраических уравнений
1.2 Метод Гаусса решения СЛУ
На практике чаще всего используют метод Гаусса построения решений СЛУ…
Решение систем нелинейных уравнений методом Бройдена
1.3 Метод исключения Гаусса для решения СЛАУ
Суть всех методов исключения состоит в приведении исходной системы уравнений к системе более простого вида, для которой легко найти решение. К этим методам можно отнести метод исключения Гаусса, который имеет много вычислительных схем и…
Способ решения системы линейных уравнений на ЭВМ методом Гаусса
1. Решение СЛАУ методом Гаусса
Прямой ход состоит из n ( 1 шагов исключения. 1-й шаг. Целью этого шага является исключение неизвестного x1 из уравнений с номерами i = 2, 3, …, n. Предположим, что коэффициент a11 ( 0. Будем называть его главным элементом 1-го шага…
Сравнение эффективности различных методов решения систем линейных алгебраических уравнений. Метод Крамера и метод простой итерации
1.2 Метод простой итерации решения СЛАУ
Для использования этого метода систему, имеющую вид: нужно привести к следующему виду (называемому нормальным): (*) Затем в полученную систему подставляют начальное приближение решения, т.е…
Сравнительный анализ численных методов
3.5 Программная реализация итерационных методов решения СЛАУ
Рисунок 17 — Решение системы уравнений методом простых итераций…
prog.bobrodobro.ru