ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
(НИУ «БелГУ»)
ИНСТИТУТ ИНЖЕНЕРНЫХ ТЕХНОЛОГИЙ И ЕСТЕСТВЕННЫХ НАУК
КАФЕДРА МАТЕМАТИЧЕСКОГО И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ИНФОРМАЦИОННЫХ СИСТЕМ
РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ
УРАВНЕНИЙ С РАЦИОНАЛЬНЫМИ КОЭФФИЦИЕНТАМИ
МОДИФИЦИРОВАННЫМ МЕТОДОМ ГАУССА
Магистерская диссертация
обучающегося по направлению подготовки 02.04.01 «Математика и
компьютерные науки»
очной формы обучения, группы 07001531
Сухомлинова Алексея Дмитриевича
Научный руководитель
доц., к.т.н. Чашин Ю.Г.
Рецензент
доц., к.п.н Ерина Т.А.
БЕЛГОРОД 2017
СОДЕРЖАНИЕ
ВВЕДЕНИЕ .............................................................................................................. 3
1 СИСТЕМЫ УРАВНЕНИЙ: ИСТОРИЯ, ПОНЯТИЯ ........................................ 6
1.1
Общая
характеристика
проблем
решения
систем
линейных
алгебраических уравнений (СЛАУ) ................................................................... 7
1.2 Решение системы 2-х линейных уравнений с 2-мя неизвестными.
Понятие определителя 2-го порядка .................................................................. 9
1.3 Матричный способ решения СЛАУ .......................................................... 13
1.4 Метод Гаусса ................................................................................................ 16
2 СОЗДАНИЕ И ОПИСАНИЕ ПРОЕКТА ......................................................... 23
2.1 Разработка модифицированного алгоритма Гаусса ................................. 23
2.2 Обоснование выбора языка программирования ....................................... 26
2.3 Обоснование выбора среды разработки .................................................... 28
3 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ................................................................... 32
3.1 Создание приложения ................................................................................. 32
3.2 Тестирование приложения .......................................................................... 33
3.3 Сравнение модифицированного метода Гаусса с традиционным
методом ............................................................................................................... 41
ЗАКЛЮЧЕНИЕ ..................................................................................................... 49
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ ............................................. 50
ПРИЛОЖЕНИЕ ..................................................................................................... 54
2
ВВЕДЕНИЕ
Данная тема является актуальной, т.к. решение систем линейных
алгебраических уравнений - одна из основных задач вычислительной
линейной алгебры. Хотя задача решения именно системы линейных
уравнений сравнительно редко представляет самостоятельный интерес для
прикладных задач, но от умения эффективно решать данные системы часто
зависит
сама
возможность
математического
моделирования
самых
разнообразных процессов с применением ЭВМ. Значительная часть
численных методов решения различных (в особенности - нелинейных) задач
включает в себя решение систем линейных уравнений как элементарный шаг
соответствующего алгоритма.
Научная новизна данной работы состоит в том, чтобы получить точное
решение систем линейных алгебраических уравнений модифицированным
методом Гаусса без деления на разрешающий элемент, без потери точности в
случае рациональных коэффициентов.
Целью магистерской диссертации является модифицирование метода
Гаусса для решения системы линейных алгебраических уравнений (СЛАУ) с
рациональными
коэффициентами,
с
целью
уменьшения
возможной
погрешности вычислений.
Основными задачами работы являются:
1)
Разработка
метода
приведения
СЛАУ
с
рациональными
коэффициентами к виду с целочисленными коэффициентами;
2)
Разработка алгоритма модифицированного метода Гаусса без
деления на разрешающий элемент;
3)
Компьютерная реализация модифицированного метода Гаусса;
4)
Тестирование метода и инструментальных средств поддержки.
Объект исследования — системы линейных алгебраических уравнений,
их современное состояние и проблемы их решения.
3
Предмет исследования — решение СЛАУ модифицированным методом
Гаусса.
Методы исследования — в данной работе будут рассмотрены основные
методы решения СЛАУ, их особенности и сложности реализации.
Достоверность
полученных
результатов
обеспечивается
использованием общепризнанных математических методов, сравнением с
результатами других авторов, совпадением аналогичных результатов,
сравнением теоретических результатов с экспериментальными.
Данная магистерская диссертация состоит из введения, трех разделов,
заключения и приложения. Она изложена на 71 страницах машинописного
текста, включающего 17 рисунков и список литературных источников из 45
наименований.
Во
введении
обосновывается
актуальность
темы
магистерской
диссертации, научная новизна и формулируется её цель, дается общий обзор
содержания работы.
В первом разделе магистерской диссертации «Системы уравнений:
понятие,
история»
анализируются:
определение
системы
линейных
алгебраических уравнений, проблемы их решения, их применение в
различных научных сферах деятельности, основные методы решения и выбор
метода Гаусса в качестве предмета научного исследования.
Во втором разделе «Создание и описание метода» ведется разработка
алгоритма
модифицированного
метода
Гаусса,
ориентированного
на
компьютерные вычисления без потери точности в случае рациональных
коэффициентов,
а
также
описание
блок-схемы
алгоритма,
языка
программирования и среды программной разработки, в которой будет
реализован данный метод.
В третьем разделе «Программная реализация» описано выполнение
созданного приложения, показаны результаты работы модифицированного
алгоритма Гаусса, а также наглядное сравнение модифицированного метода
Гаусса с традиционным.
4
В заключении обсуждается научная и практическая значимость
полученных результатов.
В приложении представлен модифицированный автором алгоритм для
решения СЛАУ методом Гаусса в случае рациональных коэффициентов,
реализованный в среде Visual Studio. Приведен листинг формы приложения и
программы, реализующей данный модифицированный метод, а также даны
комментарии к ним.
5
1 СИСТЕМЫ УРАВНЕНИЙ: ИСТОРИЯ, ПОНЯТИЯ
Система уравнений - это условие, состоящее в одновременном
выполнении нескольких уравнений относительно нескольких (или одной)
переменных [1].
Решением системы уравнений называется упорядоченный набор чисел
- значений неизвестных, при подстановке которых каждое уравнение
системы обращается в верное равенство.
Системой линейных алгебраических уравнений (СЛАУ) называется
система вида:
a11 x1 a12 x2 ... a1n xn b1
a x a x ... a x b
21 1
22 2
2n n
2
.....................................
am1 x1 am 2 x2 ... amn xn bm
Упорядоченный набор значений {x10, x20,…, xn0} называется решением
системы, если при подстановке в уравнения все уравнения превращаются в
тождество.
Если система уравнений имеет хотя бы одно решение, то она
называется совместной. Если система уравнений решений не имеет, то она
называется несовместной. Если СЛАУ имеет единственное решение, то ее
называют определенной; если решений больше одного, то – неопределенной
[2].
Если
свободные
члены
всех
уравнений
системы
равны
нулю b1=b2=...=bn=0, то система называется однородной, в противном случае
– неоднородной.
6
Решение практических задач с помощью СЛАУ известно еще со времен
древности.
Зачатки
алгебраических
операций
просматриваются
в
вавилонских табличках, египетских папирусах, в «Арифметике» Диофанта.
Задачи, соответствующие современным задачам на составление и
решение систем уравнений с несколькими неизвестными, встречаются еще в
вавилонских и египетских рукописях II века до н.э., а также в трудах
древнегреческих, индийских и китайских мудрецов. В китайском трактате
"Математика в девяти книгах" [3] словесно изложены правила решения
систем уравнений, были замечены некоторые закономерности при решении.
Система может состоять из алгебраических уравнений, линейных
алгебраических уравнений, нелинейных уравнений, дифференциальных
уравнений.
Методы решения системы уравнений зависят от типа системы.
Например, решения систем линейных алгебраических уравнений хорошо
известны (метод Крамера, метод Гаусса, матричный метод, метод итераций и
т.д.). Для нелинейных же систем общего аналитического решения не
найдено, они решаются разного рода численными методами. Аналогично
дело обстоит и с системами дифференциальных уравнений.
Системы линейных уравнений широко используются в задачах
экономики, физики, химии и других науках.
1.1
Общая характеристика проблем решения систем линейных
алгебраических уравнений (СЛАУ)
К решению систем линейных алгебраических уравнений сводится
подавляющее большинство задач вычислительной математики. В настоящее
время предложено огромное количество алгоритмов решения таких систем
[4].
7
Все методы решения линейных алгебраических уравнений можно
разделить на две большие группы: прямые и итерационные. В прямых (или
точных)
методах
решение
системы
находится
за
конечное
число
арифметических действий. Итерационные методы позволяют найти за
конечное число итераций приближенное решение системы с любой наперед
заданной точностью ε.
Примером прямого метода решения СЛАУ служит метод Крамера [5], в
соответствии с которым:
xi
i
,
i 1, n .
(1.1)
Однако на практике этот метод не используется, так как он требует
выполнения очень большого количества арифметических операций. Большая
часть существующих прямых методов укладывается в следующую схему.
Пусть задана система
Ax b
(1.2)
линейных алгебраических уравнений. Умножим обе части равенства (1.2)
слева на такие матрицы L1,L2,…,Lk, при которых новая система
Lk Lk 1 L2 L1 Ax Lk Lk 1 L2 L1b
(1.3)
равносильна исходной и легко решается. Для этого достаточно, чтобы
матрица LkLk-1…L2L1A была треугольной или диагональной. Методы,
основанные на подобных преобразованиях, составляют в настоящее время
самую значительную группу среди численных методов задач алгебры.
Одним из старейших является метод Гаусса, в основе которого лежит
идея последовательного исключения неизвестных [6,7]. Он использует левые
треугольные матрицы Li и позволяет свести исходную систему уравнений к
системе с правой треугольной матрицей. Этот метод легко реализуется на
компьютере, его схема с выбором главного элемента позволяет решать
8
системы с произвольной невырожденной матрицей, а компактная схема –
получить результаты с повышенной точностью. Среди всех прямых методов
метод Гаусса требует минимального объема вычислений.
Непосредственно к методу Гаусса примыкают метод Жордана и метод
оптимального исключения. Эти методы используют треугольные матрицы Li
(как левые, так и правые) и позволяют привести исходную систему к системе
с диагональной матрицей. Метод оптимального исключения позволяет при
заданном объеме оперативной памяти решать системы более высокого
порядка, чем метод Жордана.
Перечисленные методы входят в группу методов исключения. Это
название объясняется тем, что при каждом умножении на матрицу Li в
матрице системы исключается один или несколько элементов. Существуют
методы решения систем, которые сочетают в себе как свойства прямых
методов, так и итерационных. Как итерационные они построены на
минимизации некоторого функционала, достигающего своего минимума на
решении системы (1.2). Однако итерации обрываются не позднее, чем на nом шаге (n - порядок системы), давая точный ответ. К таким методам
относится метод сопряженных градиентов [8].
1.2
Решение
системы
2-х
линейных
уравнений
с
2-мя
неизвестными. Понятие определителя 2-го порядка
Изучение систем линейных уравнений было начато Лейбницем около
1678 г.; он использовал индексы в случае системы 3-х уравнений с 2-мя
неизвестными. Лейбниц исключал обе неизвестные и в результате они
определялись с помощью выражения специального вида, обращение в ноль
которого было условием разрешимости системы. Такое выражение Лейбниц
предложил называть определителем [9,10]. Позднее, в 1748 г. Маклорен
9
получил явные формулы для решения систем в случаях m=n=2 и m=n=3.
Последуем рассуждениям великих ученых.
Рассмотрим систему двух линейных уравнений с двумя неизвестными:
a11 x1 a12 x 2 b1
.
a
x
a
x
b
21 1
22 2
2
Решением этой системы уравнений является пара чисел (x1,x2),
обращающая оба уравнения системы в тождество.
Для нахождения решения применим метод алгебраического сложения с
последующим исключением неизвестных. Для получения x1 (исключения x2)
из данной системы уравнений умножим первое уравнение системы на a22, а
второе на a12, получим:
a11 a 22 x1 a12 a 22 x 2 b1 a 22
.
a
a
x
a
a
x
b
a
21 12 1
22 12 2
2 12
Вычтем почленно из 1-го уравнения второе:
a11a22 a21a22 x1 a12 a22 a22 a12 x2 b1a22 b2 a12 ,
т.е. a11a 22 a21a22 x1 b1a 22 b2 a12 .
Полагая выражение a11a 22 a 21a12 0 , получаем:
x1
b1 a 22 b2 a12
.
a11 a 22 a 21 a12
Аналогично, исключая из системы уравнений x1 (умножая 1-е
уравнение системы на a21, а 2-е - на a11 и вычитая из второго первое),
получим:
x2
b2 a11 b1 a 21
.
a11 a 22 a 21 a12
Непосредственной проверкой легко убедиться, что полученные
значения
x1 и x2 действительно удовлетворяют исходной
системе,
следовательно, являются решением.
Определение. Выражение a11a 22 a 21a12 , являющееся знаменателем
дробей,
определяющих
значения
неизвестных
x1
и
x2 ,
называется
10
определителем
(детерминантом)
2-го
порядка
[9,10],
обозначается
символом Δ или D (det) и символически записывается в виде квадратной
таблицы из 4-х чисел, называемых элементами определителя:
Если
элементы
неизвестных
в
a11
a 21
a11 , a12 , a21 , a22
рассматриваемой
a12
.
a 22
являются
системе,
Δ
коэффициентами
называется
при
основным
определителем системы.
Определитель 2-го порядка имеет 2 строки и 2 столбца, которые
называются рядами, следовательно, порядок определителя равен количеству
его строк или столбцов. Говорят, элементы с одинаковыми индексами
a11 , a 22 лежат на главной диагонали определителя, а с разными a 21 , a12 – на
побочной (вспомогательной).
Таким
образом,
определитель
2-го
порядка
равен
разности
произведений элементов, стоящих на главной и побочной диагоналях. Это
практическое правило вычисления определителя 2-го порядка [10].
Примеры вычисления определителей 2-го порядка:
1
2
3
3 4
2 1
3 1 4 2 3 8 5
sin
cos
sin
cos
x 1 y 1
x
2
y
2
sin cos cos sin sin
x 1 y 2 x 2 y 1 xy 2 y 2 x 2 y x 2 y x xy y x
Приняв введенное нами понятие определителя 2-го порядка, замечаем,
что числители в формулах для нахождения
x1 и x2
также могут быть
представлены в виде определителей 2-го порядка, которые мы назовем
вспомогательными и обозначим 1 и 2 :
11
1
b1
b2
a12
a
b
2 11 1
a 22
a 21 b2
,
.
Легко заметить, что вспомогательный определитель 1 получается из
основного определителя путем замены столбца коэффициентов при
неизвестной x1 столбцом правых частей. Аналогично составляется 2 .
Тогда формулы для нахождения решения исходной системы линейных
уравнений принимают следующий вид:
1
x
1
, 0.
2
x2
Впервые в таком виде они были записаны Крамером в 1754 г., поэтому
носят название формул Крамера [11] для системы двух линейных уравнений
с двумя неизвестными.
Замечание: часто в случае СЛАУ небольших размеров m n 2 3
неизвестные обозначают x, y , z.
При решении подобных систем могут быть следующие случаи:
1) 0 . Тогда система совместна и имеет единственное решение.
2 3
2 x1 3x 2 1
.
2 5 3 (3) 19,
Например,
3 5
3x1 5 x 2 11
1
x1
1
3
11
5
1 5 11 (3) 38, 2
2
1
3 11
2 11 1 3 19,
2 2 3 1 1 1 1
1 38
19
,
.
2, x 2 2
1. Проверка:
19
19
3 2 5 1 11 11 11
2) 0, 1 0, 2 0. Система совместна и имеет бесчисленное
множество решений. Фактически система сводится к одному уравнению
(второе – следствие первого), из которого неизвестные однозначно не
определяются.
12
2 5
2x 5 y 3
20 20 0,
. Здесь
Например,
4 10
4 x 10 y 6
x
3
5
30 30 0, y
6 10
2 3
4 6
12 12 0.
3) 0, но x 0, или y 0 . Тогда система несовместна.
5 3
5x 3 y 7
30 30 0,
.
Например,
10 6
10 x 6 y 2
x
7 3
2 6
42 6 36 0, y
5
7
10 2
10 70 60 0.
Система несовместна, т.е. не имеет решений.
Основным недостатком метода Крамера (если это можно назвать
недостатком) является трудоемкость вычисления определителей, когда число
уравнений системы больше трех.
Матричный способ решения СЛАУ
1.3
Введенные нами операции над матрицами позволяют:
предложить матричную форму записи СЛАУ.
1)
Для этого матрицу, составленную из коэффициентов при неизвестных
е
ц
и
атр
м
is
th
е
м
о
кр
системы m линейных уравнений с n неизвестными
я
и
азвн
б
ео
р
п
a11
a
A 21
a m1
a12
a 22
am2
a1n
a 2n
,
a mn
назовем основной матрицей системы [9,10].
о
д
ви
еи
н
л
о
п
вы
х
уги
р
д
Ее размерность ( m n) .
схем
я
ац
тегр
н
и
Основная матрица системы, дополненная столбцом свободных членов,
чскх
и
р
геб
ал
е
ы
ьн
стал
о
и
н
еш
р
13
называется расширенной матрицей системы [12,13]. Она имеет вид:
ы
тем
си
атем
е
и
сб
о
п
a11
a
A p 21
a m1
a1n b1
a 2 n b2
,
a mn bm
a12
a 22
am2
ее размерность m ( n 1) .
Обозначим матрицу – столбец, элементы которой – неизвестные
с
кур
n
verio
b
su
е
ы
ан
д
й
ы
яем
авл
б
и
р
п
системы, через X (ее размерность n 1 ), а матрицу – столбец, элементы
rivate
p
учи
л
о
п
к
чи
ад
тл
о
которой – свободные члены системы, B (ее размерность m 1 ):
и
чл
вы
ат
ер
п
о
г
стн
и
л
x1
b1
x
b
X 2 , B 2 .
xn
bm
Тогда систему уравнений можно записать в матричной форме:
g
sin
u
и
н
еш
р
н
ж
о
м
A X B.
2) получить еще один способ решения СЛАУ для случая m=n с
е
н
л
о
п
вы
невырожденной
w
ro
th
к
вщ
л
и
ф
о
р
п
о
ахвл
б
матрицей
х
и
щ
яю
звл
о
п
системы,
который
называется
ь
л
еско
н
матричным
способом [14]. В случае A 0 существует обратная матрица A 1 .
а
тем
си
al
visu
rivate
p
Запишем систему в матричной форме: A X B.
ск
и
о
п
т
яю
звл
о
п
у
этм
о
п
Умножим слева обе части равенства на A 1 . Получим:
ева
сл
ство
н
и
ед
д
ер
п
A 1 A X A 1 B .
На основании свойств произведения матриц и определения обратной
а
л
ы
б
els
ты
н
ем
эл
матрицы преобразуем левую часть равенства:
а
тем
си
ex
d
in
rivate
p
A1 A X ( A1 A) X E X X ,
где
X – матрица–столбец из неизвестных системы. Тогда решение
е
ы
н
д
б
сво
и
ам
яд
р
системы уравнений имеет вид:
и
ам
яд
р
X A1 B.
14
Пример. Решить систему уравнений матричным способом:
я
ан
хр
со
азум
б
ео
р
п
д
ето
м
и
ен
явл
о
п
й
о
ям
р
п
3x y z 2
2 x y 4 z 5.
x 2 y 3z 0
Запишем для данной системы уравнений матрицы A, X , B :
le
b
u
o
d
3 1 1
A 2 1 4 ;
1 2 3
x
2
X y ; B 5 .
z
0
Для нахождения обратной матрицы A 1 найдем основной определитель
о
д
ви
м
тави
со
ат
ер
п
о
й
и
щ
ю
азеш
р
г
н
и
акто
еф
р
системы и алгебраические дополнения каждого элемента матрицы A :
rivate
p
3
1
1
2 1
1
A11
2
3
1
4
2
3
A21
A31
4 3
1
1
2 3
1
1
1
4
е
ы
ьн
угл
о
ям
р
п
о
н
учеб
1 4
2 4
2 1
1
1
10 0.
2 3
1 3
1 2
5;
A12
1;
A22
3;
A32
2
4
1 3
3 1
1 3
8;
3 1
2
4
10;
14;
A13
2 1
1
2
A23
3 1
A33
3
1 2
1
2 1
5;
5;
5.
Составим матрицу из алгебраических дополнений
скй
р
о
н
и
м
5
3
5 10
5 1
A 1 8 5 . Транспонируем ее ( A ) 10 8 14 .
3 14 5
5 5 5
е
ы
ям
р
п
Найдем A 1
ет
м
и
1
( A ).
15
1
1
10
3 2
5 1
1
4
A 1 10 8 14 1
10
5
5
5
5
1
1
2
2
3
10
7
.
5
1
2
1
3
1
1 1
10
10 2 1
x 2
2 2
4
7
X A 1 B y 1
5 2 4 2 .
5
5
5
3
z
0 1
1
1
1
2 2
2
2
2
1
1
x 2 x 2
y 2 y 2.
z 3
3
z
2
2
1 3
Ответ: ,2, .
2 2
Метод Гаусса
1.4
Большим недостатком двух рассмотренных методов (формулы Крамера
зя
ал
ц
н
и
в
ео
ум
стр
н
и
еьн
л
ар
п
о
т
вед
и
р
п
ты
ен
ц
и
эф
ко
и матричный метод) является их большая трудоемкость, связанная с
ы
н
аги
л
п
ей
и
п
ко
громоздкими вычислениями при большом значении
сть
о
ен
азм
р
n . Возможность
у
ем
ставш
ста
о
р
п
л
и
ж
о
н
ум
применения этих методов ограничена также размерностью системы
ть
и
л
ед
р
п
о
еи
д
ж
ахо
н
ет
ж
о
м
уравнений m n и требованием невырожденности матрицы системы.
rivate
p
й
ы
яем
авл
б
и
р
п
та
й
сво
Обойти эти сложности помогает универсальный метод решения СЛАУ
й
о
ям
р
п
чя
и
ал
н
тн
и
кал
еьго
тр
- метод Гаусса, который еще называют методом последовательного
le
b
u
o
d
е
ваи
сн
б
о
азум
б
ео
р
п
исключения неизвестных [14,15,16].
и
чл
вы
чесо
акти
р
п
Условно в методе Гаусса можно выделить 2 этапа: «прямой» и
rivate
p
ьеа
б
р
во
я
атн
п
м
ко
«обратный» ходы.
и
н
еш
р
Прямой ход предполагает последовательное исключение неизвестных
а
п
о
кн
учае
сл
тн
и
кал
16
из уравнений системы, начиная с 1-го (движение сверху вниз).
ь
р
теп
затем
х
ы
вац
о
н
и
Обратный ход – последовательное нахождение значений неизвестных,
стью
о
ен
азм
р
м
ачи
зн
б
о
л
и
ж
о
н
ум
начиная с последнего уравнения системы (движение снизу вверх).
в
н
о
ар
ф
jav
ать
еш
р
В
основу
метода
и
ан
п
м
ко
Гаусса
е
н
м
гр
о
положены
ьн
л
стви
ей
д
о
свойства
д
ето
м
равносильных
тн
о
азб
р
(эквивалентных) систем (т.е. имеющих одни и те же решения) [16].
в
н
и
л
м
сухо
д
ето
м
ак
н
д
о
Примем без доказательства тот факт, что система переходит в ей
чки
то
а
д
ко
ая
ж
о
н
ум
равносильную в результате элементарных преобразований, к
которым
звука
относятся:
ц
и
атр
м
гаус
- перестановка уравнений местами;
ах
ул
м
р
о
ф
- умножение всех членов уравнения на одно и то же число, отличное от
чек
л
во
м
си
к
о
сун
и
р
rivate
p
нуля;
is
th
а
тем
си
- прибавление к обеим частям одного уравнения соответствующих
е
такж
и
н
еш
р
rivate
p
частей другого уравнения, умноженных на одно и то же число.
вкл
чая
ю
еьн
л
ар
п
о
al
visu
Таким образом, суть метода Гаусса заключается в том, что с помощью
т
вед
и
р
п
х
ы
ям
р
п
ьеа
б
р
во
суть
элементарных преобразований СЛАУ приводится к равносильной системе
ы
н
аги
л
п
is
th
я
и
ац
ер
п
о
ступенчатого вида, из которой затем последовательно находятся значения
ясь
н
л
о
п
вы
ет
ж
о
м
о
авн
р
переменных, начиная с последнего уравнения.
ку
о
стр
сты
и
гам
о
р
п
ву
сн
о
Замечание. Преобразования по схеме Гаусса удобно проводить не с
rivate
p
ы
н
аги
л
п
у
еб
тр
самими уравнениями, а с расширенной матрицей системы:
ко
зн
еви
р
ь
л
еско
н
rivate
p
a11
a
A p 21
a m1
a1n b1
a 2 n b2
.
a mn bm
a12
a 22
am2
В этом случае элементарные преобразования производятся над
а
тем
си
sft
icro
m
ет
м
и
р
п
строками [11]. Тогда, прямой ход будет состоять в получении нулей под
ая
н
м
ер
п
а
д
ко
rivate
p
rivate
p
ase
b
главной диагональю. Затем по расширенной матрице восстанавливают
а
тем
си
l
u
n
тая
чи
вы
систему и обратным ходом последовательно находят значения переменных.
всех
стяи
н
ж
зм
во
е
и
сб
о
п
Алгоритм метода Гаусса цикличен, т.е. одна и та же операция будет по
rivate
p
чя
и
ал
н
а
тем
си
схем
очереди повторяться для каждой неизвестной [16,17]. Условно его можно
чек
л
во
м
си
чскх
и
р
геб
ал
ти
вм
есо
н
выразить фразой: «диагональный элемент не ноль, под ним нули».
а
тем
си
та
й
сво
гаты
ел
д
17
Рассмотрим СЛАУ (случай m n ):
tvecrx
u
layo
скй
р
о
н
и
м
a11 x1 a12 x 2 ... a1n x n b1
a x a x ... a x b
21 1
22 2
2n n
2
.
..........
..........
..........
.......
a m1 x1 a m 2 x2 ... a mn xn bm
(1.4)
Пусть a11 0 (если a11 0 то перестановкой уравнений местами
ум
ед
сл
о
п
в
ко
язы
ясь
н
л
о
п
вы
добьемся, чтобы выполнялось условие a11 0 . Это приведет к равносильной
ачл
сн
ачется
зн
б
о
al
visu
системе уравнений). Разделим 1-е уравнение системы на a11 . Оно примет
с
кур
ть
и
еш
р
еы
м
и
р
п
ать
еш
р
вид:
(1)
(1)
x1 a12
x2 a13
x3 a1(1n) xn b1(1) ,
(1)
где a12
a
a
a12
b
(1)
; a13
13 a1(1n) 1n ; b1(1) 1 .
a11
a11
a11
a11
1. Умножая это уравнение последовательно на a21 , a31 am1 и
ы
л
и
атер
м
ц
и
атр
м
прибавляя полученные уравнения в том же порядке ко 2-му, 3-му … m -му
ть
и
л
ед
р
п
о
р
векто
и
чл
вы
уравнениям, исключим переменную x1 из всех уравнений системы, начиная
ать
еш
р
ск
и
о
п
суть
со второго.
й
о
ьн
кал
узы
м
Получим:
(1)
(1)
x1 a12
x 2 a13
x3 ... a1(1n) x n b1(1)
(1)
(1)
(1)
(1)
a 22 x 2 a 23 x3 ... a 2 n x n b2
.
..........
..........
..........
.......
(1)
a m(12) x2 a m(13) x3 ... a mn
x n bm(1)
(1.5)
(1)
2. Пусть a22
0 (если это не так, то перестановкой уравнений или
ы
д
ето
м
rivate
p
м
тави
со
неизвестных с изменением их номеров добьемся, чтобы выполнялось условие
o
xb
l
u
n
д
ето
м
(1)
a22
0 ).
(1)
Разделим второе уравнение системы на a 22
. Это уравнение примет вид
в
ун
д
го
я
н
ед
сл
о
п
г
ьн
ал
м
ти
п
о
18
( 2)
x2 a23
x3 a2( 2n) xn b2( 2) ,
где
( 2)
a 23
(1)
a 23
a 2( 2n)
(1)
a 22
a 2(1n)
(1)
a 22
;
b2(1)
(1) .
a22
b2( 2)
(1)
Умножая полученное уравнение последовательно на a32
am(12) и
и
н
ел
д
вы
а
тем
си
ей
и
п
ко
прибавляя полученные уравнения в том же порядке к третьему … m -му
tvecrx
u
layo
та
й
сво
в
ун
д
го
уравнению системы, исключим переменную x 2 из всех уравнений системы,
акто
ед
р
я
ачи
н
е
и
ан
зд
со
начиная с третьего.
учи
л
о
п
ко
зн
еви
р
Продолжая
процесс
последовательного
тва
ед
ср
исключения
переменных
гаты
ел
д
й
чско
атеи
м
x3 , x4 xr 1 после r -го шага получим систему вида
м
и
хд
б
ео
н
(1)
(1)
x1 a12
x 2 a13
x3 a1(1r ) x r a1(1r )1 xr 1 a1(1n) xn b1(1)
( 2)
( 2)
( 2)
( 2)
( 2)
x2 a 23 x3 a 2 r x r a 2 r 1 x r 1 a 2 n x n b2
(r )
.
x r a rr( r) 1 x r 1 a rn
x n br( r )
0 br(r 1)
0 bm( r )
(1.6)
Число нуль в последних m r уравнениях означает, что их левые части
io
d
stu
еи
н
л
о
п
вы
х
и
щ
яю
звл
о
п
зутся
и
еал
р
jav
имеют вид 0 x1 0 x2 0 xn . Если в полученной системе уравнений
тем
си
и
н
еш
р
й
еи
н
л
п
о
д
хотя бы одно из чисел br(r11) bm( r 1) не равно нулю, то соответствующее
г
о
д
каж
тся
и
д
ахо
н
н
л
кап
равенство противоречиво, и система (1.6) несовместна.
ую
н
д
схо
и
Для любой совместной системы (1.4) числа br(r 1) bm( r ) в системе (1.6)
й
о
ям
р
п
rivate
p
суть
mr
равны нулю. В этом случае последние
ен
авл
б
и
р
п
ять
сл
чи
вы
rivate
p
уравнений являются
о
ахвл
б
х
ы
н
д
б
сво
тождествами и их можно исключить при решении системы (1.6). После
p
tem
и
ам
яд
р
о
н
л
есчи
б
исключения из системы (1.6) последних m r уравнений возможны два
еч
н
ко
ы
н
гуж
ер
п
й
о
ан
д
случая:
1) число уравнений, оставшихся в системе (1.6), равно числу
и
н
еш
р
м
аквы
н
и
д
о
е
м
и
р
п
неизвестных, т.е. r n , тогда система (1.6) имеет треугольный вид и решение
е
и
ан
зд
со
rivate
p
ю
ац
тер
и
ен
р
о
акл
м
19
системы (4) единственное;
2) r n (тогда система (1.6) имеет ступенчатый вид и система (1.4)
ачто
н
вам
сы
и
ер
п
х
ы
ей
н
и
л
неопределенная, имеет бесчисленное множество решений).
artil
p
и
н
еш
р
сть
о
ен
азм
р
Пример 1. Решить систему уравнений методом Гаусса:
я
ти
р
о
аб
л
т
яю
звл
о
п
n
retu
2 x 3 y 4 z 20
3x 4 y 2 z 11. a11 2 0.
4 x 2 y 3z 9
Составим расширенную матрицу системы
и
чл
вы
id
u
req
ged
an
m
20
2 3 4
A p 3 4 2 11.
4 2
3
9
Разделим первую строку матрицы на 2.
rivate
p
а
тем
си
3
3
3
2
10
1
2
10 1
2
10 (3) (4)
1
2
2
2
17
0
8 41.
3 4 2 11 3 4 2 11
2
4 2
4 2
3
9
3
9
0
8
5
31
Разделим вторую строку полученной матрицы на
н
ж
о
м
3
2
1
2
0 1 16
17
0 8
5
е
м
и
р
п
3
10
2
1
2
82
16
(8) 0 1
17
17
31
43
0 0
17
Разделим третью строку на
ат
ер
п
о
ет
м
и
17
:
2
10
82
.
17
129
17
43
:
17
20
3
2
10
1
2
16
82
0 1
.
17
17
0 0
1
3
Прямой ход на этом окончен.
и
н
еш
р
и
чл
вы
Последней матрице соответствует система уравнений:
та
й
сво
я
н
ед
сл
о
п
ки
о
стр
3
x
x 2 2 x3 10
1
2
16
82
.
x 2 x3
17
17
x3 3
Обратный ход: из третьего уравнения системы x3 3;
га
р
о
д
из второго уравнения системы
акто
ед
р
x2
е
ы
тр
ко
16
82 16
82 48 82
34
x3
3
2;
17
17 17
17
17
17
из первого уравнения системы
ты
н
ем
эл
x1
3
3
x 2 2 x3 10 (2) 2 3 10 3 6 10 1.
2
2
Ответ: (1;2;3).
р
о
б
вы
rivate
p
Пример 2. Методом Гаусса решить систему уравнений:
еи
д
ж
ахо
н
rivate
p
а
тем
си
x1 2 x 2 x3 7
2 x1 3 x 2 x3 3.
4 x x x 16
2
3
1
Запишем и преобразуем расширенную матрицу системы
а
тем
си
tvecrx
u
layo
о
сл
чи
1 2 1 7 (2) (4) 1 2 1 7
1 2 1 7
0 7 3 11 (1) 0 7 3 11.
2 3 1 3
4 1 1 16
0 7 3 12 0 0
0 1
Уравнение, соответствующее третьей строке полученной матрицы,
д
ето
м
ева
сл
й
ы
яем
авл
б
и
р
п
представляет равенство 0 1 . Следовательно, система несовместна.
ц
и
атр
м
стью
о
ен
азм
р
в
н
и
л
м
сухо
21
Ответ: решений нет.
чскх
и
р
геб
ал
Замечания:
Кроме решения СЛАУ, методом Гаусса можно вычислять
1)
х
ы
ям
р
п
т
еващ
р
п
а
тем
си
определители. После выполнения прямого хода определитель равен
а
гд
то
еи
н
л
о
п
вы
is
th
earsytm
lin
всех
произведению элементов, стоящих на главной диагонали [18,19].
г
н
и
хем
яе
тавл
со
чесо
акти
р
п
Метод Гаусса помогает также находить обратную матрицу через
2)
в
о
тр
н
ем
эл
ается
ш
вы
о
м
и
вд
о
р
п
х
ы
ям
р
п
присоединенную: к исходной матрице A приписывается рядом единичная E
ачл
сн
ет
м
и
р
п
тя
и
л
ед
р
п
о
[20,21]. Затем проводятся элементарные преобразования, приводящие
е
и
сб
о
п
ч
еви
р
о
б
тс
ю
явл
матрицу A к виду единичной, при этом единичная матрица приводится к
я
ен
м
ст
о
м
и
азеш
р
е
м
и
р
п
обратной A1.
вая
ер
п
е
ы
ям
р
п
При
3)
решении
СЛАУ
методом
Гаусса
rivate
p
одновременно
осуществляется исследование системы [22].
е
м
и
р
п
х
уги
р
д
у
еб
тр
Методом Гаусса можно решать системы линейных алгебраических
id
u
req
т
яю
звл
о
п
л
и
ж
о
н
ум
уравнений любого вида без предварительного их исследования на
е
и
ан
зд
со
р
о
б
вы
я
и
ац
ер
п
о
совместность [23,24]. Процесс последовательного исключения неизвестных
г
о
д
каж
ы
ц
и
атр
м
ы
л
и
атер
м
переменных позволяет сделать вывод как о совместности, так и о
в
ко
язы
тая
чи
вы
ачл
сн
несовместности СЛАУ, а в случае существования решения дает возможность
м
ачи
зн
б
о
тя
хо
х
ы
ей
н
и
л
отыскать его.
ен
авл
б
и
р
п
д
ето
м
С точки зрения вычислительной работы метод Гаусса является
rivate
p
ем
ш
и
зап
ан
р
б
вы
предпочтительным.
ы
ер
вп
22
2 СОЗДАНИЕ И ОПИСАНИЕ ПРОЕКТА
2.1 Разработка модифицированного алгоритма Гаусса
Как было ранее сказано, в методе Гаусса можно выделить 2 этапа:
ку
о
стр
ать
еш
р
еьго
тр
и
чл
вы
ет
ж
о
м
«прямой» и «обратный» ходы.
у
тм
о
п
Прямой ход предполагает последовательное исключение неизвестных
зац
н
и
м
я
н
ед
сл
о
п
тем
си
из уравнений системы, начиная с 1-го (движение сверху вниз).
ч
еви
р
о
б
м
и
ел
азд
р
ью
щ
м
о
п
ть
и
л
ед
р
п
о
р
векто
Обратный ход – последовательное нахождение значений неизвестных
ьн
л
и
[14,15,16], начиная с последнего уравнения системы (движение снизу вверх).
в
ш
и
м
екл
б
аем
р
и
б
вы
n
retu
В
основу
метода
к
о
сун
и
р
ты
н
ем
Гаусса
положены
л
и
ж
о
н
ум
н
р
ко
е
м
и
р
п
свойства
равносильных
н
ж
о
м
(эквивалентных) систем (т.е. имеющих одни и те же решения) [16].
rivate
p
е
ваи
сн
б
о
ая
р
вто
Суть метода Гаусса заключается в том, что с помощью элементарных
еи
д
ж
ахо
н
тя
и
д
сво
я
л
ш
ы
азм
р
преобразований СЛАУ приводится к равносильной системе ступенчатого
lic
b
u
p
о
сл
чи
г
это
вида, из которой затем последовательно находятся значения переменных,
етс
явл
р
векто
тав
со
lic
b
u
p
sft
icro
m
начиная с последнего уравнения.
io
d
stu
На рис. 1 изображена блок-схема модифицированного метода Гаусса.
м
и
вд
о
р
п
ть
учи
л
о
п
й
ы
яем
авл
б
и
р
п
23
Рис. 2.1. Блок-схема модифицированного метода Гаусса
ву
сн
о
ьн
кал
узы
м
й
о
а
ц
б
л
сто
Рассмотрим матрицу следующего вида:
е
ц
и
атр
м
а
л
ы
б
a11
a
A p 21
a m1
a1n b1
a 2 n b2
.
a mn bm
a12
a 22
am2
Остальные элементы находим по формуле
й
н
л
о
п
ачется
зн
б
о
ат
ер
п
о
(k )
amn
amn aij amj ain
(2.1)
х
ы
ей
н
и
л
где amn(k) – элементы новой матрицы.
Модифицированный алгоритм Гаусса работает следующим образом:
г
о
д
каж
й
о
ям
р
п
а
д
ко
24
1)
Выбираем главный элемент матрицы по диагонали;
2)
Переписываем разрешающую строку без изменений;
3)
Разрешающий столбец заполняем нулями;
4)
Вычисляем остальные элементы по формуле (2.1) без деления на
ан
р
б
вы
х
ы
ей
н
и
л
т
вед
и
р
п
ы
ем
л
б
о
р
п
м
о
д
каж
вется
азы
н
is
th
й
о
ан
д
я
н
ед
сл
о
п
разрешающий элемент.
artil
p
rivate
p
Таким образом, модифицированный метод позволяет получить точное
е
ы
ям
р
п
is
th
теьы
и
н
л
п
о
д
кя
стер
аги
м
решение СЛАУ без потери точности и без ошибок.
а
гд
то
tecd
ro
p
n
tio
excp
Пример. Решить СЛАУ модифицированным методом Гаусса:
тя
и
л
ед
р
п
о
го
щ
ю
азеш
р
is
th
2 x1 5 x 2 x3 2
x1 3x 2 2 x3 11 .
3x 2 x 2 x 10
2
3
1
Составим матрицу системы
м
ьш
л
о
б
тс
ю
явл
2 5 1 2
A 1
3
2 11 .
3 2 2 10
Выбираем
в
качестве
д
ето
м
главного
разрешающую строку без изменений,
я
ачи
н
элемента
переписываем
-2,
й
н
л
о
п
м
ы
н
о
ц
и
ад
тр
разрешающий столбец заполняем
ева
сл
rivate
p
нулями, остальные элементы вычисляем по формуле (2.1):
al
visu
ьую
л
си
о
авн
р
я
еи
н
л
о
п
вы
1 2
2 5
0 11 3 20 .
0 11 1 14
Теперь в качестве разрешающего элемента берем следующий по
ex
d
in
р
векто
lic
b
u
p
диагонали, и проделываем те же шаги:
rivate
p
26 122
22 0
0
11
3
20
.
0
0 22 66
25
Выбираем последний разрешающий элемент, и проводим последнюю
евы
л
ваи
сн
о
я
ан
хр
со
итерацию:
0
968
484 0
242
0
242 .
0
0
0 22 66
Таким образом, мы получаем следующее решение:
и
чл
вы
ват
и
ж
ер
д
о
п
учае
сл
x1 2;
x 2 1;
x 3 3.
2.2 Обоснование выбора языка программирования
Прогресс компьютерных технологий определил процесс появления
ка
яд
р
о
п
х
ы
ям
р
п
я
авл
б
и
р
п
новых разнообразных знаковых систем для записи алгоритмов - языков
стяи
н
ж
зм
во
is
th
ачл
сн
программирования. Смысл появления такого языка - оснащённый набор
тем
си
ен
м
и
р
п
я
еи
н
л
о
п
вы
ц
и
атр
м
и
н
еш
р
вычислительных формул дополнительной информации, превращает данный
учи
л
о
п
is
th
я
и
ац
ер
п
о
набор в алгоритм. Язык программирования служит двум связанным между
ву
сн
о
к
со
и
п
учаем
л
о
п
вн
о
усл
собой целям: он даёт программисту аппарат для задания действий, которые
учаем
л
о
п
тва
ед
ср
м
и
ван
о
еб
тр
и
н
еш
р
вн
о
усл
должны быть выполнены, и формирует концепции, которыми пользуется
lic
b
u
p
еи
авн
ур
rivate
p
ачл
сн
программист, размышляя о том, что делать.
вам
ы
ел
д
о
р
п
ьо
ал
ц
н
и
р
п
C# (говоря на русском, си Шарп) – это объектно-ориентированное
д
ето
м
программирование [25]. Он был разработан в 2001 году, инженерами под
я
ви
о
стан
й
н
л
о
п
ки
чер
о
руководством Андерса Хейлсберга в компании Microsoft. На данное время
ь
тел
учи
о
сам
ть
и
еш
р
rivate
p
я
еи
авн
ур
е
такж
существует 4 версии языка «си Шарп».
rivate
p
Название «Си Шарп» (от англ. sharp - диез) происходит от
та
н
ем
эл
rivate
p
al
visu
музыкальной нотации, где знак диез [26], прибавляемый к основному
усть
п
х
ы
ей
н
и
л
м
н
д
о
р
учае
сл
й
о
ям
р
п
обозначению ноты, означает повышение соответствующего этой ноте звука
n
retu
я
вум
д
та
н
ем
эл
ая
сш
вы
26
на полутон. Это аналогично названию языка С++, где «++» обозначает, что
ьта
езул
р
стью
о
ен
азм
р
le
b
u
o
d
переменная должна быть увеличена на 1.
о
сл
чи
м
о
д
каж
н
л
кап
К числу принципиально важных решений, которые реализованы
ь
р
теп
д
ето
м
у
еб
тр
корпорацией Microsoft в языке программирования C#, можно отнести
всух
н
и
л
м
о
rivate
p
ьтаы
езул
р
следующие:
компонентно-ориентированный подход к программированию
1)
й
ы
яем
авл
б
и
р
п
е
н
м
гр
о
(который характерен и для идеологии Microsoft .NET в целом);
is
th
ск
и
о
п
тс
ю
явл
свойства как средство инкапсуляции данных (характерно также в
2)
rivate
p
р
ф
ей
п
ск
и
о
п
целом для ООП);
rivate
p
обработка событий (имеются расширения, в том числе в части
3)
ая
ж
о
н
ум
у
этм
о
п
р
векто
обработки исключений, в частности, оператор try);
я
еи
н
л
о
п
вы
г
н
и
хем
ят
д
ахо
н
унифицированная система типизации (соответствует идеологии
4)
атем
le
b
u
o
d
о
яем
авл
р
уп
Microsoft .NET в целом);
и
л
аш
н
а
тем
си
5)
делегаты (delegate – развитие указателя на функцию в языках C и
6)
индексаторы (indexer – операторы индекса для обращения к
jav
й
н
л
о
п
к
чи
ад
тл
о
C++);
е
и
сб
о
п
ч
еви
р
о
б
стачн
о
д
элементам класса- контейнера);
ят
д
ахо
н
перегруженные операторы (развитие ООП); - оператор foreach
7)
rivate
p
и
чл
вы
я
ачи
н
(обработка всех элементов классов-коллекций, аналог Visual Basic);
в
о
тр
н
ем
эл
та
н
ем
эл
я
атн
п
м
ко
в
о
тр
н
ем
эл
rivate
p
механизмы boxing и unboxing для преобразования типов; -
8)
size
х
ы
н
д
б
сво
ьй
л
си
о
авн
р
атрибуты (средство оперирования метаданными в COM-модели);
ьй
л
си
о
авн
р
прямоугольные массивы (набор элементов с доступом по номеру
9)
ск
и
о
п
ы
тем
си
тем
си
в
н
хо
ти
в
н
хо
ти
индекса и одинаковым количеством столбцов и строк).
я
ен
ж
о
л
и
р
п
Язык программирования C# имеет следующие достоинства:
чая
н
и
ед
е
м
и
р
п
вкй
о
стан
ер
п
C# создавался параллельно с каркасом Framework .Net и в полной
1)
тки
о
азб
р
у
д
ето
м
ет
м
и
мере учитывает все его возможности - как FCL, так и CLR;
ет
м
и
о
сл
чи
C# является полностью объектно-ориентированным языком, где
2)
al
visu
ю
еи
авн
ур
я
ен
м
даже типы, встроенные в язык, представлены классами;
тя
хо
3)
ьн
л
стви
ей
д
о
ет
м
и
C# является мощным объектным языком с возможностями
ц
и
атр
м
я
н
ед
сл
о
п
lic
b
u
p
наследования и универсализации;
27
C# является наследником языков C/C++, сохраняя лучшие черты
4)
size
кн
о
й
еи
авн
ур
й
атн
р
б
о
этих популярных языков программирования [27]. Общий с этими языками
й
яты
н
о
п
к
со
и
п
le
b
u
o
d
синтаксис, знакомые операторы языка облегчают переход программистов от
вкй
о
стан
ер
п
е
такж
ты
ен
ц
и
эф
ко
затем
и
чл
вы
С++ к C#;
Сохранив основные черты своего великого родителя, язык стал
5)
size
х
ы
н
д
б
сво
еья
тр
ки
чер
о
проще и надежнее. Простота и надежность, главным образом, связаны с тем,
ая
ж
о
н
ум
аем
р
и
б
вы
tvecrb
u
layo
что на C# хотя и допускаются, но не поощряются такие опасные свойства
size
ы
ц
и
атр
м
le
b
u
o
d
ей
и
п
ко
вам
ы
ел
д
о
р
п
С++ как указатели, адресация, разыменование, адресная арифметика;
rivate
p
Благодаря каркасу Framework .Net, ставшему надстройкой над
6)
я
есн
р
ад
р
ф
ей
п
rivate
p
операционной системой, программисты C# получают те же преимущества
м
н
д
о
р
тки
о
азб
р
ак
н
д
о
работы с виртуальной машиной, что и программисты Java. Повышается
р
векто
а
тем
си
ктен
хар
эффективность кода, поскольку исполнительная среда CLR представляет
ять
сл
чи
вы
х
ы
н
д
б
сво
м
и
вд
о
р
п
собой компилятор промежуточного языка, в то время как виртуальная Javaтем
си
ая
сш
вы
в
о
тр
н
ем
эл
ы
ц
и
атр
м
й
еи
авн
ур
машина является интерпретатором байт-кода;
е
сл
о
п
Мощная библиотека каркаса поддерживает удобство построения
7)
о
н
учеб
тем
си
ц
и
атр
м
ан
р
б
вы
ex
d
in
различных типов приложений на C#, позволяя легко строить Web-службы,
е
сл
о
п
е
н
л
о
п
вы
id
u
req
другие виды компонентов, достаточно просто сохранять и получать
ч
ви
ко
ар
м
ко
зн
еви
р
аш
н
я
д
каж
информацию из базы данных и других хранилищ данных;
о
авн
р
ть
и
еш
р
els
Реализация, сочетающая построение надежного и эффективного
8)
тва
ед
ср
и
ен
аж
р
вы
size
кода, является немаловажным фактором, способствующим успеху C#.
ать
еш
р
в
ш
и
м
екл
б
Выделение
и
д
ето
м
объединение лучших
о
д
ви
м
и
хд
б
ео
н
идей
современных
е
и
ан
зд
со
языков
программирования делает язык C# не просто суммой их достоинств, а
n
verio
b
su
tvecrb
u
layo
jav
языком программирования нового поколения.
е
м
и
р
п
n
retu
м
и
хд
б
ео
н
2.3 Обоснование выбора среды разработки
Для реализации поставленной задачи мною была выбрана среда
и
ен
аж
р
вы
е
м
и
р
п
ачется
зн
б
о
а
тем
си
разработки Microsoft Visual Studio, так как она наиболее подходит для
х
ы
ей
н
и
л
rivate
p
ая
сш
вы
создания данного проекта, а именно автоматизированной информационной
й
яты
н
о
п
ко
зн
еви
р
аш
н
28
системы,
имеет
вкй
о
стан
ер
п
понятный
r
fo
ain
m
интерфейс
и
р
о
б
вы
большой
набор
функций,
rivate
p
а
тем
си
инструментов [28].
Microsoft Visual Studio — линейка продуктов компании Майкрософт,
ет
м
и
гаты
ел
д
к
язы
я
еи
н
л
о
п
вы
включающих интегрированную среду разработки программного обеспечения
is
th
я
ачи
н
и ряд других инструментальных средств. Данные продукты позволяют
я
есн
р
ад
ен
р
о
акл
м
м
ьш
л
о
б
разрабатывать как консольные приложения, так и приложения с графическим
кн
о
интерфейсом, в том числе с поддержкой технологии Windows Forms, а
я
еи
авн
ур
е
ящ
асто
н
также веб-сайты, веб-приложения, веб-службы как
управляемом кодах
для
всех
а
ц
б
л
сто
платформ,
в родном,
так
и
в
поддерживаемых Microsoft
Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows
Phone .NET Compact Framework и Microsoft Silverlight [29].
io
d
stu
ятс
д
ахо
н
Visual Studio включает в себя редактор исходного кода с поддержкой
rivate
p
а
ц
б
л
сто
g
sin
u
технологии IntelliSense и возможностью простейшего рефакторинга кода.
а
л
ы
б
Встроенный отладчик может работать как отладчик уровня исходного кода,
гаты
ел
д
так
и
как
отладчик
в
н
о
ар
ф
и
азвн
б
ео
р
п
машинного
al
visu
al
visu
уровня.
Остальные
встраиваемые
создания
графического
г
о
д
каж
инструменты включают в себя:
м
ьш
л
о
б
о
еьн
л
ар
п
редактор
1)
форм
w
ro
th
для
упрощения
n
verio
b
su
я
ачи
н
интерфейса приложения;
al
visu
2)
веб-редактор;
3)
дизайнер классов;
дизайнер схемы базы данных.
4)
к
язы
вая
ер
п
Visual Studio позволяет создавать и подключать сторонние дополнения
а
н
ц
и
л
го
ex
d
in
rivate
p
(плагины) для расширения функциональности практически на каждом
тем
си
ау
сл
ы
л
и
атер
м
уровне, включая добавление поддержки систем контроля версий исходного
д
ето
м
rivate
p
ьую
л
си
о
авн
р
кода (как например, Subversion и Visual SourceSafe), добавление новых
р
векто
наборов инструментов (например, для редактирования и визуального
al
visu
проектирования
я
ти
р
о
аб
л
rivate
p
кода
rivate
p
н
л
кап
на предметно-ориентированных
программирования) или инструментов для
прочих
языках
аспектов процесса
ть
и
еш
р
разработки программного обеспечения.
29
Каждая новая версия программы состоит из новейших инструментов и
id
u
req
вем
азо
н
w
ro
th
технологий, позволяющих разрабатывать приложения с учетом особенностей
кн
о
ктен
хар
ея
д
и
и положительных моментов современных платформ [30]. Например, Visual
в
ексо
д
н
и
ты
ен
ц
и
эф
ко
о
н
л
есчи
б
ат
ер
п
о
и
чл
вы
Studio 2012 может поддерживать более ранние версии, в том числе Windows
is
th
тки
о
азб
р
акто
ед
р
ей
и
п
ко
XP и Windows Server 2003. При этом разработчикам открыта дорога к
а
н
ц
и
л
го
o
xb
созданию
й
о
ям
р
п
новых
етс
явл
и
д
ето
м
модернизации
уже
существующих
tes
n
co
приложений,
я
ви
о
стан
а
гд
то
предназначенных для ранних версий ОС Windows. Стоит отметить, что в
lic
b
u
p
аш
н
ен
ж
о
л
и
р
п
процессе использования поддерживаемых системой вариантов исходные
ки
чер
о
файлы,
проекты
clean
и
гаус
решения
в
программе
д
ето
м
Visual
и
н
еш
р
еи
н
л
о
п
вы
будут
Studio
ть
и
еш
р
работоспособными, но исходный код может нуждаться в изменениях.
х
ы
вам
и
ж
ер
д
о
п
учаем
л
о
п
Рис. 2.2. Среда разработки MS Visual Studio
rix
tm
u
o
lay
й
н
ч
б
о
п
Средства, входящие в состав Visual Studio для Windows, можно
м
ьш
л
о
б
ьеа
б
р
во
й
еи
авн
ур
ьую
л
си
о
авн
р
использовать для создания привлекательных инновационных приложений
ы
тем
си
ет
ж
о
м
е
сл
о
п
для Магазина Windows в среде Windows 8.1. Эти средства включают
я
ен
ж
о
л
и
р
п
ка
яд
р
о
п
л
и
ж
о
н
ум
30
полнофункциональный редактор кода, мощный отладчик, специальный
w
ro
th
ч
еви
р
о
б
ьш
л
о
б
м
профилировщик и широкие возможности языковой поддержки, которые
ается
ш
вы
о
позволяют
я
авл
б
и
р
п
выполнять
w
ro
th
я
еи
д
ж
ахо
н
е
ц
и
атр
м
сборку
приложений,
написанных
p
tem
на
языках
HTML5/JavaScript, C++, C# и Visual Basic. В состав Visual Studio для
е
р
вто
is
th
ц
и
атр
м
Windows также входит имитатор устройств, который можно использовать
ая
ж
о
н
ум
я
и
азвн
б
ео
р
п
е
ы
тр
ко
азум
б
ео
р
п
ен
р
о
акл
м
для тестирования приложений Магазина Windows на устройствах различных
учаем
л
о
п
и
н
еш
р
ск
и
о
п
artil
p
видов [31].
Была выбрана данная среда программирования, потому что она
вч
о
и
ем
д
n
retu
м
и
д
ахо
н
позволяет работать с данными различного типа. Имеет понятный интерфейс,
ы
ер
вп
к
вщ
л
и
ф
о
р
п
г
н
и
хем
ью
щ
м
о
п
широкий набор инструментов для
р
векто
ер
н
зай
и
д
разработки приложений который
к
вщ
л
и
ф
о
р
п
а
тем
си
и
чл
вы
расширяется. Интеграция со многими языками программирования и
й
еи
авн
ур
вам
сы
и
ер
п
программами, быстро компилирует программный код и выявляет ошибки.
в
ко
язы
та
й
сво
lic
b
u
p
а
тем
си
31
3 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
3.1 Создание приложения
Создаем форму приложения с созданными файлами
sft
icro
m
сть
о
ен
азм
р
е
такж
Рис. 3.1. Форма приложения с созданными файлами
ем
ш
и
ап
та
й
сво
ста
о
р
п
В свойствах формы расписываем название, все параметры и т.д.,
н
р
ко
которые показаны на рис.3.2.
clean
я
ен
сл
чи
вы
г
о
л
ан
Рис. 3.2. Свойства формы приложения
учае
сл
чая
н
и
ед
32
Более подробно создание формы описано в приложении.
т
яю
звл
о
п
rivate
p
м
ачи
зн
б
о
При выполнении программы появляется следующее окно:
чак
тур
tes
n
co
ку
о
стр
Рис. 3.3. Окно приложения
и
чл
вы
3.2 Тестирование приложения
Теперь подробнее опишем окно приложения, показанное на рис.3.3.
я
н
ед
сл
о
п
е
м
и
р
п
s
o
d
in
w
«Размерность» - количество элементов матрицы и соответственно
р
ф
ей
п
is
th
ен
авл
б
и
р
п
число итераций, необходимых для получения решения. Его можно
а
д
ко
le
b
u
o
d
к
со
и
п
регулировать с помощью стрелок, вверх или вниз.
е
м
и
р
п
н
р
ко
и
ан
п
м
ко
«Предыдущая итерация» - перед выполнением она недоступна, но
ясь
н
л
о
п
вы
тс
ю
явл
я
ац
тегр
н
и
станет таковой после выполнения первой итерации.
й
о
ям
р
п
сть
о
ен
азм
р
я
д
каж
«Следующая итерация» - данная кнопка доступна с самого начала
чая
ю
скл
и
х
уги
р
д
звука
ект
ал
и
д
выполнения. Когда останется провести последнюю итерацию, она перестанет
сть
о
ен
азм
р
еи
д
ж
ахо
н
s
gau
быть доступной.
s
o
d
in
w
ы
тем
си
«Решить» - становится доступной перед последней итерацией, когда
o
xb
ау
сл
ая
сш
вы
al
visu
необходимо найти окончательное решение.
ю
ац
тер
и
al
visu
A – матрица системы.
ч
ги
о
л
ан
B – столбец свободных членов.
rivate
p
rivate
p
33
X – решение системы.
м
ьш
л
о
б
Сначала вводим необходимые нам данные.
й
н
л
о
п
я
н
ед
сл
о
п
Листинг 3.1. Реализация модифицированного метода Гаусса (ввод
данных)
public class LinearSystem {
private double[,] initial_a_matrix;
private double[,] a_matrix; // матрица A
private double[] x_vector;
// вектор неизвестных x
private double[] initial_b_vector;
private double[] b_vector;
// вектор b
м
и
ван
о
еб
тр
й
ы
тр
ко
rivate
p
size
е
м
и
р
п
у
д
еж
м
is
th
ц
и
атр
м
х
сы
и
ап
н
еи
н
л
о
п
вы
м
р
о
атф
л
п
е
м
и
р
п
Затем выбираем разрешающий элемент, проводим необходимое
н
р
ко
ы
ц
и
атр
м
учае
сл
количество итераций и находим решение.
м
ьш
л
о
б
c
esp
am
n
учае
сл
Листинг 3.2. Реализация модифицированного метода Гаусса (решение)
// 1) выбор главного элемента
double r = FindR(i, index);
ах
ул
м
р
о
ф
lic
b
u
p
т
еващ
р
п
// 2) преобразование матрицы A
for (int j = 0; j < size; ++j)
a_matrix[k, l] =
=a_matrix[k,l]*a_matrix[I,j]-a_matrix[k,j]*a_matrix[i,l];
м
учи
л
о
п
у
еб
тр
т
вед
и
р
п
for (int k = i + 1; k < size; ++k) {
for (int j = i; j < size; ++j)
a_matrix[k, index[i]] = 0.0;
}
n
retu
стью
о
ен
азм
р
есь
зд
}
}
// 3) поиск решения
for (int j = i + 1; j < size; ++j)
x_i = b_matrix[k,l]/a_matrix[k,l];
x_vector[index[i]] = x_i;
rivate
p
вкй
о
стан
ер
п
у
ем
ставш
}
}
Пример 1. Решить СЛАУ размерностью 2х2:
о
ахвл
б
34
4 x1 x 2 15
x1 3 x 2 7
Вводим коэффициенты матрицы и правой части:
тя
и
д
сво
чя
и
ал
н
ц
и
атр
м
Рис. 3.4. Коэффициенты уравнений
Нажимаем на кнопку «Следующая итерация» и в результате получаем:
х
ы
вам
и
ж
ер
д
о
п
ь
тел
учи
о
сам
rivate
p
le
b
u
o
d
Рис. 3.5. Результаты первой итерации
rivate
p
rivate
p
Нажимаем на кнопку «Решить» и получаем ответ:
к
вщ
л
и
ф
о
р
п
is
th
вется
азы
н
35
Рис. 3.6. Решение СЛАУ
ка
яд
р
о
п
Пример 2. Решить СЛАУ размерностью 3х3
с
ай
р
чскх
и
р
геб
ал
2 x1 7 x2 3x3 5
3x1 4 x2 2 x3 20
x 3x 6 x 18
2
3
1
и
ен
явл
о
п
н
р
ко
le
b
u
o
d
Результаты выполнения программы показаны на рисунках 3.7-3.10.
Рис. 3.7. Ввод коэффициентов
я
вум
д
at
p
m
co
36
Рис. 3.8. Результаты первой итерации
rivate
p
rivate
p
Нажимаем на кнопку «Следующая итерация» и в результате получаем:
х
ы
вам
и
ж
ер
д
о
п
ь
тел
учи
о
сам
rivate
p
le
b
u
o
d
Рис. 3.9. Результаты второй итерации
Нажимаем на кнопку «Решить», в результате получаем следующий
ответ:
37
Рис. 3.10. Последняя итерация и получение решения
ет
ял
вы
сью
чн
то
к
вщ
л
и
ф
о
р
п
Пример 3. Решить СЛАУ размерностью 4х4
суть
2 x1 5 x2 x3 3x4 19
x 2 x 5 x 2 x 1
1
2
3
4
3x1 x2 2 x3 4 x4 21
x1 3x2 3x3 2 x4 21
е
яти
н
о
п
еи
н
л
о
п
вы
учаем
л
о
п
Результаты выполнения программы показаны на рисунках 3.11-3.15.
Рис. 3.11. Коэффициенты
38
Рис. 3.12. Результаты первой итерации
rivate
p
rivate
p
Нажимаем на кнопку «Следующая итерация» и в результате получаем:
х
ы
вам
и
ж
ер
д
о
п
ь
тел
учи
о
сам
rivate
p
le
b
u
o
d
Рис. 3.13. Результаты второй итерации
Снова жмем на кнопку «Следующая итерация», получаем следующий
ь
тел
учи
о
сам
rivate
p
результат:
39
Рис. 3.14. Результаты третьей итерации
Осталась последняя итерация, поэтому нажимаем на кнопку «Решить»,
и получаем решение
Рис. 3.15. Последняя итерация и получение решения
ть
и
л
ед
р
п
о
40
3.3 Сравнение модифицированного метода Гаусса с традиционным
методом
На конкретном примере мы решим СЛАУ размерностью 3x3
м
н
д
о
р
чая
ю
скл
и
учае
сл
традиционным методом и модифицированным, сравним их между собой и
rivate
p
lic
b
u
p
ство
н
и
ед
сделаем выводы.
атк
р
б
о
т
сф
о
кр
ай
м
Пример. Решить следующую СЛАУ
о
яем
авл
р
уп
3x1 2 x2 5 x3 5
x1 4 x2 x3 11
4 x x 3x 14
2
3
1
Традиционный метод Гаусса.
г
ьн
ал
м
ти
п
о
is
th
й
д
ж
о
р
евы
н
Наша матрица
X1
X2
X3
b
3
-2
5
-5
1
4
1
11
4
1
-3
14
Нашли единицу в 1-ом столбце и поменяли местами 2-ую и 1-ую
r
d
fin
к
со
и
п
х
ы
вац
о
н
и
еи
д
ж
ахо
н
чак
тур
строки
ес
ц
о
р
п
X1
X2
X3
b
1
4
1
11
3
-2
5
-5
41
4
1
-3
14
X1
X2
X3
b
3
12
3
33
3
-2
5
-5
4
1
-3
14
Умножили 1-ую строку на 3
и
чл
вы
уг
б
етр
п
Вычли 1-ую строку из 2-ой строки и восстановили ее
х
ы
ей
н
и
л
тя
хо
аге
ш
X1
X2
X3
b
1
4
1
11
0
-14
2
-38
4
1
-3
14
X1
X2
X3
b
4
16
4
44
0
-14
2
-38
4
1
-3
14
Умножили 1-ую строку на 4
х
ы
вац
о
н
и
42
Вычли 1-ую строку из 3-ей строки и восстановили ее
учае
сл
g
sin
u
т
вед
и
р
п
№
X1
X2
X3
b
1
1
4
1
11
2
0
-14
2
-38
3
0
-15
-7
-30
Получили единицу в 2-ом столбце, разделив 2-ую строку на -14
а
л
ы
б
вется
азы
н
р
векто
ста
о
р
п
w
ro
th
№
X1
X2
X3
b
1
1
4
1
11
2
0
1
-0.14285714285714285
2.7142857142857144
3
0
-15
-7
-30
Умножили 2-ую строку на 4
я
есн
р
ад
№
X1
X2
X3
b
1
1
4
1
11
2
0
4
-0.5714285714285714
10.857142857142858
3
0
-15
-7
-30
43
Вычли 2-ую строку из 1-ой строки и восстановили ее
еи
авн
ур
ая
н
м
ер
п
есь
зд
X1
X2
X3
b
1
0
1.5714285714285714
0.14285714285714235
0
1
-0.14285714285714285
0
-15
-7
2.7142857142857144
й
о
ан
д
rivate
p
-30
Умножили 2-ую строку на -15
е
р
вто
X1
X2
X3
b
1
0
1.5714285714285714
0
-15
2.142857142857143
-40.714285714285715
0
-15
-7
-30
0.14285714285714235
тав
со
al
visu
Вычли 2-ую строку из 3-ей строки и восстановили ее
ц
и
атр
м
е
н
л
о
п
вы
х
еы
ж
о
н
ум
size
X1
X2
X3
b
1
0
1.5714285714285714
0.14285714285714235
0
1
0
0
-0.14285714285714285
о
н
учеб
-9.142857142857142
и
л
аш
н
2.7142857142857144
10.714285714285715
Получили единицу в 3-ем столбце, разделив 3-ю строку на
rivate
p
ств
и
гам
о
р
п
еи
д
ж
ахо
н
-9.142857142857142
44
X1
X2
X3
b
1
0
0
1
-0.14285714285714285
0
0
1
1.5714285714285714
ч
еви
р
о
б
ьзует
л
о
сп
и
0.14285714285714235
2.7142857142857144
ь
л
си
о
авн
р
-1.1718750000000002
Умножили 3-ю строку на 1.5714285714285714
о
д
ви
ьта
езул
р
X1
X2
X3
b
1
0
1.5714285714285714
0
1
-0.14285714285714285
0
0
1.5714285714285714
а
тем
си
0.14285714285714235
2.7142857142857144
earsytm
lin
й
и
щ
ю
азеш
р
-1.8415178571428574
Вычли 3-ю строку из 1-ой строки и восстановили ее
ьй
л
си
о
авн
р
rivate
p
о
д
ви
X1
X2
X3
b
1
0
0
1.9843749999999998
0
1
-0.14285714285714285
2.7142857142857144
0
0
1
-1.1718750000000002
учаем
л
о
п
сть
о
ен
азм
р
45
Умножили 3-ю строку на -0.14285714285714285
й
о
авн
гл
X1
X2
X3
b
1
0
0
1.9843749999999998
0
1
-0.14285714285714285
0
0
-0.14285714285714285
2.7142857142857144
ств
и
гам
о
р
п
ер
н
зай
и
д
0.1674107142857143
Вычли 3-ю строку из 2-ой строки и восстановили ее
и
чл
вы
ц
и
атр
м
X1
X2
X3
b
1
0
0
0
1
0
2.546875
0
0
1
-1.1718750000000002
1.9843749999999998
г
это
Ответ:
lic
b
u
p
lic
b
u
p
x1 = 1.9843749999999998
вн
о
усл
x2 = 2.546875
таxэлма3
ен
п
о
трс = -1.1718750000000002
Погрешность вычислений:
x1: 2-1.9843749999999998=0.015625
x2: 3-2.546875=0.453125
x3: -1-(-1.1718750000000002)=0.171875
46
Модифицированный метод.
clas
Составим матрицу системы
еи
авн
ур
д
ето
м
3 2 5 5
A 1 4
1 11 .
4 1 3 14
Выбираем
в
качестве
н
ж
о
м
главного
разрешающую строку без изменений,
ьо
ал
ц
н
и
р
п
элемента
3,
переписываем
rivate
p
rivate
p
разрешающий столбец заполняем
е
м
и
р
п
ку
о
стр
нулями, остальные элементы вычисляем по формуле (2.1):
х
ы
вац
о
н
и
авя
д
rivate
p
5
5
3 2
0
14
2
38
.
0 11 29 62
Теперь в качестве разрешающего элемента берем следующий по
s
o
d
in
w
и
азвн
б
ео
р
п
х
звсты
еи
н
диагонали, и проделываем те же шаги:
м
и
ван
о
еб
тр
66
6
42 0
0
14
2
38
.
0 0 384 384
Выбираем последний разрешающий элемент, и проводим последнюю
л
и
ж
о
н
ум
size
г
о
д
каж
итерацию:
0
0
32256
16128
5376
0
16128 .
0
0
0
384
384
Таким образом, мы получаем следующее решение:
вй
тако
х
уги
р
д
ак
н
д
о
x1 2;
x2 3;
x3 1 .
47
Погрешность вычислений:
x1: 2-2=0
x2: 3-3=0
x3: -1-(-1)=0
Таким образом, мы смогли получить точное решение без потери
rivate
p
ы
тем
си
егко
точности в рамках рациональных коэффициентов, без наличия ошибок и,
ьта
езул
р
и
н
еш
р
rivate
p
самое главное, значительно быстрее, чем общеизвестным методом.
48
ЗАКЛЮЧЕНИЕ
При
выполнении
магистерской
диссертации
были
учается
л
о
п
выполнены
следующие задачи:
ч
еви
р
о
б
р
векто
было
1)
сформулировано
определение
г
это
системы
линейных
м
и
вд
о
р
п
е
и
ан
зд
со
алгебраических уравнений, их применение в различных областях науки;
г
это
rivate
p
ег
щ
б
о
рассмотрены основные методы решения СЛАУ, проблемы их
2)
le
b
u
o
d
тав
со
у
ем
ставш
решения, а также обоснован выбор метода Гаусса в качестве предмета
jav
м
р
о
атф
л
п
я
и
н
ел
д
и
чл
вы
научно-исследовательской работы;
й
твн
ед
ср
о
выбраны
3)
и
х
ы
ям
р
п
описаны
язык
ь
р
теп
программирования
и
среда
программной разработки;
le
b
u
o
d
д
ето
м
разработан
4)
алгоритм
rivate
p
модифицированного
метода
т
яю
звл
о
п
е
м
и
р
п
Гаусса,
ориентированного на компьютерные вычисления без потери точности в
я
ан
хр
со
я
д
каж
звука
случае рациональных коэффициентов.
р
векто
В приложении приведены листинг формы приложения, а также листинг
я
авл
б
и
р
п
p
tem
в
ко
язы
основной программы на языке C# в среде разработки Visual Studio.
н
ж
о
м
х
ы
н
д
б
сво
г
стн
и
л
е
азви
н
учае
сл
49
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
Амосов
1.
А.
А.,
Дубинский
ы
тем
си
Ю.
вн
о
усл
А.,
Копченова
Н.
П. Вычислительные методы для инженеров. — М.: Мир, 1998.
ц
и
атр
м
я
атн
п
м
ко
тн
и
кал
Бахвалов Н. С., Жидков Н. П., Кобельков Г. Г. Численные
2.
size
методы. — 8-е изд. — М.: Лаборатория Базовых Знаний, 2000.
схем
ева
сл
sft
icro
m
Даан-Дальмедико А.
3.
н
ж
о
м
Пути и лабиринты. Очерки по истории
тем
си
n
retu
математики: Пер. с франц./ А. Даан-Дальмедико, Ж. Пейффер - М.:
м
аквы
н
и
д
о
чая
ю
вкл
и
ен
аж
р
вы
Мир,1986. - 432 с.
Беклемишев Д.В. Дополнительные главы линейной алгебры. М.:
4.
ы
р
ексато
д
н
и
тая
чи
вы
та
й
сво
Наука, 2003. 335 с.
Волков Е. А. Численные методы. — М.: Физматлит, 2003.
5.
ваи
сн
о
и
чл
вы
я
ачи
н
Калиткин Н.Н. и др. Численные методы. М.: Наука, 2002
6.
и
чл
вы
rivate
p
ство
н
и
ед
7.
Калиткин Н.Н. Численные методы. М.: Наука, 2003. 512 с.
8.
Беклемишев Д.В. Курс аналитической геометрии и линейной
вкй
о
стан
ер
п
е
м
и
р
п
я
звл
о
п
ева
сл
в
н
и
л
м
сухо
ю
еи
авн
ур
алгебры/ Д.В. Беклемишев – М,: Наука, 1974. – 320 с.
х
ы
н
д
б
сво
й
о
авн
гл
Боревич З.И. Определители и матрицы: Учеб. Пособие для вузов/
9.
й
о
ан
д
в
и
ан
хр
со
ая
сш
вы
З.И. Боревич – М.: Наука. Гл. ред. физ.-мат. лит., 1986. – 184 с.
id
u
req
е
и
сб
о
п
10.
le
b
u
o
d
Райс Дж. Матричные вычисления и математическое обеспечение.
в
и
ан
хр
со
size
в
н
о
ар
ф
М.: Мир, 2004. 264 с.
11.
Воробьева Г.Н., Данилова А.Н. Практикум по численным
тем
си
методам. М.: Высш. шк., 2009. 184 с.
в
ексо
д
н
и
n
retu
12.
й
чн
б
о
п
Годунов С.К. Решение систем линейных уравнений. Новосибирск
size
is
th
е
азви
н
: Наука,2000.
13.
Данко П.Е. Высшая математика в упражнениях и задачах. В 2 –х
м
это
чесо
акти
р
п
ью
щ
м
о
п
ч. Ч. I: Учеб. пособие для втузов./П.Е. Данко, А.Г. Попов, Т.Я. Кожевникова
вн
о
усл
м
ьш
л
о
б
кн
о
– М.: Высш. шк., 1997.– 304с.
is
th
14.
rivate
p
Е.А. Волков. Численные методы: Учеб. Пособие для вузов - М.:
й
о
ям
р
п
ет
м
и
ч
еви
р
о
б
Наука. Гл. ред. физ-мат. лит., 2007. - 248 с.
учаем
л
о
п
50
Демидович
15.
й
ы
н
д
схо
и
Б.П.,
е
и
сб
о
п
Марон
И.А.
Основы
вычислительной
а
тем
си
математики. М.: Наука, 2000. 664 с.
й
о
ям
р
п
w
ro
th
Ильин В. А., Позняк Э. Г. Линейная алгебра: Учебник для
16.
а
гд
ко
rivate
p
ex
d
in
вузов. — 6-е изд., стер. — М.: ФИЗМАТЛИТ, 2004. — 280 с.
н
л
кап
еи
авн
ур
к
о
сун
и
р
Каплан И.А. Практические занятия по высшей математике. Ч.
17.
учае
сл
1-3/ И.А. Каплан – Харьков: Изд-во ХГУ, 1967. – 946 с.
тя
и
л
ед
р
п
о
ем
д
ай
н
w
ro
th
Корн Г., Корн Т. Справочник по математике для научных
18.
le
b
u
o
d
е
и
сб
о
п
earsytm
lin
работников и инженеров. — М.: Наука, 1970. — С. 575-576.
ева
сл
ку
о
стр
id
u
req
Маркович Э.С. Курс высшей математики с элементами теории
19.
кн
о
ка
яд
р
о
п
rivate
p
вероятностей и математической статистики: учеб. Пособие для вузов/ Э.С.
ть
и
л
ед
р
п
о
е
м
о
кр
l
u
n
Маркович – М.: Высш. школа, 1972. – 480 с.
я
звл
о
п
я
д
каж
20.
вем
азо
н
Минорский В.П. Сборник задач по высшей математике. Учеб.
гаты
ел
д
ы
тем
си
учается
л
о
п
пособие для вузов. / В.П.Минорский – М.: Наука, 1977. – 285 с.
й
о
ям
р
п
21.
м
о
д
каж
у
еб
тр
Р.Ф. Хемминг "Численные методы (для научных работников и
вкй
о
стан
ер
п
и
чл
вы
е
н
м
гр
о
инженеров)". - Москва, 2002.
size
22.
вется
азы
н
Тихонов А.Н., Костомаров Д.П. Вводные лекции по прикладной
rivate
p
ты
ен
ц
и
эф
ко
аге
ш
математике. М.: Наука, 2004. 190 с.
у
ем
ставш
23.
Турчак Л.И. Основы численных методов. М.: Наука, 2007
24.
Ф.В. Формалев, Д.Л. Ревизников "Численные методы". - М.:
ase
b
а
ц
б
л
сто
х
ы
ей
н
и
л
л
и
ж
о
н
ум
is
th
rivate
p
ФИЗМАТЛИТ, 2004.
25.
Фаронов В.В. Программирование в С#: учеб. пособие / В.В.
стачн
о
д
и
ан
п
м
ко
й
о
ьн
кал
узы
м
Фаронов. - 7-е изд., перераб. - М.: Нолидж, 2006. – 412 с.
я
авл
б
и
р
п
26.
а
тем
си
Павловская Т. А. C#. Программирование на языке высокого
р
о
б
вы
есь
зд
сью
чн
то
уровня: Учебник для вузов. - СПб.: БХВ-Петербург. 2007
ц
и
атр
м
27.
Фаронов
я
и
ац
ер
п
о
чая
н
и
ед
В.
В.,
Создание
приложений
с
е
азви
н
помощью
C#:
Руководство программиста. - М.: Эксмо, 2008
р
векто
28.
rivate
p
Карли Уотсон, Кристиан Нейгел, Якоб Хаммер Педерсен, и
о
авн
р
г
ьн
ал
м
ти
п
о
р
ф
ей
п
а
гд
то
др. Visual C# 2008: базовый курс. Visual Studio® 2008 = Beginning Visual C#
rivate
p
вам
сы
и
ер
п
та
й
сво
g
sin
u
2008. — М.: «Диалектика», 2009. — С. 1216.
д
ето
м
le
b
u
o
d
е
яти
н
о
п
le
b
u
o
d
51
Бежанова, М.М. Практическое программирование: структуры
29.
та
й
сво
данных и алгоритмы: учеб. для вузов / М.М. Бежанова, Л.А. Москвина, И.В.
ью
щ
м
о
п
еьго
тр
учае
сл
Поттосин. - М.: Логос, 2001. – 223 с.
is
th
al
visu
30.
Голицина
О.Л.,
rivate
p
Попов
И.И.
Основы
алгоритмизации
усть
п
le
b
u
o
d
и
программирования: Учебное пособие. - М.: ФОРУМ: ИНФРА-М, 2005
в
ето
м
ар
п
31.
е
ы
ьн
стал
о
е
р
вто
Майо Д. Самоучитель Microsoft Visual Studio 2010 = Microsoft
ен
ж
о
л
и
р
п
ятс
д
ахо
н
и
ен
аж
р
вы
л
и
ж
о
н
ум
Visual Studio 2010: A Beginner's Guide (A Beginners Guide). — C.: «БХВты
н
ем
эл
л
и
ж
о
н
ум
в
ш
и
м
екл
б
Петербург», 2010. — С. 464.
й
ы
яем
авл
б
и
р
п
32.
тся
и
д
ахо
н
Andrew
Moore
Visual
Studio®
2010
All–in–One
For
Dummies®; Вимбо, Союз - Москва, 2010. - 912 c.
33.
Andrew Parsons, Nick Randolph Professional Visual Studio 2005;
Wrox - Москва, 2012. - 912 c.
34.
Brain Johnson Working with Microsoft Visual Studio 2005; Н. Фену
и Ко - Москва, 2010. - 304 c.
35.
Istvan
Novak
Beginning
Visual
Studio
2010
LightSwitch
Development; М.: Медгиз; Издание 5-е, перераб. и доп. - Москва, 2011. - 360
c.
36.
James Avery Visual Studio Hacks; China Books & Periodicals -
Москва, 2011. - 500 c.
37.
Joydip Kanjilal Visual Studio 2010 and .NET 4 Six–in–
One; Literatura Mondadori - Москва, 2010. - 816 c.
38.
Keyvan Nayyeri Professional Visual Studio Extensibility; Wrox -
Москва, 2013. - 552 c.
39.
Lars Powers, Mike Snell Microsoft Visual Studio 2005 Unleashed;
Sams - , 2012. - 888 c.
40.
Sara Ford Microsoft Visual Studio Tips; М.: Всероссийское
театральное общество - Москва, 2011. - 272 c.
41.
Гарнаев А. Самоучитель Visual Studio .NET 2003; БХВ-Петербург
- Москва, 2013. - 688 c.
52
42.
Голощапов Алексей Microsoft Visual Studio 2010; БХВ-Петербург
- Москва, 2011. - 544 c.
43.
Левинсон Джефф Тестирование ПО с помощью Visual Studio
2010; ЭКОМ Паблишерз - Москва, 2012. - 314 c.
44.
Понамарев Вячеслав Программирование на C++/C# в Visual
Studio .NET 2003; БХВ-Петербург - Москва, 2013. - 352 c.
45.
Рендольф Ник , Гарднер Дэвид , Минутилло Майкл , Андерсон
Крис Visual Studio 2010 для профессионалов; Диалектика - Москва, 2011. 692 c.
53
ПРИЛОЖЕНИЕ
Листинг формы приложения
а
тем
си
ed
g
an
m
namespace Gauss {
partial class MainForm {
аем
р
и
б
вы
/// <summary>
rivate
p
а
н
ц
и
л
го
/// Required designer variable.
й
еи
н
л
п
о
д
/// </summary>
private System.ComponentModel.IContainer components = null;
скя
о
авл
п
ачл
сн
д
ето
м
/// <summary>
/// Clean up any resources being used.
е
м
и
р
п
а
тем
си
е
и
ан
зд
со
/// </summary>
/// <param name="disposing">true if managed resources should be
disposed; otherwise, false.</param>
х
ы
вац
о
н
и
ч
ви
ко
ар
м
л
ы
см
аш
н
е
и
ан
зд
со
protected override void Dispose(bool disposing) {
х
и
щ
яю
звл
о
п
а
н
ц
и
л
го
ю
н
звед
и
о
р
п
if (disposing && (components != null)) {
rivate
p
components.Dispose();
}
base.Dispose(disposing);
}
# region Windows Form Designer generated code
ь
р
теп
д
ето
м
е
м
и
р
п
е
ы
тр
ко
и
н
ел
д
вы
/// <summary>
/// Required method for Designer support - do not modify
ы
ц
и
атр
м
й
еи
авн
ур
я
есн
р
ад
/// the contents of this method with the code editor.
ьй
л
си
о
авн
р
ы
н
ставл
ед
р
п
al
visu
/// </summary>
54
private void InitializeComponent() {
n
retu
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
д
ето
м
м
ьш
л
о
б
this.выходToolStripMenuItem = new
System.Windows.Forms.ToolStripMenuItem();
я
ен
ж
о
л
и
р
п
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
чесо
акти
р
п
т
яю
звл
о
п
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.layoutMatrixA = new System.Windows.Forms.TableLayoutPanel();
ск
и
о
п
this.layoutVectorX = new System.Windows.Forms.TableLayoutPanel();
й
и
щ
ю
азеш
р
я
звл
о
п
this.layoutVectorB = new System.Windows.Forms.TableLayoutPanel();
й
н
ед
сл
о
п
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.label1 = new System.Windows.Forms.Label();
io
d
stu
sft
icro
m
this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
ы
ен
сл
чи
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
чки
то
s
gau
this.button3 = new System.Windows.Forms.Button();
ть
и
еш
р
this.label2 = new System.Windows.Forms.Label();
х
ы
ей
н
и
л
rivate
p
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
о
авн
р
this.label5 = new System.Windows.Forms.Label();
ева
сл
rivate
p
this.menuStrip1.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
стью
о
ен
азм
р
this.flowLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit()
;
55
this.SuspendLayout();
м
и
ел
азд
р
тн
и
кал
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new
System.Windows.Forms.ToolStripItem[] {
сты
и
гам
о
р
п
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
е
такж
и
ан
п
м
ко
this.menuStrip1.Size = new System.Drawing.Size(569, 24);
тем
си
this.menuStrip1.TabIndex = 0;
this.menuStrip1.Text = "menuStrip1";
а
п
о
кн
т
еващ
р
п
//
// выходToolStripMenuItem
//
this.выходToolStripMenuItem.Name = "выходToolStripMenuItem";
егко
this.выходToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
els
о
ахвл
б
this.выходToolStripMenuItem.Text = "Выход";
е
и
сб
о
п
this.выходToolStripMenuItem.Click += new
System.EventHandler(this.выходToolStripMenuItem_Click);
//
// statusStrip1
ая
н
м
ер
п
к
язы
//
this.statusStrip1.Location = new System.Drawing.Point(0, 253);
io
d
stu
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(569, 22);
а
тем
си
а
п
о
кн
56
this.statusStrip1.TabIndex = 1;
й
еи
авн
ур
this.statusStrip1.Text = "statusStrip1";
//
// tableLayoutPanel1
s
o
d
in
w
й
и
щ
ю
азеш
р
//
this.tableLayoutPanel1.ColumnCount = 4;
this.tableLayoutPanel1.ColumnStyles.Add(new
System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent,
67.30769F));
rivate
p
this.tableLayoutPanel1.ColumnStyles.Add(new
System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent,
9.615385F));
io
d
stu
rivate
p
this.tableLayoutPanel1.ColumnStyles.Add(new
System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent,
9.615385F));
rix
tm
u
layo
this.tableLayoutPanel1.ColumnStyles.Add(new
System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent,
13.46154F));
rivate
p
ы
д
ето
м
this.tableLayoutPanel1.Controls.Add(this.layoutMatrixA, 0, 2);
аш
н
this.tableLayoutPanel1.Controls.Add(this.layoutVectorX, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.layoutVectorB, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 0);
т
вед
и
р
п
тк
о
азб
р
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.label3, 1, 1);
ст
о
р
п
this.tableLayoutPanel1.Controls.Add(this.label4, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.label5, 3, 1);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
авя
д
схем
57
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 24);
le
b
u
o
d
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 3;
вн
о
усл
е
ы
ан
д
this.tableLayoutPanel1.RowStyles.Add(new
System.Windows.Forms.RowStyle());
й
и
щ
б
о
this.tableLayoutPanel1.RowStyles.Add(new
System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new
System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent,
100F));
ева
сл
та
й
сво
this.tableLayoutPanel1.Size = new System.Drawing.Size(569, 229);
р
векто
this.tableLayoutPanel1.TabIndex = 2;
л
и
ж
о
н
ум
скя
о
авл
п
//
// layoutMatrixA
//
this.layoutMatrixA.ColumnCount = 1;
е
яти
н
о
п
this.layoutMatrixA.ColumnStyles.Add(new
System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent,
50F));
сть
о
ен
азм
р
к
о
сун
и
р
this.layoutMatrixA.Dock = System.Windows.Forms.DockStyle.Fill;
this.layoutMatrixA.Location = new System.Drawing.Point(3, 51);
ч
еви
р
о
б
this.layoutMatrixA.Name = "layoutMatrixA";
rivate
p
lic
b
u
p
this.layoutMatrixA.RowCount = 1;
this.layoutMatrixA.RowStyles.Add(new
System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent,
50F));
ен
р
о
акл
м
this.layoutMatrixA.Size = new System.Drawing.Size(376, 175);
е
и
сб
о
п
tvecrx
u
layo
58
this.layoutMatrixA.TabIndex = 0;
чки
то
//
// layoutVectorX
//
this.layoutVectorX.CausesValidation = false;
ч
ги
о
л
ан
size
this.layoutVectorX.ColumnCount = 1;
this.layoutVectorX.ColumnStyles.Add(new
System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent,
50F));
м
и
ван
о
еб
тр
this.layoutVectorX.Dock = System.Windows.Forms.DockStyle.Fill;
о
н
учеб
ы
ен
сл
чи
this.layoutVectorX.Location = new System.Drawing.Point(439, 51);
l
u
n
this.layoutVectorX.Name = "layoutVectorX";
this.layoutVectorX.RowCount = 1;
ты
ен
ц
и
эф
ко
rivate
p
this.layoutVectorX.RowStyles.Add(new
System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent,
50F));
д
ето
м
this.layoutVectorX.Size = new System.Drawing.Size(48, 175);
ц
и
атр
м
еьго
тр
this.layoutVectorX.TabIndex = 1;
//
// layoutVectorB
ать
еш
р
//
this.layoutVectorB.ColumnCount = 1;
this.layoutVectorB.ColumnStyles.Add(new
System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent,
50F));
size
р
векто
this.layoutVectorB.Dock = System.Windows.Forms.DockStyle.Fill;
jav
59
this.layoutVectorB.Location = new System.Drawing.Point(385, 51);
ц
и
атр
м
а
тем
си
this.layoutVectorB.Name = "layoutVectorB";
this.layoutVectorB.RowCount = 1;
й
ы
чн
и
атр
м
this.layoutVectorB.RowStyles.Add(new
System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F
));
я
ю
ащ
р
б
о
вем
азо
н
this.layoutVectorB.Size = new System.Drawing.Size(48, 175);
и
ен
авл
б
о
д
this.layoutVectorB.TabIndex = 2;
//
// flowLayoutPanel1
ки
о
стр
c
esp
am
n
//
this.flowLayoutPanel1.AutoSize = true;
this.tableLayoutPanel1.SetColumnSpan(this.flowLayoutPanel1, 4);
кн
о
this.flowLayoutPanel1.Controls.Add(this.label1);
this.flowLayoutPanel1.Controls.Add(this.numericUpDown1);
this.flowLayoutPanel1.Controls.Add(this.button1);
г
н
и
хем
чки
то
this.flowLayoutPanel1.Controls.Add(this.button2);
this.flowLayoutPanel1.Controls.Add(this.button3);
ьй
л
си
о
авн
р
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 3);
и
н
еш
р
l
u
n
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
тс
ю
явл
this.flowLayoutPanel1.Size = new System.Drawing.Size(563, 29);
this.flowLayoutPanel1.TabIndex = 4;
та
й
сво
sft
icro
m
//
// label1
60
//
this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left;
акто
ед
р
this.label1.AutoSize = true;
й
чн
б
о
п
ак
н
д
о
this.label1.Location = new System.Drawing.Point(3, 8);
this.label1.Name = "label1";
я
ви
о
стан
this.label1.Size = new System.Drawing.Size(75, 13);
ау
сл
ы
н
ставл
ед
р
п
this.label1.TabIndex = 0;
this.label1.Text = "Размерность";
е
такж
//
// numericUpDown1
//
this.numericUpDown1.Anchor = System.Windows.Forms.AnchorStyles.Left;
х
и
ан
р
ву
сн
о
this.numericUpDown1.Location = new System.Drawing.Point(84, 4);
е
м
и
р
п
this.numericUpDown1.Maximum = new decimal(new int[] {
затем
м
о
д
каж
15,
0,
0,
0});
this.numericUpDown1.Minimum = new decimal(new int[] {
й
н
л
о
п
1,
0,
0,
0});
this.numericUpDown1.Name = "numericUpDown1";
х
ы
ям
р
п
n
verio
b
su
61
this.numericUpDown1.Size = new System.Drawing.Size(87, 20);
this.numericUpDown1.TabIndex = 1;
и
чл
вы
this.numericUpDown1.Value = new decimal(new int[] {
усть
п
й
о
ан
д
3,
0,
0,
0});
this.numericUpDown1.ValueChanged += new
System.EventHandler(this.numericUpDown1_ValueChanged);
ы
ен
сл
чи
//
// button2
//
this.button2.Anchor = System.Windows.Forms.AnchorStyles.Left;
rivate
p
ть
и
еш
р
this.button2.Location = new System.Drawing.Point(177, 3);
this.button2.Name = "button2";
и
чл
вы
this.button2.Size = new System.Drawing.Size(116, 23);
id
u
req
о
авн
р
this.button2.TabIndex = 3;
this.button2.Text = "<-Предыд.итерация";
ы
ен
сл
чи
this.button2.UseVisualStyleBackColor = true;
rivate
p
твеи
со
//
// button3
//
this.button3.Anchor = System.Windows.Forms.AnchorStyles.Left;
аем
р
и
б
вы
this.button3.Location = new System.Drawing.Point(299, 3);
this.button3.Name = "button3";
ты
ен
ц
и
эф
ко
х
сы
и
ап
н
62
this.button3.Size = new System.Drawing.Size(116, 23);
е
ц
и
атр
м
this.button3.TabIndex = 4;
this.button3.Text = "След.итерация ->";
ьй
л
си
о
авн
р
х
ы
ям
р
п
this.button3.UseVisualStyleBackColor = true;
id
u
req
//
// button1
//
this.button1.Anchor = System.Windows.Forms.AnchorStyles.Left;
т
сф
о
кр
ай
м
ческм
и
аф
гр
this.button1.Location = new System.Drawing.Point(421, 3);
tes
n
co
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
g
sin
u
ем
ш
и
ап
this.button1.TabIndex = 2;
this.button1.Text = "Решить";
и
чл
вы
this.button1.UseVisualStyleBackColor = true;
сты
и
гам
о
р
п
at
p
m
co
this.button1.Click += new System.EventHandler(this.button1_Click);
ч
еви
р
о
б
//
// label2
//
this.label2.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
е
м
и
р
п
й
о
ьн
кал
узы
м
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(184, 35);
уг
б
етр
п
this.label2.Name = "label2";
учается
л
о
п
в
ш
и
м
екл
б
this.label2.Size = new System.Drawing.Size(14, 13);
rivate
p
this.label2.TabIndex = 5;
63
this.label2.Text = "A";
//
// label3
м
р
о
атф
л
п
al
visu
//
this.label3.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
this.label3.AutoSize = true;
s
gau
this.label3.Location = new System.Drawing.Point(402, 35);
е
м
о
кр
ен
ж
о
л
и
р
п
this.label3.Name = "label3";
tecd
ro
p
this.label3.Size = new System.Drawing.Size(14, 13);
this.label3.TabIndex = 6;
rivate
p
тс
ю
явл
this.label3.Text = "B";
this.label3.Click += new System.EventHandler(this.label3_Click);
ки
чер
о
//
// label4
//
this.label4.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
rivate
p
г
ьн
ал
м
ти
п
о
this.label4.AutoSize = true;
атк
р
б
о
this.label4.Location = new System.Drawing.Point(456, 35);
this.label4.Name = "label4";
еьго
тр
к
о
стр
this.label4.Size = new System.Drawing.Size(14, 13);
чесо
акти
р
п
this.label4.TabIndex = 7;
this.label4.Text = "X";
//
// label5
й
о
ен
и
асш
р
ч
ги
о
л
ан
64
//
this.label5.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
а
л
ы
б
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(522, 35);
rivate
p
м
н
д
о
р
this.label5.Name = "label5";
ь
л
си
о
авн
р
this.label5.Size = new System.Drawing.Size(15, 13);
this.label5.TabIndex = 8;
г
стн
и
л
ть
учи
л
о
п
this.label5.Text = "U";
//
// MainForm
lic
b
u
p
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
и
н
еш
р
я
ачи
н
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(569, 275);
учае
сл
this.Controls.Add(this.tableLayoutPanel1);
le
b
u
o
d
т
учаю
л
о
п
this.Controls.Add(this.statusStrip1);
this.Controls.Add(this.menuStrip1);
ц
и
атр
м
this.MainMenuStrip = this.menuStrip1;
this.Name = "MainForm";
ath
m
у
ем
ставш
this.StartPosition =
System.Windows.Forms.FormStartPosition.CenterScreen;
я
и
азвн
б
ео
р
п
this.Text = "Решение СЛАУ методом Гаусса";
у
тм
о
п
е
р
вто
н
л
кап
this.Load += new System.EventHandler(this.MainForm_Load);
чесо
акти
р
п
w
ro
th
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
65
this.tableLayoutPanel1.ResumeLayout(false);
еи
авн
ур
this.tableLayoutPanel1.PerformLayout();
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
ч
ги
о
л
ан
ая
р
вто
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
this.ResumeLayout(false);
ева
сл
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip menuStrip1;
ью
щ
м
о
п
х
ы
ей
н
и
л
private System.Windows.Forms.StatusStrip statusStrip1;
ы
тем
си
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
я
еи
авн
ур
яе
тавл
со
а
п
о
кн
private System.Windows.Forms.TableLayoutPanel layoutMatrixA;
le
b
u
o
d
ы
тем
си
private System.Windows.Forms.TableLayoutPanel layoutVectorX;
и
ан
п
м
ко
private System.Windows.Forms.TableLayoutPanel layoutVectorB;
н
л
кап
я
ен
ж
о
л
и
р
п
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
тем
си
private System.Windows.Forms.Label label1;
г
н
и
хем
л
и
ж
о
н
ум
private System.Windows.Forms.NumericUpDown numericUpDown1;
й
и
щ
ю
азеш
р
private System.Windows.Forms.Button button1;
is
th
усть
п
private System.Windows.Forms.Label label2;
м
это
private System.Windows.Forms.Label label3;
вая
ер
п
к
о
стр
private System.Windows.Forms.Label label4;
rivate
p
private System.Windows.Forms.ToolStripMenuItem
выходToolStripMenuItem;
rivate
p
rivate
p
к
вщ
л
и
ф
о
р
п
66
private System.Windows.Forms.Button button2;
г
это
ки
чер
о
private System.Windows.Forms.Button button3;
rivate
p
private System.Windows.Forms.Label label5;
у
еб
тр
ты
н
ем
}
}
Листинг программы, реализующей модифицированный метод Гаусса
м
учи
л
о
п
ва
чен
п
ко
р
векто
using System;
using System.Collections;
using System.Data;
rivate
p
rivate
p
чак
тур
namespace Gauss {
public class GaussSolutionNotFound : Exception {
public GaussSolutionNotFound(string msg)
: base("Решение не может быть найдено: \r\n" +
msg) {
}
}
й
о
ям
р
п
е
н
л
о
п
вы
s
gau
вн
о
усл
ы
н
аги
л
п
ть
и
еш
р
n
retu
ы
н
ставл
ед
р
п
вем
азо
н
public class LinearSystem {
private double[,] initial_a_matrix;
private double[,] a_matrix; // матрица A
private double[] x_vector;
// вектор неизвестных x
private double[] initial_b_vector;
private double[] b_vector;
// вектор b
w
ro
th
ак
н
д
о
al
visu
й
и
щ
ю
азеш
р
ву
сн
о
ем
ш
и
зап
р
векто
le
b
u
o
d
й
н
ед
сл
о
п
р
ф
ей
п
тк
о
азб
р
ем
д
ай
н
public LinearSystem(double[,] a_matrix, double[]
b_vector)
: this(a_matrix, b_vector, 0.1) {
}
public LinearSystem(double[,] a_matrix, double[]
b_vector) {
if (a_matrix == null || b_vector == null)
throw new ArgumentNullException("Один из
параметров равен null.");
егко
тав
со
ьта
езул
р
й
и
щ
ю
азеш
р
е
и
сб
о
п
is
th
rivate
p
ку
о
стр
ь
л
си
о
авн
р
earsytm
lin
ью
щ
м
о
п
size
lic
b
u
p
int b_length = b_vector.Length;
int a_length = a_matrix.Length;
if (a_length != b_length * b_length)
ак
н
д
о
х
звсты
еи
н
еьн
л
ар
п
о
ты
н
ем
тя
и
л
ед
р
п
о
67
throw new ArgumentException(@"Количество
строк и столбцов в матрице A должно совпадать с количеством
элементров в векторе B.");
rivate
p
this.initial_a_matrix = a_matrix; // запоминаем
исходную матрицу
this.a_matrix = (double[,])a_matrix.Clone(); //
с её копией будем производить вычисления
this.initial_b_vector = b_vector; // запоминаем
исходный вектор
this.b_vector = (double[])b_vector.Clone(); //
с его копией будем производить вычисления
this.x_vector = new double[b_length];
this.size = b_length;
GaussSolve();
}
public double[] XVector {
get {
return x_vector;
}
}
// инициализация массива индексов столбцов
private int[] InitIndex() {
int[] index = new int[size];
for (int i = 0; i < index.Length; ++i)
index[i] = i;
return index;
}
// поиск главного элемента в матрице
private double FindR(int row, int[] index) {
int max_index = row;
double max = a_matrix[row, index[max_index]];
double max_abs = Math.Abs(max);
//if(row < size - 1)
for (int cur_index = row + 1; cur_index < size;
++cur_index) {
double cur = a_matrix[row,
index[cur_index]];
double cur_abs = Math.Abs(cur);
68
if (cur_abs > max_abs) {
max_index = cur_index;
max = cur;
max_abs = cur_abs;
}
}
if (max_abs < eps) {
if (Math.Abs(b_vector[row]) > eps)
throw new GaussSolutionNotFound("Система
уравнений несовместна.");
else
throw new GaussSolutionNotFound("Система
уравнений имеет множество решений.");
}
// меняем местами индексы столбцов
int temp = index[row];
index[row] = index[max_index];
index[max_index] = temp;
return max;
}
// Нахождение решения СЛАУ методом Гаусса
private void GaussSolve() {
int[] index = InitIndex();
GaussForwardStroke(index);
}
private void GaussForwardStroke(int[] index) {
// перемещаемся по диагонали
for (int i = 0; i < size; ++i) {
// 1) выбор главного элемента
double r = FindR(i, index);
// 2) преобразование матрицы A
for (int j = 0; j < size; ++j)
a_matrix[k, l] =
a_matrix[k,l]*a_matrix[I,j]-a_matrix[k,j]*a_matrix[i,l];
for (int k = i + 1; k < size; ++k) {
for (int j = i; j < size; ++j)
69
a_matrix[k, index[i]] = 0.0;
}
}
}
// 3) поиск решения
for (int j = i + 1; j < size; ++j)
x_i = b_matrix[k,l]/a_matrix[k,l];
x_vector[index[i]] = x_i;
}
}
70
Магистерская
диссертация
выполнена
мной
совершенно
самостоятельно. Все использованные в работе материалы и концепции из
опубликованной научной литературы имеют ссылки на них.
01.06.2017 г.
______________
Сухомлинов А.Д.
(подпись)
71
Отзывы:
Авторизуйтесь, чтобы оставить отзыв