Разработка программы- "Решение СЛАУ методом Гаусса"

Автор работы: Пользователь скрыл имя, 13 Сентября 2011 в 12:12, курсовая работа

Описание

Разработать программу для решения системы линейных уравнений порядка N методом Гаусса с выбором главного элемента по столбцу и по строке. Исходные данные: порядок системы линейных уравнений N, матрица коэффициентов, вектор правых частей. Разработать тестовый пример для N=10 и определить погрешность расчета.

Содержание

1. АНАЛИЗ И ПОСТАНОВКА ЗАДАЧИ 4
1.1 Постановка задачи 4
1.2 Анализ задания 4
1.3. Техническое задание 5
1.3.1. Спецификация данных 5
1.3.2. Функциональные спецификации 5
1.3.3. Спецификация оборудования 6
2. ПРОЕКТИРОВАНИЕ 7
2.1. Модель использования 7
2.2. Структурная модель 8
2.3. Алгоритмы программы 9
3. РАБОЧИЙ ПРОЕКТ. 15
3.1. Описание исходного кода программы. 15
3.2. Описание интерфейса программы 15
4. ТЕСТИРОВАНИЕ 18
ЗАКЛЮЧЕНИЕ 23
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 24
ПРИЛОЖЕНИЕ А 25
ПРИЛОЖЕНИЕ Б 38

Работа состоит из  1 файл

Пояснительная записка.doc

— 776.00 Кб (Скачать документ)

Содержание 
 
 
 
 
 
 
 
 
 
 

1. АНАЛИЗ И ПОСТАНОВКА ЗАДАЧИ

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

Разработать программу для решения системы  линейных уравнений порядка N методом Гаусса с выбором главного элемента по столбцу и по строке. Исходные данные: порядок системы линейных уравнений N, матрица коэффициентов, вектор правых частей. Разработать тестовый пример для N=10 и определить погрешность расчета. 

1.2 Анализ задания

Запишем систему, в развернутом виде

     (1) 

Метод Гаусса состоит в последовательном исключении неизвестных из этой системы. Сначала мы выбираем главный элемент i-того столбца, это будет элемент с наибольшим коэффициентом. Предположим, это ai1. Переставляем i-тое уравнение на первое место. Последовательно умножаем все уравнения на множитель t1 = и складываем с первым уравнение. Таким образом мы исключаем одну переменную из всех уравнений кроме первого. Получим систему

     (2)

где 

Аналогичным образом, исключая все неизвестные, получим систему треугольного вида

  (3)

Описанная процедура называется прямым ходом  метода Гаусса. Заметим, что ее выполнение было возможно при условии, что все  , не равны нулю.

Выполняя  последовательные подстановки в  последней системе, (начиная с последнего уравнения) можно получить все значения неизвестных.

    .     (4)

Эта процедура  получила название обратный ход метода Гаусса.

1.3. Техническое задание

1.3.1. Спецификация данных

Входные данные:

Порядок системы линейных уравнений;

 Матрица коэффициентов;

Вектор  правых частей.

Промежуточные данные:

Главный элемент столбца;

Матрица коэффициентов полученная в результате исключения переменной;

Выходные  данные:

Значения  всех переменных;

1.3.2.  Функциональные спецификации

Мне требуется создать программу, выполняющую  следующие функции:

Ввод  размерности системы;

Ввод  коэффициентов уравнения;

Выбор главного элемента столбца;

Последовательное  умножение всех уравнений на множитель t1;

Последовательное сложение всех уравнений с первым;

Ввод  в память полученной матрицы коэффициентов  и вектора правых частей в память;

Повторение  пунктов 4 – 6 до тех пор пока не будет  получена матрица треугольного вида (3);

Выполнение  последовательных подстановок в  полученной системе по формуле (4) (начиная с последнего уравнения);

Получение всех значений неизвестных;

 Вывод  результатов пользователю.

1.3.3. Спецификация оборудования

Программные требования: обязательным является наличие  операционной системы Microsoft Windows XP

Аппаратные  требования:

- Рекомендуется  компьютер оснащенный процессором  Intel Pentium/Celeron, AMD Athlon/Duron/Semprion или совместимый с частотой 1ГГц и более;

- Рекомендуется  256 Мб ОЗУ или более. Минимально  допустимый объем 64 Мб;

- Монитор  и видеоадаптер VGA;

- Клавиатура  и мышь или совместимое указывающее  устройство. 
 
 
 
 
 

2. ПРОЕКТИРОВАНИЕ

            2.1. Модель использования 

      Для построения концептуальной модели проектируемой мною программы, я выбрал объектно-ориентированное проектирование. Это следует из того, что разрабатываемая мною программа будет написана на объектно-ориентированном языке программирования C++.

   Любая система взаимодействует с  внешними сущностями – актерами. Диаграмма прецедентов как раз отображает эту связь (рис. 1). 

 

Рисунок 1- Диаграмма прецедентов

Основной поток  событий для прецедента «Ввод  размерности и коэффициентов  уравнения системы»:

Действия  актера Отклик системы
1. Прецедент  начинается с того, что пользователь  на кнопку «Открыть». 2. Система открывает диалоговое окно.
3. Пользователь  выбирает нужный ему файл. 4. Система считывает  исходные данные из выбранного файла.
  5. Прецедент  окончен.
 

Альтернативный  поток событий

   Пользователь  может в любой момент времени  изменить исходные данные.

Основной поток событий для прецедента «Решить СЛАУ методом Гаусса»:

Действия  актера Отклик системы
1. Прецедент  начинается, когда пользователь  нажимает на кнопку «Решить» 2. include (Происходит прямой ход метода Гаусса).
  4. include (Происходит обратный ход метода Гаусса)
  5. Прецедент окончен.
 

Альтернативный  поток событий

     Пользователь  может в любой момент покинуть программу.

Основной поток  событий для прецедента «Выход»:

Действия  актера Отклик системы
1. Прецедент  начинается, когда пользователь  нажимает на кнопку «Выход»  
  2. Система завершает работу
  3. Прецедент  окончен.
 

Альтернативный  поток событий

     Пользователь  может отменить выход из системы. 

2.2. Структурная модель

      Программа состоит из нескольких классов: CAboutDlg, CfilereadApp, CfilereadDlg. Рассмотрим методы, используемые в данных классах:

      Методы  класса CfilereadDlg:

      Метод ReadFile() – сохраняет путь к файлу с исходной матрицей. Метод для прецедента “ Ввод размерности и коэффициентов уравнения системы”.

      Метод OnBnClickedOk() - обрабатывает нажатие кнопки «Открыть». Метод для прецедента “ Ввод размерности и коэффициентов уравнения системы”.

      Метод OnBnClickedButton1() – открывает диалоговое окно со справкой о программе.

      Метод OnBnClickedButton2() – считывает данные из файла, производит необходимые вычисления и выводит результат решения.

      Метод OnExit() – закрывает приложение. Метод для прецедента “Выход”.

      На  рисунке 2 изображена диаграмма классов, которая помогает понять  взаимосвязи между классами программы. В изображенных классах указываются их методы и аргументы.

      

      Рисунок 2 – Диаграмма классов программы " Решение СЛАУ методом Гаусса". 

     2.3. Алгоритмы программы

          Рассмотрим алгоритмы методов классов и представим их в двух формах: описании на псевдокоде и в виде блок-схем.

      Метод OnBnClickedButton2() – считывает данные из файла, производит необходимые вычисления и выводит результат решения. Описание на псевдокоде метода OnBnClickedButton2() выглядит следующим образом: 

Начало

Открыть выбранный файл

row = количество строк в файле

Выделение памяти под массивы x и farray

Занести значения коэффициентов в массив farray

Закрыть файл

k=0

m_nRows=row

m_nCols=m_nRows+1

Цикл-Пока k<row-1

      colPos=k

      rowPos=k

      max=farray[k][k]

      i=k

      Цикл-Пока i<m_nRows

            j=k+1

            Цикл-Пока j<m_nCols-1

                  Если модуль(farray[i][j])>max

                  То

                        max=farray[i][j]

                        rowPos=i

                        colPos=j

                  Все-Если

                  j++ 

            Все-Пока

            i++

      Все-Пока

      i=0

      Цикл-Пока i<m_nRows

      temp=farray[i][k]

      farray[i][k]=farray[i][colPos]

      farray[i][colPos]=temp

      i++

Все-Пока

j=0

      Цикл-Пока j<m_nCols

temp=farray[k][j]

farray[k][j]=farray[rowPos][j]

farray[rowPos][j]=temp

      j++

Все-Пока

j=m_nCols-1

Цикл-Пока j>=0

farray[k][j]/=farray[k][k]

j--

Все-Пока

i=k+1

Цикл-Пока i<m_nRows

j=m_nCols-1

Цикл-Пока j>=0

farray[i][j]-=farray[k][j]*farray[i][k]

j--

Все-Пока

      i++

Все-Пока

Вывести преобразованный массив farray

      k++

Все-Пока

s=0

    x[m_nRows-1]=farray[m_nRows-1][m_nCols-1]/farray[m_nRows-1][m_nCols-2]

i=m_nRows-2

Цикл-Пока i>=0

      s=0

      k=i+1

      Цикл-Пока k<m_nRows

            s+=farray[i][k]*x[k]

            x[i]=farray[i][m_nCols-1]-s

            k++

      Все-Пока

i--

Все-Пока

Вывести массив x

Конец 

Информация о работе Разработка программы- "Решение СЛАУ методом Гаусса"