Решение систем уравнений методами программирования

Курсовая работа: Разработка программы решения системы линейных уравнений

Дальневосточная академия государственной службы

Факультет государственного и муниципального управления

по курсу: Информатика

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

1 курса 3 годичной

заочной формы обучения

Воищев Алексей Юрьевич

г. Хабаровск 2005

1. Описание математических методов решения систем линейных уравнений

1.1 Метод Гаусса

1.2 Матричный метод

1.3 Вычисление определителей второго и третьего порядка

2. Язык программирования Паскаль

2.1 Структура программы

2.2 Описание переменных

2.3 Основные конструкции языка

2.4 Структуры данных

2.4 Процедуры и функции

3. Описание программы

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

3.2 Блок-схема программы

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

Введение

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

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

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

1 . Описание математических методов решения систем линейных уравнений

1.1 Метод Гаусса

Идея метода Гаусса состоит в последовательном исключении неизвестных. Алгоритм решения системы уравнений этим методом проследим на примере.

Пример 1.

Выбирается ведущее уравнение с коэффициентом при х1 , равным 1. В нашем примере ведущим уравнением будет второе. Систему лучше переписать, поставив это уравнение на первое место:

Умножаем первое уравнение на 6 и вычитаем из полученного второе, чтобы исключить из второго неизвестное х1 . Первое уравнение записываем, а на место второго — результат вычитания.

Затем первое уравнение умножим на 3 и складываем с третьим уравнением. Тогда получаем систему

Или

первое уравнение переписываем без изменения, а второе умножаем на 7 и вычитаем из него третье уравнение, умноженное на 15, чтобы избавиться от х2 в третьем уравнении. При этом второе записываем без изменения, на месте третьего — результат вычитания. Тогда

Из третьего следует х3 =-3, подставим его во второе, получим х2 = — 2. Далее подставим найденные х2 и х3 в первое уравнение, получим х1 = 1.

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

1.2 Матричный метод

Запишем систему линейных 3 уравнений с 3 неизвестными

Составим матрицу из коэффициентов при неизвестных

А =

Введем в рассмотрение матрицы — столбцы для неизвестных и свободных членов:

Х = ; В = .

Тогда систему (2) можно переписать в матричной форме

Умножив это уравнение на слева, получим , откуда =или

Следовательно, матрица — решение Х находится как произведение на В .

Пример 2. Решить систему уравнений матричным методом

Решение: определитель матрицы

А=

∆=-1, значит, существует обратная матрица .

Матрица — столбец при неизвестных:

Х =

Матрица — столбец из свободных членов:

В =

Тогда решение запишется в виде

==

1.3 Вычисление определителей второго и третьего порядка

Число (а 11 а 22а 12 а 21 ) называется определителем второго порядка и обозначается символом

Определитель второго порядка содержит две строки и два столбца. Числа а 11 , а 12 , а 21 , а 22 называются элементами определителя. Диагональ определителя, на которой расположены числа а 11 , а 22 — главная, а элементы а 12 , а 21 составляют побочную диагональ.

Определитель 3-го порядка содержит три строки и три столбца:

Для вычисления определителя третьего порядка существует несколько способов.

Рассмотрим метод вычисления определителя разложением по элементам первой строки.

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

Минором некоторого элемента определителя называется определитель, полученный из данного вычеркиванием той строки и того столбца в которых этот элемент расположен. Обозначается Мij ( i — номер строки, j — номер столбца).

Например, минором элемента а12 является определитель

Алгебраическим дополнением данного элемента определителя называется его минор, умноженный на (-1) i+ j . Алгебраические дополнения обозначаются буквами Аij, и тогда Аy = (-1) i+ j My .

Определитель вычисляется так:

=.

Так же можно разложить определитель по любой строке или столбцу.

Изложенный метод применим к вычислению определителей 4-го и т.д. порядков.

Пример3. Вычислить определитель разложением по элементам первой строки

Решение: Элементы первой строки

А11 = (-1) 1+1 . М11 ==4+1=5.

М11 получили, вычеркнув первую строку и первый столбец.

А12 = (-1) 1+2 . М12 = — = — (8+3) = — 11.

М12 получили, вычеркнув первую строку и второй столбец.

А13 = (-1) 1+3 . М13 = = 2-3 = — 1.

М13 получили, вычеркнув первую строку и третий столбец.

= 1.5+2. (-11) — 2. (-1) = — 15

2. Язык программирования Паскаль

2.1 Структура программы

Язык Паскаль, начиная с момента своего создания Н. Виртом в 1971г., играет особую роль м в практическом программировании, и в его обучении. С непревзойденной четкостью в нем реализованы принципы структурного программирования. Трансляторы для программ, написанных на Паскале, разработаны для различных компьютеров и в настоящее время имеют множество разновидностей. Они являются компиляторами, обрабатывающими разработанные программистами тексты программ.

Существует много версий языка Паскаль. Различия между ними порой весьма велики. Так, базовая версия Вирта имеет многократно меньше возможностей, чем версия Турбо-Паскаль 7.0. (первая, фактически — язык для обучения будущих программистов, а вторая — орудие профессиональных разработчиков прикладного программного обеспечения) Тем не менее, это версии одного языка.

Любая Паскаль — программа является текстовым файлом с собственным именем и с расширением. pas. Паскаль — программа имеет вид последовательности символов латинских и русских букв, арабских цифр, знаков операций, скобок, знаков препинания и некоторых дополнительных символов. В нем можно выделить описания данных и операторы, описывающие действия, которые надо выполнить машине над этими данными.

Схематически программа представляется в виде последовательности восьми разделов:

описание внешних модулей, процедур и функций;

описание типов переменных;

описание функций и процедур;

Каждый раздел начинается со служебного слова, назначение которого зафиксировано в Паскале так, что его нельзя употреблять для других целей. Так например, описание заголовка начинается со служебного слова program, описание констант -const, описание переменных — var, раздел операторов начинается с begin. Программа заканчивается служебным словом end, после которого ставится точка. Описания величин и операторы друг от друга отделяются знаком «точка с запятой».

2.2 Описание переменных

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

Постоянные величины (константы) чаще всего бывают числовыми или символьными. Значения символьных констант заключаются в апострофы.

Постоянные величины описываются в разделе констант по схеме:

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

Группа типов, значения каждого из которых можно перечислить в некотором списке — скалярные типы. Для них определен порядковая функция ord (x) — номер значения х в списке; функция pred (x) -значение в списке, предшествующее х, и succ (x) — значение в списке, следующее за х.

Упорядоченный тип — это тип, значения которого упорядочены в обычном смысле.

Переменные описываются в раздел описания переменных по схеме:

Имена в списке разделяются запятой. В этом разделе может быть описано несколько переменных разного типа, например:

Var a,b,c,: real; k, i: integer; p: Boolean;

Над целыми величинами (тип integer) определены арифметические операции: * (умножение), div (деление нацело), mod (вычисление остатка от деления), +, — (сложение и вычитание); операции перечислены в порядке старшинства. Целый результат дают некоторые стандартные функции (аргумент заключается в круглые скобки):

-абсолютная величина целого хж

квадрат значения х;

целая часть вещественной величины х;

целое число, полученное из вещественного ч по правилу округления;

случайное целое число из интервала от 0 до х

Над вещественными величинами определены операции: *, +, -, /, а также стандартные функции, при вещественном или целом аргументе: abs (x), sqr (x), sin (x), cos (x), ln (x), sqrt (x) — квадратный корень из х, int (x) — целая часть из х, random — случайное число от 0 до 1. Указанные операции и функции дают вещественный результат.

Множество всех символов образуют символьные величины (тип char), которые являются упорядоченными.

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

Эта роль выражения отражена в основном операторе языка — операторе присваивания. Он имеет следующий вид:

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

В Паскале можно вводить с клавиатуры числовые и символьные данные. Имеются две встроенные процедуры (подпрограммы) ввода:

Процедура readln отличается от read только тем, что при завершении ввода курсор перемещается в начало строки.

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

Процедура write (x1,x2,x3,…xn) печатает на экран значения выражения из списка х1, х2,…хn. Для вывода на принтер используются те же процедуры с добавлением служебного слова lst перед списком выражений:

Пример: write (lst,’ нет решений‘);

2.3 Основные конструкции языка

Паскаль — это язык структурного программирования. Это значит, что программа должна выражать свои мысли очень дисциплинированно, с использованием малого числа четко оговоренных конструкций, используя как чередование их, так и вложения друг в друга. Не рекомендуется (хотя и возможно) использовать оператор перехода goto.

Реализация последовательности действий (т.е. структуры следования) выполняется с помощью составного оператора:

Раздел операторов в программе всегда является составным оператором. Служебные слова begin и end часто называют операторными скобками.

Для реализации развилки в Паскале предусмотрены два оператора: условный оператор и оператор варианта (выбора). Они предназначены для выделения из составляющих их операторов одного, который и выполняется.

Структура и действие условного оператора таковы:

Условный оператор может быть неполным, т.е. не содержать часть “else «. В этом случае, если значение логического выражения равно false, условный оператор не вызывает никаких действий.

Оператор варианта имеет следующую форму:

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

Оператор варианта вычисляет значение выражения, записанного после case. Если его значение совпадает с одной из констант в некотором списке, то выполняется оператор, стоящий после этого списка. Если значение выражения не совпало ни с одной константой во всех вариантах, то оператор варианта ничего не делает.

Для реализации циклов в Паскале имеются три оператора. Если число повторений известно заранее, то удобно воспользоваться оператором цикла с параметром. В других случаях следует использовать операторы цикла с предусловием (цикл «пока») или с постусловием (цикл «до»).

Цикл с предусловием является наиболее мощным в Паскале. Другие операторы цикла можно выразить через него. Его форма такова:

Действие: вычисляется значение логического выражения. Если оно равно true, то выполняется оператор, после чего снова вычисляется значение логического выражения, в противном случае действие заканчивается.

Оператор цикла с постусловием имеет форму:

Действие: выполняется последовательность операторов. Далее вычисляется значение логического выражения. Если оно равно true, то действие заканчивается, в противном случае снова выполняется последовательность операторов цикла и т.д.

Оператор цикла с параметром предусматривает повторное выполнение некоторого оператора с одновременным изменением по правилу арифметической прогрессии значения управляющей переменной (параметра) этого цикла. Оператор цикла с параметром имеет две формы.

Параметр, выражение 1, выражение 2 должны быть одного ординального типа. Параметр в этом цикле возрастает. Действие эквивалентно действию следующего составного оператора:

Если в этом описании отношение =, а функцию succ на pred, то параметр в цикле будет убывать, в этом случае цикл с параметром принимает форму 2.

For : = downto do

2.4 Структуры данных

В Паскале кроме простых типов данных: real, integer, boolean, byte, char, программист по своему желанию может определить новый тип путем перечисления его элементов — перечисляемый тип, который относится к простым ординальным типам.

Описание перечисляемого типа выполняется по схеме:

Например, type operator = (plus, minus, multi, divide);

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

Type days = (mon, tue, wed, thu, fri, sat, sun);

Workdays= mon. fri;

Операции и функции — те же, что и для базового типа. Использование интервальных типов в программе позволяет экономить память и проводить во время выполнения программы контроль присваивания.

Естественно и часто очень удобно группировать однотипные данные в последовательности — массивы, строки символов, объединять разнотипные данные в одном и том же объекте в виде записей. Значительное удобство представляются пользователю в Паскале при организации однотипных величин в виде множества с соответствующим набором операций: объединения, пересечения и т.д. Последовательность однотипных величин переменной длины можно представить в Паскале в виде файла данных и хранить на внешних носителях, используя его в разных программах.

Массив -это последовательность, состоящая из фиксированного числа однотипных элементов. Все элементы массива имеют общее имя и различаются индексами. Индексы можно вычислять, их тип должен быть ординальным. В описании массива используются служебные слова array и of. В описании массива указывается тип его элементов и типы их индексов.

2.4 Процедуры и функции

В Паскале подпрограммы называются процедурами и функциями и описываются в разделе с тем же названием.

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

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

Описание формальных параметров может иметь вид

Оператор вызова процедуры имеет вид

Указанные выражения называются фактическими параметрами. Их список должен точно соответствовать списку описаний формальных параметров процедуры. Во время вызова процедуры каждому параметру-значению присваивается значение соответствующего фактического параметра и поэтому их используют для передачи входных данных. Параметры — переменные используются для представления результатов процедуры.

Функция — это подпрограмма, определяющая единственное скалярное, вещественное или строковое значение. Отличия подпрограммы — функции от процедуры:

заголовок функции начинается со служебного слова function и заканчивается указанием типа значения функции:

function (список описаний формальных параметров): ;

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

обращение к функции — не оператор, а выражение вида:

3. Описание программы

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

Для решения систем линейных уравнений методом Гаусса и матричным методом создана программа на языке Паскаль. Программа запрашивает исходные данные (рис.1):

матрицу коэффициентов при неизвестных х;

столбец свободных членов

способ решения системы линейных уравнений — вариант 1 или 2.

Рисунок 3.1 Ввод исходных данных

В зависимости от выбранного вариант в программе происходит решение системы уравнений методом Гаусса (рис.2) или матричным методом (рис.3) с выдачей на экран результатов:

Рисунок 3.2 Результаты расчетов системы линейных уравнений методом Гаусса.

Рисунок 3.3 Результаты расчетов системы линейных уравнений матричным методом.

Программа состоит из 7 подпрограмм — 6 процедур и одной функции:

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

процедура matrica обеспечивает решение системы линейных уравнений матричным методом;

процедура PrintMatr2 предназначена для выдачи на экран исходной и обратной матрицы;

процедура MultString предназначена для умножения строк матрицы на число r;

процедура AddStrings прибавляет к i1-ой строке матрицы i2-ю, умноженную на число r;

процедура MultMatr предназначена для умножения матриц.

Функция Sign используется для изменения знака на противоположный при вычислении обратной матрицы.

Программа настроена на решение системы 3-х линейных уравнений с тремя неизвестными. Чтобы решить систему из 2-х уравнений с 2-мя неизвестными необходимо в программе изменить значение константы N с N=3 на N =2 (рис.4).

Рисунок 3.4. Фрагмент программы с описанием констант и переменных.

3.2 Блок-схема программы

Название: Разработка программы решения системы линейных уравнений
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа Добавлен 22:38:32 18 июля 2010 Похожие работы
Просмотров: 1002 Комментариев: 21 Оценило: 3 человек Средний балл: 5 Оценка: неизвестно Скачать

Заключение

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

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

1. А.В. Могилев, Н.И. Пак, Е.К. Хеннер «Информатика», Москва, ACADEMA, 2000 г.

2. « Турбо Паскаль 7.0″, Киев, Торгово-издательское бюро BHV, 1997г.

3. С.А. Немнюгин, «Турбо ПАСКАЛЬ», Практикум, Питер, 2002г.

Приложение

«Решение систем линейных уравнений матричным способом и методом Гаусса»

type matr=array [1. n,1. n] of real;

mas=array [1. n] of real;

procedure PrintMatr2 (m,m1: matr; n,nz,nd: integer);

for i: =1 to n do

if (i=1) then write (np: 2,’: ‘)

for j: =1 to n do

write (m [i,j]: nz: nd); write (‘ ‘);

for j: =1 to n do

write (m1 [i,j]: nz: nd);

procedure MultString (var a,b: matr; i1: integer; r: real);

for j: =1 to n do

procedure AddStrings (var а,b: matr; i1, i2: integer; r: real);

for j: =1 to n do

a [i1,j]: =a [i1,j] +r*a [i2,j] ;

b [i1,j]: =b [i1,j] +r*b [i2,j] ;

procedure MultMatr (a,b: matr; var c: matr);

for i: =1 to n do

for j: =1 to n do

for k: =1 to n do

function sign (r: real): shortint;

if (r>=0) then sign: =1 else sign: =-1;

procedure GetMatr (a: matr; var b: matr; m, i,j: integer);

var ki,kj,di,dj: integer;

for ki: =1 to m-1 do

if (ki=i) then di: =1;

for kj: =1 to m-1 do

if (kj=j) then dj: =1;

b [ki,kj]: =a [ki+di,kj+dj] ;

procedure gauss (a: matr; b: mas; var x: mas; n: integer);

For k: =1 to N-1 do

For i: =k+1 to n do

For j: =k+1 to N do

writeln (‘Вывод результатов решения системы уравнений методом Гаусса’);

writeln (‘x [‘,n,’] =’,x [n]: 6: 2);

for i: = (n-1) downto 1 do

For j: =i+1 to n do

x [i]: = (b [i] +s) /a [i, i] ;

writeln (‘x [‘, i,’] =’,x [i]: 6: 2);

procedure matrica (a: matr; y: mas; n: integer);

for i: =1 to n do

for j: =1 to n do z [i,j]: =0;

for i: =1 to n do

for j: =1 to n do

for i: =1 to n do

взятую со знаком i-того элемента j-ой строки. Таким образом,

на месте элементова a [i, i] возникает сумма модулей элементов i-того

столбца (ниже i-ой строки) взятая со знаком бывшего элемента a [i, i],

равенство нулю которой говорит о несуществовании обратной матрицы >

for j: =i+1 to n do

AddStrings (a,z, i,j,sign (a [i, i]) *sign (a [j, i]));

if (abs (a [i, i]) >eps) then

MultString (a,z, i,1/a [i, i]);

for j: =i+1 to n do

AddStrings (a,z,j, i,-a [j, i]);

writeln (‘Обратной матрицы не существует. ‘);

if (a [n,n] >eps) then

for i: =n downto 1 do

for j: =1 to i-1 do

AddStrings (a,z,j, i,-a [j, i]);

else writeln (‘Обратной матрицы не существует. ‘);

writeln (‘Начальная матрица, обратная к ней матрица: ‘);

for i: =1 to n do s [i]: =0;

for i: =1 to n do

for j: =1 to n do

s [i]: =s [i] +z [i,j] *y [j] ;

writeln (‘Вывод результатов решения системы уравненй матричным способом’);

for i: =1 to n do write (‘ ‘, s [i]: 5: 2);

writeln (‘ввод матрицы коэффициентов при неизвестных х’);

for i: =1 to N do

for j: =1 to N do

write (‘ введите a [‘, i,’,’,j,’] => ‘);

writeln (‘ввод столбца свободных членов’);

for i: =1 to N do

write (‘ введите b [‘, i,’] => ‘);

writeln (‘введите вариант ‘);

writeln (‘ 1 — решение системы линейных уравнений методом Гаусса ‘);

write (‘ 2 — решение системы линейных уравнений матричным методом => ‘);

Привет студент

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ

Приднестровский государственный университет им. Т.Г. Шевченко

Кафедра программного обеспечения вычислительной техники

и автоматизированных систем

КУРСОВАЯ РАБОТА

«Информатика и программирование»

тема: «ПРОГРАММНАЯ РЕАЛИЗАЦИЯ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ»

студентка группы ИТ13ДР62ИС1

Арабаджи Федор Иванович

ЗАДАНИЕ

на курсовую работу по дисциплине

«ПРОГРАММИРОВАНИЕ»

Студента группы ________ — ___________________

утверждена протоколом кафедры _________ № _____ от «____» ____________ 20___ г.

Цель курсовой работы:

Задачи курсовой работы:

Результаты курсовой работы:

График обязательных консультаций:

Дата сдачи записки на регистрацию «_____» __________20__ г.

Дата защиты курсовой работы «_____» __________20__ г.

Задание принял к исполнению «_____» __________20__ г. ___________/________________/

Руководитель работы ______________________ /________________/

СОДЕРЖАНИЕ

2 ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ………………………………….

2.3 Метод обратной матрицы…………………………………………….

3 РУКОВОДСТВО ПРОГРАММИСТА………………………………………..

3.1 Введение и общие сведения……………………………………………

3.2 Структура программного продукта………………………………….

3.4 Описание исходных текстов программного продукта…………….

3.5 Аппаратная и программная часть…………………………………….

3.6 Результаты тестирования и опытной эксплуатации………………….

4 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ……………………………………….

4.3 Установка программного продукта……………………………….…..

4.4 Запуск и работа с программным продуктом…………………….……

4.5 Удаление программного продукта…………………………………….

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ…………………………….

Введение

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

Сейчас невозможно представить себе какую-либо область деятельности, обходящуюся без применения компьютерной техники.

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

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

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

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

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

Учитывая современные возможности, можно облегчить процесс решения систем линейных уравнений. Данную задачу можно выполнить программно для упрощения и автоматизации процесса решения систем линейных уравнений методом Гаусса, методом Крамера, а также методом обратной матрицы с помощью Windows-приложения, реализованного средствами языка высокого уровня С#.

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

1 постановка задачи

В данной курсовой работе необходимо создать программный продукт при помощи Windows Forms на языке C#, который представлял бы возможность:

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

Программа должна выполнять решение систем линейных уравнений методом Гаусса, методом Крамера или методом обратной матрицы.

Окно программы должно содержать:

  • пункты меню: Файл, Правка, Примеры, Справка, О программе;
  • поле выбора метода решения системы линейных уравнений;
  • поле выбора количества уравнений в системе;
  • поля для входных и выходных данных;
  • кнопки операций.

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

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

2 описание предметной области

Решение систем линейных алгебраических уравнений – одна из фундаментальных задач математики. Система m линейных алгебраических уравнений с n неизвестными (или, линейная система, также употребляется аббревиатура СЛАУ) в линейной алгебре — это система уравнений вида (Рисунок 1)

Рисунок 1- Система уравнений

В системе уравнений (Рисунок 1) m является количеством уравнений, а n количество неизвестных. x1, x2,xn это неизвестные, которые надо определить. a11, a12, … amn коэффициенты системы, а b1, b2, … bm свободные члены. Индексы коэффициентов (aij) системы обозначают номера уравнения (i) и неизвестного (j), при котором стоит этот коэффициент, соответственно.

Существуют следующие способы решения систем линейных уравнений:

– метод обратной матрицы.

2.1 Метод Гаусса

Метод Гаусса – классический метод решения системы линейных алгебраических уравнений. Это метод последовательного исключения переменных, когда с помощью элементарных преобразований система уравнений приводится к равносильной системе треугольного вида, из которой последовательно, начиная с последних (по номеру), находятся все переменные системы. Хотя в настоящее время данный метод повсеместно называется методом Гаусса, он был известен и до К.Ф. Гаусса. Первое известное описание данного метода приведено в китайском трактате «Математика в девяти книгах», составленном между первым веком до н. э. и вторым веком н. э.

Далее приведено более подробное описание метода. Пусть исходная система будет вида (Рисунок 2):

Рисунок 2 — Исходная система уравнений

На рисунке 2.1 указана матрица A, вектор x и вектор b. Матрицей А называется основная матрица системы, вектором x – столбец неизвестных, вектором – столбец свободных членов.

Рисунок 2.1 — Матрица A

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

Рисунок 2.2 — Матрица треугольного вида

При этом будем считать, что базисный минор (ненулевой минор максимального порядка) основной матрицы находится в верхнем левом углу, то есть в него входят только коэффициенты при переменных xj1, … , xjr.

Тогда переменные xj1, … , xjr называются главными переменными. Все остальные называются свободными.

Если хотя бы одно число βi ≠ 0, где i > r, то рассматриваемая система несовместна, то есть у неё нет ни одного решения.

Пусть βi ≠ 0 для любых i > r. Перенесём свободные переменные за знаки равенств и поделим каждое из уравнений системы на свой коэффициент при самом левом x (см. рисунок 2.3):

Рисунок 2.3- Несовместная система

Если свободным переменным системы (рисунок 2.3) придавать все возможные значения и решать новую систему относительно главных неизвестных снизу вверх (то есть от нижнего уравнения к верхнему), то мы получим все решения этой системы линейных алгебраических уравнений. Так как эта система получена путём элементарных преобразований над исходной системой, то по теореме об эквивалентности при элементарных преобразованиях системы (рисунок 2) и (рисунок 2.3) эквивалентны, то есть множества их решений совпадают.

2.2 Метод Крамера

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

Рисунок 2.4 — Система линейных уравнений

Для системы n линейных уравнений (рисунок 2.4) с n неизвестными с определителем матрицы системы ≠ 0, решение записывается по формуле показанном на рисунке 2.5:

Рисунок 2.5 — Нахождение решения

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

2.3 Метод обратной матрицы

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

Обратная матрица – такая матрица A −1 , при умножении на которую, исходная матрица A даёт в результате единичную матрицу E (формула 2.6).

Обратная матрица находится по формуле 2.7.

В формуле 2.7 det обозначает определитель.

Если необходимо решить систему линейных уравнений Ax = b, где b – ненулевой вектор, в который входят свободные члены, x – искомый вектор. Если обратная матрица A -1 существует, то x = A -1 b. В противном случае либо размерность пространства решений больше нуля, либо их нет вовсе.

3 ПРОграммная реализация решения задачи

3.1 Введение и общие сведения

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

Программа «MATrix» предназначена для решения систем линейных алгебраических уравнений тремя методами:

  • методом Гаусса;
  • методом Крамера;
  • методом обратной матрицы.

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

3.2 Структура программного продукта

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

  • Formcs – форма приветсвия;
  • MATrix.cs – форма, обеспечивающая решение систем линейных алгебраических уравнений методом Гаусса, методом Крамера или методом обратной матрицы по выбору пользователя;
  • About.cs – форма, содержащая информацию о программном продукте.

На рисунке 3.1 изображена функциональная схема.

Программирование решения уравнений

Программирование решения уравнений. Презентация, проект и программный продукт (программа в Pascal)

Скачать:

ВложениеРазмер
programmirovanie_lineynyh_uravneniy.pptx1.54 МБ
metod_nyutona.docx69.43 КБ
programmirovanie_resheniya_uravneniy.docx911.13 КБ
Предварительный просмотр:

Подписи к слайдам:

Программирование линейных уравнений Работа ученика 9б класса Ф.И.О. обучающегося: Смолькова Андрея Владимировича Руководитель проекта Ф.И.О. Борисова О.А.

Языки программирования — это формальные языки, предназначенные для записи алгоритмов, исполнителем которых будет компьютер. Записи алгоритмов на языках программирования называются программами . Язык Паскаль – универсальный язык программирования. Никлаус Вирт ( 1934 года рождения) — швейцарский учёный, специалист в области информатики, один из известнейших теоретиков в области разработки языков программирования, профессор информатики (компьютерных наук). Разработчик языка Паскаль и ряда других языков программирования.

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

Метод Ньютона , алгоритм Ньютона (также известный как метод касательных ) — это итерационный численный метод нахождения корня заданной функции. Дана непрерывная функция f ( x ), которая содержит единственный корень на отрезке [ a,b ], где b > a при чем определены непрерывны и сохраняют знак f `( x ) f «( x ). Точность е. Выбираем грубое приближение корня х 0 . Найдем значение функции точке х 0 и проведем касательную до пересечения с осью абсцисс, получим значение х 1 . Определим значение функции в точке х 1 , через эту точку проводим касательную и получаем точку х 2 . Повторим этот процесс n раз. Метод Ньютона

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

Предварительный просмотр:

Предварительный просмотр:

Муниципальное бюджетное общеобразовательное учреждение

«Гимназия №7» г. Торжка

Программирование решения уравнений

Работа ученика 9Б класса

Смольков Андрей Владимирович

Ф.И.О. Борисова Ольга Александровна

Работа допущена к защите «_____» _______________ 2018г.

Подпись руководителя проекта _________________(__________________)

Паспорт проекта

Название проекта
Программирование решения уравнений

Руководитель проекта
Борисова Ольга Александровна

Автор проекта
Смольков Андрей Владимирович

Учебная дисциплина
Информатика

Тип проекта
Исследовательский

Цель работы
Изучить программную среду PascalABC для решения уравнений

  1. Написать программу решения:
  1. Системы линейных алгебраических уравнений методом Гаусса
  2. Нелинейных алгебраических уравнений методом Ньютона

Результат проекта (продукт)
Программа в среде программирования PascalABC

Индивидуальный план работы над проектом

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

Выбор типа проекта. Составление плана работы над проектом.

Работа над проектом

Анализ теоретической части.

Составление плана защиты проекта.

Отзыв руководителя. Формирование папки индивидуального проекта.

Защита индивидуального итогового проекта

Отзыв

на исследовательскую работу

учащегося 9 б класса МБОУ «Гимназия №7» г. Торжка

Смольков Андрей Владимирович

по теме: «Программирование решения уравнений»

Работа Смолькова Андрея представляет собой исследование программирование решения уравнений. Актуальность работы заключается в том, что на данный момент учащиеся 9-х классов изучают язык программирования Паскаль, и возникла необходимость объединить математику и информатику в единый программный продукт. В работе важно разобраться с различными методами решения уравнений и написать программу. Содержание работы соответствует заявленной теме. Работа включает в себя основную часть, заключение, список литературы. Работу Андрей выполнял самостоятельно, используя материалы Интернета и литературы. При выполнения работы Андрей проявил: самостоятельность, способность решать соответствующие проблемы. Не выполнял все рекомендации научного руководителя и не вовремя устранял замечания. Замечания по данной работе значительные, необходимо продумать и доработать заключение по данной теме. Не достаточно теоретического материала по языку программирования и их разновидности.

Вывод: проектная работа Смолькова А.В. по теме: «Программирование решения уравнений» достигла поставленных целей, отвечает требованиям, предъявляемым к индивидуальному итоговому проекту и рекомендуется к защите.

Учитель информатики . Борисова О.А.

(предмет) (подпись) (расшифровка подписи)

«__»_____________ 2018 г.

Общие сведения о языке программирования Паскаль

Языки программирования — это формальные языки, предназначенные для записи алгоритмов, исполнителем которых будет компьютер. Записи алгоритмов на языках программирования называются программами. Существует несколько тысяч языков программирования. Для данного проекта выбран язык программирования Паскаль, который был разработан в 70-х годах прошлого века Никлаусом Виртом (Швейцария). свое название этот язык получил в честь французского ученого Блеза Паскаля, известного не только своими достижениями в математике, физике и философии, но и созданием первой в мире механической машины, выполнявшей сложение двух чисел.

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

Основой языка программирования Паскаль, как и любого другого языка, является алфавит — набор допустимых символов, которые можно использовать для записи программы. Это:

  • латинские прописные буквы;
  • латинские строчные буквы;
  • арабские цифры;
  • специальные символы (знак подчеркивания, знаки препинания, круглые, квадратные и фигурные скобки, знаки арифметических операций и д.р.)

В языке существует также некоторое количество различных цепочек символов, рассматриваемых как единые смысловые элементы с фиксированным значением. Такие цепочки символов называются служебными словами.

В программе, записанной на языке Паскаль, можно выделить:

  1. заголовок программы;
  2. блок описания используемых данных;
  3. блок описания действий по преобразованию данных (программный блок).

Заголовок программы состоит из служебного слова program и имени программы. После имени программы ставятся точка с запятой. Блок описания данных состоит из раздела описания констант (const), раздела описания переменных (var) и некоторых других разделов. В разделе описания переменных указываются имена используемых в программе переменных и их типы. Имена переменных одного типа перечисляются через запятую, затем после двоеточия указывается их тип; описание каждого типа заканчивается точкой с запятой.

Общий вид программы:

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

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

В переменную n вводится порядок матрицы системы. С помощью вспомогательной процедуры Input вводятся двумерный массив A и одномерный массив b, после чего оба массива и переменная n передаются функции Gauss. В функции Gauss для каждого k-го шага вычислений выполняется поиск максимального элемента в k-м столбце матрицы начиная с k-й строки. Номер строки, содержащей максимальный элемент сохраняется в переменной l. В том случае если максимальный элемент находится не в k-й строке, строки с номерами k и l меняются местами. Если же все эти элементы равны нулю, то происходит прекращение выполнения функции Gauss c результатом false. После выбора строки выполняется преобразование матрицы по методу Гаусса.

Решение нелинейных уравнений

Метод Ньютона , алгоритм Ньютона (также известный как метод касательных ) — это итерационный численный метод нахождения корня заданной функции.

Дана непрерывная функция f(x), которая содержит единственный корень на отрезке [a,b], где b>a при чем определены непрерывны и сохраняют знак f`(x) f«(x). Точность е. Выбираем грубое приближение корня х 0 . Найдем значение функции точке х 0 и проведем касательную до пересечения с осью абсцисс, получим значение х 1 . Определим значение функции в точке х 1 , через эту точку проводим касательную и получаем точку х 2 . Повторим этот процесс n раз.

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

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

Заключение

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

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

Список литературы

  1. Босова Л.Л. Информатика: учебник для 8 класса/ Л.Л. босова, А.Ю. Босова.-3-е изд.-М.: БИНОМ. Лаборатория знаний, 2015. — 160с.:ил.
  2. http://www.cyberforum.ru
  3. http://tpdn.ru/library/articles/52/13520
  4. http://pcfu.ru/metod-gaussa-dlya-resheniya-slau

Текст публичного выступления

Здравствуйте уважаемые члены комиссии. Я Смольков Андрей, ученик 9Б класса МБОУ «Гимназии №7» города Торжка. Разрешите представить свой исследовательский проект по теме «Программирование решения уравнений». Языки программирования — это формальные языки, предназначенные для записи алгоритмов, исполнителем которых будет компьютер. Записи алгоритмов на языках программирования называются программами. Существует несколько тысяч языков программирования. Для данного проекта выбран язык программирования Паскаль, который был разработан в 70-х годах прошлого века Никлаусом Виртом (Швейцария). Свое название этот язык получил в честь французского ученого Блеза Паскаля, известного не только своими достижениями в математике, физике и философии, но и созданием первой в мире механической машины, выполнявшей сложение двух чисел. Язык Паскаль считается универсальным языком программирования, так как он может применяться для записи алгоритмов решения самых разных задач ( вычислительных, обработки текстов, построения графических изображений, поиска информации и т.д.). Он поддерживает процедурный стиль программирования, в соответствии с которым программа представляет собой последовательность операторов, задающих те или иные действия. Основой языка программирования Паскаль, как и любого другого языка, является алфавит — набор допустимых символов, которые можно использовать для записи программы. Это: латинские прописные буквы; латинские строчные буквы; арабские цифры; специальные символы (знак подчеркивания, знаки препинания, круглые, квадратные и фигурные скобки, знаки арифметических операций и д.р.). В языке существует также некоторое количество различных цепочек символов, рассматриваемых как единые смысловые элементы с фиксированным значением. Такие цепочки символов называются служебными словами. В программе, записанной на языке Паскаль, можно выделить: заголовок программы; блок описания используемых данных; блок описания действий по преобразованию данных (программный блок). Заголовок программы состоит из служебного слова program и имени программы. После имени программы ставятся точка с запятой. Блок описания данных состоит из раздела описания констант (const), раздела описания переменных (var) и некоторых других разделов. В разделе описания переменных указываются имена используемых в программе переменных и их типы. Имена переменных одного типа перечисляются через запятую, затем после двоеточия указывается их тип; описание каждого типа заканчивается точкой с запятой. Общий вид программы:

Метод Гаусса — классический метод решения системы линейных алгебраических уравнений. Назван в честь немецкого математика Карла Фридриха Гаусса. Это метод последовательного исключения переменных, когда с помощью элементарных преобразований система уравнений приводится к равносильной системе треугольного вида, из которой последовательно, начиная с последних (по номеру), находятся все переменные системы. На данных слайдах представлен программный продукт реализации решения уравнения методом Гаусса в Паскале. Метод Ньютона , алгоритм Ньютона (также известный как метод касательных ) — это итерационный численный метод нахождения корня заданной функции. Дана непрерывная функция f(x), которая содержит единственный корень на отрезке [a,b], где b>a при чем определены непрерывны и сохраняют знак f`(x) f«(x). Точность е. Выбираем грубое приближение корня х 0 . Найдем значение функции точке х 0 и проведем касательную до пересечения с осью абсцисс, получим значение х 1 . Определим значение функции в точке х 1 , через эту точку проводим касательную и получаем точку х 2 . Повторим этот процесс n раз. Программа на слайде. К сожалению, при всех своих достоинствах метод Ньютона не гарантирует сходимости. Отсутствия решения может возникнуть по нескольким причинам. Например, это может произойти из-за того, что касательная будет параллельна оси абсцисс. В этом случаи необходимо предусмотреть выход из цикла при достижении большого количества итераций. Практически перед каждым программистом рано или поздно встает задача определения корней уравнения. На сегодняшний день существует достаточно много алгоритмов решения данной задачи. Все они могут быть разделены на два этапа: отделения и уточнения корней. Первую часть легко выполнить графическим методом. Для выполнения второго этапа решения уравнения можно воспользоваться одним из многих методов уточнения корней уравнения.


источники:

http://privetstudent.com/kursovyye/kompiuternye-tekhnologii-kursovye/4172-programmnaya-realizaciya-resheniya-sistem-lineynyh-uravneniy.html

http://nsportal.ru/ap/library/nauchno-tekhnicheskoe-tvorchestvo/2018/10/09/programmirovanie-resheniya-uravneniy