Решение системы линейных алгебраических уравнений методом Гаусса
Ненулевой минор максимального порядка. Рассмотрение решения системы линейных алгебраических уравнений методом Гаусса. Использование метода последовательного исключения переменных. Порядок создания массива под матрицу с помощью программного языка C++.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | практическая работа |
Язык | русский |
Дата добавления | 25.12.2015 |
Размер файла | 130,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего профессионального образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра экономической математики информатики и статистики (ЭМИС)
Отчет по практической работе №4
по дисциплине «Моделирование систем»
Студент группы 542:
Лошакова Н.Ю.
Преподаватель:
Зариковская Н.В.
Томск 2015
1. Постановка задачи
Решение системы линейных алгебраических уравнений методом Гаусса.
2. Краткая теория
Система уравнений - это условие, состоящее в одновременном выполнении нескольких уравнений относительно нескольких переменных. Решением системы уравнений называется упорядоченный набор чисел (значений переменных), при подстановке которых вместо переменных каждое из уравнений системы обращается в верное равенство.
Метод Гаусса - классический метод решения системы линейных алгебраических уравнений (СЛАУ). Это метод последовательного исключения переменных, когда с помощью элементарных преобразований система уравнений приводится к равносильной системе ступенчатого (или треугольного) вида, из которого последовательно, начиная с последних (по номеру) переменных, находятся все остальные переменные.
Пусть исходная система выглядит следующим образом
Матрица называется основной матрицей системы, -- столбцом свободных членов.
Тогда, согласно свойству элементарных преобразований над строками, основную матрицу этой системы можно привести к ступенчатому виду (эти же преобразования нужно применять к столбцу свободных членов):
При этом будем считать, что базисный минор (ненулевой минор максимального порядка) основной матрицы находится в верхнем левом углу, то есть в него входят только коэффициенты при переменных .
Тогда переменные называются главными переменными. Все остальные называются свободными.
Если хотя бы одно число , где , то рассматриваемая система несовместна, т.е. у неё нет ни одного решения.
Пусть для любых .
Перенесём свободные переменные за знаки равенств и поделим каждое из уравнений системы на свой коэффициент при самом левом (, где -- номер строки):
где
Если свободным переменным системы (2) придавать все возможные значения и решать новую систему относительно главных неизвестных снизу вверх (то есть от нижнего уравнения к верхнему), то мы получим все решения этой СЛАУ. Так как эта система получена путём элементарных преобразований над исходной системой (1), то по теореме об эквивалентности при элементарных преобразованиях системы (1) и (2) эквивалентны, то есть множества их решений совпадают.
3. Алгоритм
1. Подключили библиотеки, необходимые в данной программе (stdio.h,math.h,conio.h).
2. Создаем массив под матрицу и инициализируем ее.
3. Приводим матрицу к верхнетреугольному виду (прямой ход).
4. Делаем обратный и выводим решения на экран.
4. Результат
Результат работы программы представлен на рисунке 1.
Рисунок 1 результат работы программы
гаусс линейных алгебраический программный
В данной практической работе мы решили СЛАУ методом Гаусса.
Приложение А
Код программы
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <locale.h>
void vyvod(int,int *, float *, float *);
void forward(int, int *, float *, float *);
void f_add(int, int *, float*, float *);
void nevyazka(int, float *, float *, int *, float *);
int main()
{
setlocale(LC_ALL,"Russian");
int a, i, j, size;
float *mas, *mas_2, *mas_pogr, *mas_2pogr;
int *mas_in;
printf("Введите размер матрицы : ");
scanf_s("%d",&a);
size=a*a;
mas=new float [size];
mas_2=new float [a];
mas_in=new int [a];
for(i=0;i<a;i++)
mas_in[i]=i;
printf("Введите коэффициенты матрицы\n");
for (j=0;j<size;j++)
{
scanf_s("%f",&mas[j]);
}
printf("Введите вектор b\n");
for (j=0;j<a;j++)
{
scanf_s("%f",&mas_2[j]);
}
printf("\n\n");
forward(a, mas_in, mas, mas_2);
delete mas;
delete mas_2;
delete mas_in;
return 0;
}
void vyvod(int a,int *mas_in, float *mas, float *mas_2)
{
int i,j,c;
c=0;
for(i=0;i<a;i++)
{
for(j=0;j<a;j++)
{
printf("%.2f ", mas[a*mas_in[i]+j]);
c++;
}
printf("| %.2f",mas_2[mas_in[i]]);
printf("\n");
}
printf("\n\n\n");
}
void forward(int a, int *mas_in, float *mas, float *mas_2)
{
int s, i, j, index, korni , flag=1, temp_1;
float temp,*mas_pogr,*mas_2pogr;
mas_pogr=new float[a*a];
mas_2pogr=new float[a];
for (j=0;j<a;j++)
{
for (i=0;i<a;i++)
{
mas_pogr[a*j+i]=mas[a*j+i];
}
mas_2pogr[j]=mas_2[j];
}
//основной цикл
for (s=0; s<a; s++)
{
if (mas[a*mas_in[s]+s]==0)
{
for (i = s+1; i<a; i++)
{
if (mas[a*mas_in[i]+s])
{
temp = mas_in[s];
mas_in [s] = mas_in[i];
mas_in[i] = temp;
break;
}
}
}
if (mas[a*mas_in[s]+s]!=0)
{
mas_2[mas_in[s]]=mas_2[mas_in[s]]/mas[a*mas_in[s]+s];
for (i=a-1; i>=s; i--)
mas[a*mas_in[s]+i]=mas[a*mas_in[s]+i]/mas[a*mas_in[s]+s];
for(i=1+s; i<a; i++)
{
if (mas[a*mas_in[i]+s]!=0)
{
mas_2[mas_in[i]]=mas_2[mas_in[i]]+ mas_2[mas_in[s]]*(-mas[a*mas_in[i]+s]);
for(j=a-1; j>=s;j--)
{
mas[a*mas_in[i]+j]=mas[a*mas_in[i]+j]+mas[a*mas_in[s]+j]*(-mas[a*mas_in[i]+s]);
}
}
}
}
}
vyvod(a,mas_in, mas, mas_2);printf("\n");
f_add(a, mas_in, mas, mas_2);
vyvod(a, mas_in,mas, mas_2);
index=a;korni=0;
for (i=a-1;i>=0;i--)
{
flag=1;
for (j=0;j<a;j++)
{
if (mas[a*mas_in[i]+j]!=0)
{
flag=0;
break;
}
}
if(flag==1)
{
if (mas_2[mas_in[i]]==0)
{
index--;
}
else
{
printf("Решений нет!\n");
korni=1;
break;
}
}
}
if (korni==0)
{
if (index==a)
{
for (i=0; i<a; i++)
{
printf("X_%d= %.2f ",i+1, mas_2[mas_in[i]]);
printf("\n");
}
printf("\n\n");
nevyazka(a,mas_pogr,mas_2,mas_in,mas_2pogr);
}
else
printf ("Решений бесконечно много!\n");
}
}
void f_add(int a, int *mas_in, float *mas, float *mas_3)
{
int s, i, j;
for (s=a-1; s>0; s--)
{
for (i=s-1; i>=0; i--)
{
mas_3[mas_in[i]]=mas_3[mas_in[i]]+(-1)*mas[a*mas_in[i]+s]*mas_3[mas_in[s]];
for (j=a-1;j >= i; j--)
{
mas[a*mas_in[i]+j]=mas[a*mas_in[i]+j]+(-1)*mas[a*mas_in[s]+j]*mas[a*mas_in[i]+s];
}
}
}
}
void nevyazka(int a, float *mas_pogr, float *mas_3, int *mas_in, float *mas_2pogr)
{
int i,j;
long double pogresh=0;
for(i=0;i<a;i++)
{
for(j=0;j<a;j++)
{
pogresh=mas_pogr[a*mas_in[i] + j]*mas_3[mas_in[j]]+pogresh;
}
pogresh=pogresh-mas_2pogr[mas_in[i]];
printf(" e%d = %e\n", i+1, pogresh);
pogresh=0;
}
}
Размещено на Allbest.ru
Подобные документы
Системы линейных алгебраических уравнений. Решение систем уравнений графическим способом. Разработка программного кода модуля, реализующего приближенное решение систем линейных уравнений графическим способом. Отладка программного модуля "Метод Гаусса".
курсовая работа [858,5 K], добавлен 01.12.2013Системы линейных алгебраических уравнений. Код программы для решения систем линейных алгебраических уравнений. Математические и алгоритмические основы решения задачи методом Гаусса. Программная реализация решения. Алгоритмы запоминания коэффициентов.
лабораторная работа [23,5 K], добавлен 23.09.2014Матричная форма записи системы линейных уравнений, последовательность ее решения методом исключений Гаусса. Алгоритмы прямого хода и запоминания коэффициентов. Решение задачи о сглаживании экспериментальных данных с помощью метода наименьших квадратов.
курсовая работа [610,7 K], добавлен 25.06.2012Постановка задачи, математические и алгоритмические основы решения системы линейных алгебраических уравнений. Решение системы данных уравнений методом Гаусса с выбором главного элемента по столбцу. Функциональные модели и блок-схемы решения задачи.
курсовая работа [428,9 K], добавлен 25.01.2010Применение итерационных методов численного решения системы линейных алгебраических уравнений при вычислении на ЭВМ. Математические и алгоритмические основы решения задачи, метод Гаусса. Функциональные модели и блок-схемы, программная реализация решения.
курсовая работа [527,5 K], добавлен 25.01.2010Решение системы линейных уравнений с матричными элементами и свободными членами с использованием метода Гаусса с выбором главного элемента, основанного на приведении матрицы системы к треугольному виду с помощью нахождения элементов главной диагонали.
лабораторная работа [71,1 K], добавлен 10.12.2014Сферы использования компьютеров, сущность и языки программирования. Применение модифицированного метода Гаусса и расширенной матрицы для решения системы линейных алгебраических уравнений (СЛАУ). Разработка программы, системные требования для ее работы.
курсовая работа [657,1 K], добавлен 09.01.2014Разработка программного продукта для решения систем линейных алгебраических уравнений методом Гаусса с помощью ЭВМ. Математическое описание объекта моделирования, начальные и граничные условия. Алгоритм реализации задачи. Использование модуля CRT.
курсовая работа [269,6 K], добавлен 07.01.2016Алгоритм решения систем линейных уравнений методом Гаусса, его этапы. Система уравнений для определения коэффициентов сплайна, представляющая собой частный случай систем линейных алгебраических уравнений. Программная реализация, тестовый пример.
курсовая работа [431,8 K], добавлен 15.06.2013Сущность матричного метода. Разработка программы решения системы уравнений линейных алгебраических уравнений методом решения через обратную матрицу на языке программирования Delphi. Представление блок-схемы и графического интерфейса программного продукта.
курсовая работа [1,0 M], добавлен 27.09.2014