51353

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

Лабораторная работа

Информатика, кибернетика и программирование

Руководство программиста Описание структуры программы Функции PHod осуществляет прямой ход; OHod осуществляет обратный ход; Описание структур данных Описание глобальных переменных использующихся в программе: int n – размер матрицы; flot rr – массив в котором хрантся элементы матрицы; flot ms – копия масива rr; flot x – массив решений системы уравнений; FILE file – файл из которого берется матрица; FILE file2 – файл в который записываются результаты; Описание алгоритмов Метод Гаусса для решения системы линейных...

Русский

2014-02-10

158 KB

6 чел.

Федеральное агентство по образованию Российской Федерации

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

высшего профессионального образования

Нижегородский государственный университет им. Н.И. Лобачевского

Факультет вычислительной математики и кибернетики

Отчёт по лабораторной работе

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

Выполнил:

 студент ф-та ВМК гр. 81-05

Ляшук Д.А.

Проверил:

 ассистент каф. МО ЭВМ, ВМК

Кукаева С.А.

Нижний Новгород

2013 г.


Содержание

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

[2] Введение

[3] Постановка задачи

[4] Руководство пользователя

[5]
Руководство программиста

[5.1] Описание структур данных

[5.2] Описание алгоритмов

[6]
Заключение

[7] Приложения

[7.1] Приложение 1


Введение

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

Пусть исходная система выглядит следующим образом

Матрица  называется основной матрицей системы,  — столбцом свободных членов.

Тогда согласно свойству элементарных преобразований над строками основную матрицу этой системы можно привести к ступенчатому виду (эти же преобразования нужно применять к столбцу свободных членов):


Постановка задачи

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

A*x = b,                                   

где А - числовая не особая (т.е. имеющая не равный нулю детерминант) квадратная матрица размером N на N, b - числовой вектор-столбец размером N, а x - искомый вектор-столбец размером N. Программный комплекс должен обеспечивать:

задание пользователем исходной системы уравнений  в текстовом файле;

решение полученной системы уравнений методом Гаусса;

экранное отображение формирующейся системы уравнений, результата, а так же запись результатов в текстовый файл.

 


Руководство пользователя

Для работы с программой пользователю необходимо ввести значения элементов матрицы в файл inp.txt. Причем матрица в файле должна быть записана следующим образом – первое число должно означать размер матрицы, а далее со следующей строки записана сама матрица, элементы которой разделены пробелом. Затем запустить программу.

Файл inp.txt.

Работа программы.

Результаты вычислений записываются в файл out.txt.


Руководство программиста

Описание структуры программы

Функции

PHod – осуществляет прямой ход;

OHod – осуществляет обратный ход;

Описание структур данных

Описание глобальных переменных, использующихся в программе:

     int n – размер матрицы;

 float** arr – массив, в котором хрантся элементы матрицы;

 float** mas – копия масива arr;

 float* x – массив решений системы уравнений;

FILE* file – файл, из которого берется матрица;

FILE* file2 – файл в который записываются результаты;

Описание алгоритмов

Метод Гаусса для решения системы линейных уравнений состоит в приведении матрицы А посредством эквивалентных преобразований (не меняющих решение системы [12]) к треугольному виду и последующему поиску решений для вновь полученной матрицы. Краткая схема первой части метода Гаусса - прямого хода - состоит в следующем.

Алгоритм прямого хода.

  1.  Движение по главной диагонали матрицы  А.
    В цикле по переменной  
    I  от  1 до N выполняются  Шаг 2 Шаг 6.

Выбор главного элемента. Полагается R:=A[I, I]. Если R=0, то реализуется поиск главного элемента.

Преобразование текущей строки матрицы путем деления всех значений ее элементов на главный элемент. В цикле по переменной  J  от  I до N+1 выполняются вычисления
A[IJ]:= A[IJ] / R.

Вычитание текущей строки из всех ниже расположенных строк с занулением I - ого элемента в каждой из них. В цикле по K от I + 1 до N выполняются Шаг 5 Шаг 6.

Полагается m:= A[KI].

Вычитание из очередной строки текущей строки. В  цикле по J  от  I  до  N+1  делаем A[KJ]:= A[KJ] - A[IJ]* m.

Конец алгоритма.

Алгоритм обратного хода.

  1.  Поиск, начиная с последнего, всех неизвестных системы - элементов вектора x. В цикле по переменной I от N до 0 выполняются Шаг 2 Шаг 3.

Задается начальное значение элемента x[I].
x[I]:=A[I,N] .

Корректируется искомое значение x[I]. В цикле по J от N-1 до I+1 (в случае, когда I=N, этот шаг не выполняется) производятся вычисления x[I]:=  x[I] - x[J]* A[IJ].

Конец алгоритма. 

Поиск главного элемента

  1.  Если главный элемент R=A[II] равен нулю, то в остальных элементах этого столбца ищется первый ненулевой элемент. Если такой найден и его номер равен K, то меняются местами I -ая и K -ая строки матрицы А.


Заключение

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


Приложения

Приложение 1

Исходный код программы

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<Windows.h>

void phod(float**,int);

void ohod(float**, float*, int);

int main()

{

 int n,i,j;

 float** arr;

 float** mas;

 float* x;

FILE* file;

FILE* file2;

 

{

 file=fopen("inp.txt","r+");

 fscanf(file,"%d\n",&n);

}

   x=(float*)malloc(n*sizeof(float));

arr=(float**)malloc(n*sizeof(float*));

 for(i=0; i<n; ++i)

{

 arr[i]=(float*)malloc(n*sizeof(float));

}

mas=(float**)malloc(n*sizeof(float*));

 for(i=0; i<n; ++i)

{

 mas[i]=(float*)malloc(n*sizeof(float));

}

 for(i=0; i<n; ++i)

{

 for(j=0; j<n+1; ++j)

 {

  fscanf(file,"%f ",&arr[i][j]);

  mas[i][j]=arr[i][j];

 }

}

 //вывод массива  

 for(i=0; i<n; ++i)

{

 for(j=0; j<n+1; ++j)

 {

  printf("%.3f ", arr[i][j]);

 }

 printf("\n");

}

printf("\n");

//прямой ход  

 phod(arr,n);

 //зануляем массив x

  for(i=0; i<n+1; ++i)

  {

   x[i]=0;

  }   

//обратный ход

ohod(arr,x,n);

 

 for(i=0; i<n; ++i)

  {

   printf("\n x%d=%.4f ",i+1,x[i]);

  }

//запись результатов в файл

 

 file2=fopen("out.txt","w");

 

 for(i=0; i<n; ++i)

 {

  fprintf(file2,"x%d=%.4f  ",i+1,x[i]);

 }

 fprintf(file2,"\n\n");

 fclose(file2);

 

{

 return 0;

}

 

}

 //прямой ход

void phod(float** arr,int n)

{

 int i,j,k,l;

 float r,m;

 float h;

 

 

  for(i=0; i<n; ++i)

  {

   if (arr[i][i]==0)

   {

    for(l=i+1; l<n; ++l)

    {

     if (arr[l][i]!=0)

     {

      for(j=0; j<n+1; ++j)

      {

      h=arr[l][j];

      arr[l][j]=arr[i][j];

      arr[i][j]=h;

      }

     }

   }

   }

   r=(arr[i][i]);

   for(j=0; j<n+1; ++j)

   {

  (arr[i][j])= (arr[i][j])/r;

   }

  

   for(k=i+1; k<n; ++k)

  {

   m=arr[k][i];

   for(j=i; j<n+1; ++j)

   {

    arr[k][j]= arr[k][j]- arr[i][j]*m;

   }

     }

    }

// вывод прямого хода

 for(i=0; i<n; ++i)

{

 for(j=0; j<n+1; ++j)

 {

  printf("%.3f ", arr[i][j]);

   

 }

printf("\n");

}

}

//обратный ход

void ohod(float** arr, float* x, int n)

{

 int i,j;

 float c;

  for(i=n-1; i>=0; --i)

  {

   c=arr[i][n];

   x[i]=c;

   for(j=n-1; j>i; j--)

   {

    x[i]=x[i]-x[j]*arr[i][j];

   }

  }

  system("pause");

}


 

А также другие работы, которые могут Вас заинтересовать

76898. Спинальные нервы 181.13 KB
  Спинномозговой нерв смешанный по составу волокон образуется: передним корешком двигательным из длинных отростков нейронов расположенных в ядрах передних рогов спинного мозга; отростки нейронов в составе нервов достигают органов где образуют нервные окончания исполнительного типа эффекторы; задним корешком и спинальным узлом дендриты псевдоуниполярных клеток которого составляют задний корешок и достигают задних рогов спинного мозга а длинные отростки этих клеток входят в состав спинальных нервов и их производных образуя в...
76899. Шейное сплетение 179.82 KB
  Ветви и области иннервации. Ветви подразделяются на кожные мышечные и смешанные короткие и длинные. В каждом сплетении правом и левом имеются следующие ветви.
76900. Плечевое сплетение. Ветви надключичной части плечевого сплетения, области иннервации 179.65 KB
  Источниками образования плечевого сплетения являются передние ветви четырех нижних шейных и 12го грудных спинномозговых нервов. Дорсальный нерв лопатки начинается из передней ветви V шейного спинального нерва. Подключичный нерв из пятой передней ветви проходит кпереди от подключичной артерии и заканчивается в одноименной мышце.
76901. Подключичная часть плечевого сплетения 183.27 KB
  Она имеет короткие нервы: дорсальный лопаточный длинный грудной подключичный над и подлопаточные грудоспинной которые иннервируют кожу мышцы шеи груди и надплечья. Нервные стволы сплетения вступившие в подмышечную яму обозначаются как подключичная часть которая окружает подмышечную артерию с трех сторон подковообразно и делится на медиальный латеральный и задний пучки дающие начало длинным и коротким нервам руки. Из латерального пучка C V – C VIII начинаются латеральный грудной мышечнокожный нервы и латеральный корешок...
76902. Межреберные нервы, их ветви и области иннервации 180.98 KB
  Передние ветви грудных спинномозговых нервов образуют 11 пар межреберных нервов и 12ю пару подреберные нервы. Нервы в межреберном промежутке располагаются вместе с задними межреберными сосудами. Межреберные нервы ярко выражают метамерное расположение и сегментарную иннервацию кожи и мышц груди и живота реберной плевры и париетальной брюшины.
76903. Поясничное сплетение - строение, топография, нервы и области иннервации 180.18 KB
  Длинные нервы подвздошноподчревный подвздошнопаховый бедреннополовой запирательный бедренный латеральный кожный нерв бедра участвуют в иннервации кожи и мышц живота таза промежности и бедра. Его латеральная кожная ветвь иннервирует кожу ягодицы и бедра в верхнелатеральных отделах. Кроме того он снабжает кожу мошонки больших половых губ передней и медиальной поверхности бедра. Запирательный нерв для мышц таза и бедра.
76904. Крестцовое сплетение, его нервы и области иннервации 181.06 KB
  Источниками сплетения являются передние ветви IVVго частично поясничных и верхних четырех крестцовых спинномозговых нервов. При объединении с копчиковым сплетением в источники входят передние ветви пятого крестцового и копчикового спинальных нервов. Поясничнокрестцовый ствол возникает из части передней ветви IV поясничного и всей передней ветви V поясничного нервов.
76905. Седалищный нерв, его ветви. Иннервация кожи нижней конечности 182.03 KB
  Иннервация кожи нижней конечности. Седалищный нерв самый крупный и длинный в человеческом теле является смешанным нервом содержащим чувствительные двигательные и вегетативные волокна. Они происходят из передних ветвей IV V поясничных и первых трех крестцовых спинномозговых нервов.
76906. Черепные нервы. I, II пары черепных нервов. Проводящий путь зрительного анализатора 181.6 KB
  Они составляют проводниковую часть обонятельного и зрительного анализаторов. Оба имеют общее происхождение, т.к. развиваются как производные переднего мозгового пузыря, его нижней стенки. Оба несут восходящие (чувствительные) нервные волокна, соединяющие рецепторные поля анализаторов с подкорковыми центрами обоняния и зрения и, таким образом, входят в сенсорную систему.