51353

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

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

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

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

Русский

2014-02-10

158 KB

7 чел.

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

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

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

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

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

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

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

Выполнил:

 студент ф-та ВМК гр. 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");

}


 

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

70879. ОБЩИЕ СВЕДЕНИЯ О ЖИДКОСТИ И ГАЗЕ. ФИЗИКО-МЕХАНИЧЕСКИЕ СВОЙСТВА И ПАРАМЕТРІ ЖИДКОСТИ И ГАЗА 1.24 MB
  В теории аэродинамики различают 3 основных принципа полета ЛА: аэростатический принцип который основывается на законе Архимеда: на тело погруженное в жидкость газ действует выталкивающая сила направленная вверх и равная весу вытесненного им объема жидкости газа рис.
70881. Регулирование профессиональной деятельности архитектора в России 39 KB
  В соответствии с Федеральным законом «Об архитектурной деятельности в Российской Федерации» под архитектурной деятельностью понимается профессиональная деятельность граждан (архитекторов), имеющая целью создание архитектурного проекта и включающая в себя...
70883. Анализ финансовой отчетности 705.5 KB
  Бухгалтерская отчетность представляет собой единую систему данных об имущественном и финансовом состоянии организации и о результатах ее хозяйственной деятельности и формируется на основе данных бухгалтерского учета по установленным формам.
70884. Психологические проблемы взаимодействия преподавателя и студента в классе; демократия и дисциплина 114.5 KB
  Студенты будут изучать то что они хотят знать и будут иметь трудности в усвоении материала который им не интересен. Студенты учатся все время то они изучает шаг степа в новом танце то иерархию в вузе то стратегию футбола и другие более или менее сложные вещи.
70885. Нетрадиционные методы преподавания общественных дисциплин 105.5 KB
  Нетрадиционные методы преподавания общественных дисциплин Использование опросов общественного мнения для повышения интереса студентов к обучению Приглашение общественно-политических деятелей на занятия. Это предполагает элементарную подготовленность студентов в вопросах методики социологических опросов.