51353

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

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

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

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

Русский

2014-02-10

158 KB

10 чел.

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

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

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

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

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

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

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

Выполнил:

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

}


 

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

55304. Прислівник 108.5 KB
  Мета: узагальнити й систематизувати відомості про прислівник; активізувати розумову діяльність учнів, спрямовану на узагальнення знань, навичок; удосконалити орфографічні та пунктуаційні навички...
55305. Призма. Розв’язування задач 958 KB
  Розвивати вміння застосовувати властивості планіметричних фігур для розвязування стереометричних задач на прикладі теми Призма. Сприяти творчості учнів та вмінню обґрунтовувати кроки в процесі розвязування задач.
55307. Сучасний стан розвитку сільськогосподарського машинобудування. Основні центри. Проблеми і перспективи розвитку галузі 23.86 KB
  У розвитку цієї важливої для України галузі склалася складна ситуація, зумовлена насамперед руйнуванням колишніх економічних звязків. У минулому потреби в комплектуючих на 70% задовольнялися за рахунок імпорту з Росії.
55308. Важке машинобудування, його роль у розвитку промисловості та економіки України. Структура галузі. Особливості сучасного розміщення виробництва 25.47 KB
  Важке машинобудування – це виробництво гірничо-шахтного, підйомно-транспортного, металургійного та енергетичного устаткування. Його характеризує низька трудомісткість і транспортабельність продукції, висока металомісткість
55309. Основні форми і особливості розвитку зовнішньоекономічних зв`язків України в сучасних умовах 25.7 KB
  Основні показники зовнішньої торгівлі: обсяг товарообігу, структура експорту та імпорту, сальдо зовнішньоторговельного балансу, географія торгівлі. Структура товарообігу обумовлена загальним економічним потенціалом країни; галузевою структурою економіки
55310. ОТ ПРОБЛЕМЫ В ОБУЧЕИИ К ПРОБЛЕМНОМУ ОБУЧЕНИЮ 81 KB
  Проблемное обучение предполагает творческое участие обучаемых в процессе освоения новых знаний формирование познавательных интересов и творческого мышления высокую степень органичного усвоения знаний и мотивации учеников. Содержание дидактической структуры урока...
55311. Проблемные ситуации на уроках математики 27 KB
  Сколько стоит покупка задачи с недостающими данными; В задачах этого типа отсутствуют некоторые данные вследствие чего дать точный ответ на вопрос задачи не представляется возможным.
55312. Диагностика познавательных процессов 118.5 KB
  Педагогическая диагностика - это подраздел педагогики изучающий принципы и методы распознавания и установления признаков характеризующих нормальный или отклоняющийся от норм ход педагогического процесса.