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

Применение языка Delphi для решения алгебраических задач. Нахождение корней линейных уравнений последовательным исключением неизвестных. Написание алгоритма для метода Гаусса. Отладка программного кода. Руководство пользователя и требования к системе.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 01.04.2016
Размер файла 624,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

27

к 3

Содержание

Введение

1. Общий раздел

1.1 Сущность метода исключения Гаусса

1.2 Примеры решения СЛАУ методом Гаусса

1.3 Характеристика выбранного языка программирования

2. Специальный раздел

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

2.2 Отладка программы

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

2.4 Минимальные системные требования к конфигурации компьютера

Заключение

Список использованных источников

Приложение А (обязательное). Схема алгоритма

Приложение Б (обязательное). Листинг программы

Введение

Данный курсовой проект был разработан в среде Delphi. Среди множества языков, является наиболее универсальным и легко изучаемым языком. При этом его удобно использовать для создания сложных приложений, базами данных, приложения масштаба предприятия. Delphi позволяет использовать все современные возможности объектно-ориентированного программирования.

Delphi Ї это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi Ї строго типизированный объектно-ориентированный язык.

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

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

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

1. Общий раздел

1.1 Сущность метода исключения Гаусса

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

Процесс решения по методу Гаусса состоит из двух этапов: прямой и обратный ходы.

Прямой ход.

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

После того, как указанные преобразования были совершены, первую строку и первый столбец мысленно вычёркивают и продолжают пока не останется матрица нулевого размера. Если на какой-то из итераций среди элементов первого столбца не нашёлся ненулевой, то переходят к следующему столбцу и проделывают аналогичную операцию.

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

Приведенная ниже система имеет ступенчатый вид:

,

где

Коэффициенты aii называются главными (ведущими) элементами системы.

1-й шаг.

Будем считать, что элемент (если a11=0, переставим строки матрицы так, чтобы a11 не был равен 0. Это всегда возможно, т. к. в противном случае матрица содержит нулевой столбец, ее определитель равен нулю и система несовместна).

Преобразуем систему, исключив неизвестное х1 во всех уравнениях, кроме первого (используя элементарные преобразования системы). Для этого умножим обе части первого уравнения на и сложим почленно со вторым уравнением системы (или из второго уравнения почленно вычтем первое, умноженное на ). Затем умножим обе части первого уравнения на и сложим с третьим уравнением системы (или из третьего почленно вычтем первое, помноженное на ). Таким образом, последовательно умножаем первую строку на число и прибавляем к i-й строке, для i=2, 3, …, n.

Продолжая этот процесс, получим эквивалентную систему:

Здесь - новые значения коэффициентов при неизвестных и свободные члены в последних m-1 уравнениях системы, которые определяются формулами:

Таким образом, на первом шаге уничтожаются все коэффициенты, лежащие под первым ведущим элементом a110, на втором шаге уничтожаются элементы, лежащие под вторым ведущим элементом а22(1) (если a22(1)0) и т.д. Продолжая этот процесс и дальше, мы, наконец, на (m-1) шаге приведем исходную систему к треугольной системе.

Если в процессе приведения системы к ступенчатому виду появятся нулевые уравнения, т.е. равенства вида 0=0, их отбрасывают. Если же появится уравнение вида то это свидетельствует о несовместности системы.

На этом прямой ход метода Гаусса заканчивается.

Обратный ход.

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

Эта процедура начинается с последнего уравнения, из которого выражают соответствующую базисную переменную (она в нем всего одна) и подставляют в предыдущие уравнения, и так далее, поднимаясь по «ступенькам» наверх.

Каждой строчке соответствует ровно одна базисная переменная, поэтому на каждом шаге, кроме последнего (самого верхнего), ситуация в точности повторяет случай последней строки.

Примечание: на практике удобнее работать не с системой, а с расширенной ее матрицей, выполняя все элементарные преобразования над ее строками. Удобно, чтобы коэффициент a11 был равен 1 (уравнения переставить местами, либо разделить обе части уравнения на a11).

2.2 Примеры решения СЛАУ методом Гаусса

В данном разделе покажем, как методом Гаусса можно решить СЛАУ.

Решить методом Гаусса систему уравнений:

Запишем расширенную матрицу системы:

Сейчас воспроизведем результат, к которому мы придём в ходе решения:

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

Сначала смотрим на левое верхнее число:

Почти всегда здесь должна находиться единица. Вообще говоря, устроит и -1 (а иногда и другие числа), но как-то так традиционно сложилось, что туда обычно помещают единицу. Как организовать единицу? Смотрим на первый столбец - готовая единица у нас есть! Преобразование первое: меняем местами первую и третью строки:

Теперь первая строка у нас останется неизменной до конца решения. Уже легче.

Единица в левом верхнем углу организована. Теперь нужно получить нули вот на этих местах:

Нули получаем как раз с помощью «трудного» преобразования. Сначала разбираемся со второй строкой (2, -1, 3, 13). Что нужно сделать, чтобы на первой позиции получить ноль? Нужно ко второй строке прибавить первую строку, умноженную на -2. Мысленно или на черновике умножаем первую строку на -2: (-2, -4, 2, -18). И последовательно проводим (опять же мысленно или на черновике) сложение, ко второй строке прибавляем первую строку, уже умноженную

Результат записываем во вторую строку:

Аналогично разбираемся с третьей строкой (3, 2, -5, -1). Чтобы получить на первой позиции ноль, нужно к третьей строке прибавить первую строку, умноженную на -3. Мысленно или на черновике умножаем первую строку на -3: (-3, -6, 3, -27). И к третьей строке прибавляем первую строку, умноженную на -3:

Результат записываем в третью строку:

На практике эти действия обычно выполняются устно и записываются в один шаг:

Не нужно считать всё сразу и одновременно. Порядок вычислений и «вписывания» результатов последователен и обычно такой: сначала переписываем первую строку, и пыхтим себе потихонечку Їпоследовательно и внимательно:

А мысленный ход самих расчётов я уже рассмотрел выше.

Далее нужно получить единицу на следующей «ступеньке»:

В данном примере это сделать легко, вторую строку делим на -5 (поскольку там все числа делятся на 5 без остатка). Заодно делим третью строку на -2, ведь чем меньше числа, тем проще решение:

На заключительном этапе элементарных преобразований нужно получить еще один ноль здесь:

Для этого к третьей строке прибавляем вторую строку, умноженную на -2:

Попробуйте разобрать это действие самостоятельно - мысленно умножьте вторую строку на -2 и проведите сложение.

Последнее выполненное действие - причёска результата, делим третью строку на 3.

В результате элементарных преобразований получена эквивалентная исходной система линейных уравнений:

Круто.

Теперь в действие вступает обратный ход метода Гаусса. Уравнения «раскручиваются» снизу вверх.

В третьем уравнении у нас уже готовый результат:

Смотрим на второе уравнение: . Значение «зет» уже известно, таким образом:

И, наконец, первое уравнение: . «Игрек» и «зет» известны, дело за малым: линейный уравнение гаусс delphi

Ответ:

1.3 Характеристика выбранного языка программирования

Среда Delphi Ї это сложный механизм, обеспечивающий высокоэффективную работу программиста. Визуально она реализуется несколькими одновременно раскрытыми на экране окнами. Окна могут перемещаться по экрану, частично или полностью перекрывая друг друга, что обычно вызывает у пользователя, привыкшего к относительной “строгости” среды текстового процессора Word или табличного процессора Excel, ощущение некоторого дискомфорта. После приобретения опыта работы с Delphi это ощущение пройдет, и вы научитесь быстро отыскивать нужное окно, чтобы изменить те или иные функциональные свойства создаваемой вами программы, ибо каждое окно несет в себе некоторую функциональность, т. е. предназначено для решения определенных задач.

Запустите Delphi Ї откроется главное окно приложения (рисунок 1)

Размещено на http://www.allbest.ru/

27

к 3

Рисунок 1 Ї Внешний вид Delphi

На рисунке изображены шесть наиболее важных окон Delphi: главное окно, окно Дерева объектов (Object Tree View), окно Инспектора объектов, окно браузера, окно формы и окно кода программы.

Чтобы упорядочить окна так, как они показаны на рисунке, вам придется вручную изменять их положение и размеры, т. к. обычно окно кода программы почти полностью перекрыто окном формы. Впрочем, добиваться максимального сходства того, что вы видите на экране вашего ПК, с изображением, показанным на рисунке, вовсе не обязательно: расположение и размеры окон никак не влияют на их функциональностью.

Замечу, что при первом запуске Delphi поверх всех окон появится окно изображенное на (рисунке 2).

Рисунок 2Ї Web-страницы

С помощью этого окна вы сможете получить доступ к Web-страницам корпорации Inprise для просмотра самой свежей информации о корпорации и ее программных продуктах, копирования дополни тельных файлов, чтения ответов на наиболее часто задаваемые вопросы и т. д. При повторных запусках Delphi это окно появляется автоматически с некоторой периодичностью, определяемой настройками на странице окна Tolls | Environment Options, связанной с закладкой Delphi Direct. Вы также сможете его вызвать в любой момент с помощью опции Help | Delphi Direct главного меню.

Три основные части разработки интерфейса следующие: проектирование панели, проектирование диалога и представление окон. Для общего пользовательского доступа также должны учитываться условия применения архитектуры прикладных систем.

Сегодня появилась реальная возможность с помощью моделирования на современных многофункциональных средствах обработки и отображения информации, таких как Delphi конкретизировать тип и характеристики используемых информационных моделей, выявить основные особенности будущей деятельности операторов, сформулировать требования к параметрам аппаратноЇпрограммных средств интерфейса взаимодействия и т.д.

2. Специальный раздел

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

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

Поскольку данная программа является приложением Windows, то для ее реализации будем использовать стандартный подход при написании программ под Windows с использованием графического интерфейса. Так отдельно создадим форму с визуальными компонентами, для различных визуальных компонент сопоставляем процедуры Ї обработчики. Далее, как только происходит событие на каком-то из визуальных компонент, (щелчок мыши, нажатие на кнопку или пункт меню), операционная система посылает приложению соответствующее сообщение, и запускается соответствующий обработчик именно для этого события. Тогда решение задачи можно разбить на 3 этапа:

1) разработка визуального интерфейса пользователя, на основе экранных форм среды Delphi и визуальных компонент, предназначенных для ввода исходных данных, запуска действий по обработке исходных данных, вывода результата обработки, вывода результатов на экранную форму. Еще можно предусмотреть вывод информации разработчике и задании курсового проекта;

2) разработка обработчиков событий от элементов экранных форм, разработка алгоритмов и программных кодов действий обработки текстового файла согласно заданию;

3) подготовка тестовых исходных данных и отладка программы.

На первом этапе целесообразно выполнить разработку интерфейса таким образом, чтобы в начале тестирования учащийся вводил своё имя и фамилию, а также задавал шифр группы. Затем учащийся приступает к тестированию. По окончании решения уравнения выводится ответ уравнения. Также решение всего уравнения поэтапно записываются на документ Microsoft Word.При выполнении второго этапа следует использовать модульный принцип построения программы, то есть разбить программу на отдельные части, каждая из которых выполняет какую-то законченную задачу, либо ее малую часть. Роль таких частей будут выполнять процедуры и функции. Программы, состоящие из процедур и функций, называются модульными.

Процедуры и функции в свою очередь могут вызывать процедуры и функции более низкого уровня и так далее. Таким образом, каждая модульная программа имеет иерархическую структуру. Следует заметить, что обработчики событий от объектов экранных форм тоже реализуются как процедуры.

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

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

2.2 Отладка программы

Отладку программы начинают с составления плана тестирования. Такой план должен представлять себе любой программист. Составление плана опирается на понятие об источниках и характере ошибок. Основными источниками ошибок являются недостаточно глубокая проработка математической модели или алгоритма решения задачи; нарушение соответствия между схемой алгоритма или записью его на алгоритмическом языке и программой, записанной на языке программирования; неверное представление исходных данных на программном бланке; невнимательность при наборе программы и исходных данных на клавиатуре устройства ввода.

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

Учитывая разнообразие источников ошибок, при составлении плана тестирования классифицируют ошибки на два типа: 1 Ї синтаксические; 2 Ї семантические (смысловые).

Синтаксические ошибки - это ошибки в записи конструкций языка программирования (чисел, переменных, функций, выражений, операторов, меток, подпрограмм).

Семантические ошибки Ї это ошибки, связанные с неправильным содержанием действий и использованием недопустимых значений величин.

В ходе тестирования были проверены требования к программному продукту.

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

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

Разработанная программа представляет собой исполняемый файл. В программе выполняется тестирование пользователя основам языка Pascal.

После запуска программы появляется окно, изображенное на рисунке 3.

Рисунок 3 Ї Окно ввода колличества уравнений

После того как колличество уравнений было введено ,всплывает строка введите коэффициэнт уравненений.После ввода коэффициэнта программа расчитывает линейное уравнение и выдает резулитат , изображенный на рисунке 4.

Рисунок 4 Ї Вывод корней уравнения

После решения уравнения данные сохраняются в фай Microsoft Word под названием gaus , изображенный на рисунке 5.

Рисунок 5 Ї Сохранение данных.

2.4 Минимальные системные требования к конфигурации компьютера

Для функционирования программы необходимо:

Операционная система: Microsoft Windows 7/8/10.

- процессор, с тактовой частотой не менее 400 MHz;

- 256 Mb оперативной памяти;

- монитор Ї SVGA;

- клавиатура - 101/102 клавиши;

- манипулятор типа «мышь».

Заключение

Данный курсовой проект был выполнен в полном соответствии поставленному заданию и отлажен в среде DELPHI 7.0. В ходе выполнения курсовой работы была разработана программа для решения линейных уравнений методом Гаусса . Программа может бать использована в образовательных целях.

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

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

Список использованных источников

1 Фаронов В. В. Turbo Pascal 7.0. Начальный курс / В. В. Фаронов. Ї М. : Нолидж, 2009. Ї 354 с.

2 Бобровский С. И. Delphi 7 / С. И. Бобровский. Ї М. : Питер, 2011. Ї 432 c.

3 Гаевский A. П. Разработка программных приложений на Delphi 7/ A. П. Гаевский. ЇМ. : Киев, 2010. Ї 321 с.

4 Леонтьев В. И. Delphi / В. И. Леонтьев. Ї М. : Москва, 2011. Ї 229 с.

5 Вальвачев А.Н., Сурков К.А., Сурков Д.А., Четырько Ю.М. Программирование на языке Delphi. Глава 7. Проект приложения. Ї [Электронный ресурс] Ї Режим доступа: http://www.interface.ru/home.asp?artId=6678

Приложение A (обязательное). Алгоритм программы

Рисунок А1 Ї Алгоритм программы

Приложение Б (обязательное). Листинг программы

program Method_Gaussa;

{$APPTYPE CONSOLE}

uses

SysUtils;

var mat: array of array of real;

x,buf: array of real;

i,j,u_count,i2,j2,g,step: integer; k: real; st: integer; p: real; f1: text;

begin

step:=1;

writeln('Created by Timoshenko');

repeat

writeln('vvedite kollichestvo uravneniy');

readln(u_count);

until (u_count>1) and (u_count<7);

setlength(mat,u_count,u_count+1);

setlength(buf,u_count+1);

setlength(x,u_count+1);

writeln('vvedite koefficienty uravneniy');

for i:=0 to u_count-1 do

begin

for j:=0 to u_count do

readln(mat[i,j]);

end;

assign(f1,'gaus.txt');

append(f1);

for i:=0 to u_count-1 do

begin

for j:=0 to u_count do

begin

write(mat[i,j]:2:2,' ');

write(f1,mat[i,j]:2:2,' ');

end;

writeln;

writeln(f1);

end;

for i:=0 to u_count-1 do

begin

if mat[i,0]=1 then

begin

for j:=0 to u_count do

buf[j]:=mat[i,j];

for j:=0 to u_count do

mat[i,j]:=mat[0,j];

for j:=0 to u_count do

mat[0,j]:=buf[j];

end;

end;

g:=0;

for i2:=0 to u_count-2 do

begin

if g<u_count-1 then

inc(g);

for j2:=g to u_count-1 do

begin

k:=(0-mat[j2,i2])/mat[i2,i2];

for i:=0 to u_count do

mat[j2,i]:=mat[i2,i]*k+ mat[j2,i];

writeln;

writeln('-------------------------------');

writeln(f1,'-------------------------------');

writeln('Step=',step);

writeln(f1,'Step=',step);

for i:=0 to u_count-1 do

begin

for j:=0 to u_count do

begin

write(mat[i,j]:2:2,' ');

write(f1,mat[i,j]:2:2,' ');

end;

writeln;

writeln(f1);

end;

inc(step);

end;

end;

for i:=0 to length(x) do

x[i]:=0;

st:=1;

for i:=u_count-1 downto 0 do

begin

p:=0;

for j:=0 to u_count-1 do

begin

p:=p+mat[i,j]*x[j];

end;

if mat[i,u_count-st]<>0 then

x[i]:=(mat[i,u_count]-p)/mat[i,i];

if st<u_count-1 then

inc(st);

end;

writeln('korni aravneniya');

writeln(f1,'korni aravneniya');

writeln;

for i:=0 to u_count-1 do

begin

writeln('x',i+1,'=',x[i]:2:2);

writeln(f1,'x',i+1,'=',x[i]:2:2);

end;

writeln(f1,'***************************************');

close(f1);

//readln;

readln

end.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.