Разработка специализированного программного модуля

     Содержание

     Введение………………………………………………………………………4

  1. Постановка задачи………………………………………………………….5
  2. Математическое описание задачи…………………………………………6
 
     
  1. Математическое  описание метода Гаусса………………………………6
  2. Математическое описание метода итераций……………………………9
 
     
  1. Разработка  схемы алгоритма……………………………………………...10
  2. Описание входной и выходной информации……………………………15
  3. Разработка и описание программы……………………………………….16

     6 Расчет решения задания и анализ полученных результатов …………..17

     Заключение…………………………………………………………………..19

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

     Приложение  А………………………………………………………………..21 

Введение

     Данная  курсовая работа выполняется на тему «Разработка специализированного программного модуля». Целью курсовой работы является приобретение навыков программирования на языке программирования Си посредством написания программного модуля, реализующего решение системы линейных уравнений различными методами. В ходе выполнения курсовой работы будет выполнено математическое описание задачи, разработка схемы алгоритма решения поставленной задачи, а также произведен расчет контрольного примера на ЭВМ и анализ полученных результатов. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

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

     а)          7.9x1+5.6x2+5.7x3-7.2x4=6.68,

           5.8x1-4.8x2+0.8x3+3.5x4=9.95,             (1)

          5.3x1+4.2x2-3.2x3+9.3x4=8.60,

          3.2x1-1.4x2-8.9x3+3.3x4=1.00; 

     б)          6x1-x2-x3=11.33,

                   -x1-x2-6x3=32,                                   (2)

                   -x1-x2-6x3=42 
 

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

     2 Математическое описание задачи

     Для решения СЛАУ применяют в основном два класса методов:

  • прямые;
  • итерационные.

     Прямые   методы   являются   универсальными   и   применяются   для решения систем сравнительно невысокого порядка. Итерационные методы Выгодно использовать для СЛАУ высокого порядка со слабо заполненными матрицами.

     2.1 Математическое описание метода Гаусса

     Метод Гаусса относится к прямым методам. Алгоритм метода состоит 
из двух этапов. Первый этап называется прямым ходом метода и заключается 
в последовательном исключении неизвестных из уравнений, начиная с х1 
Уравнение, с помощью которого преобразуют остальные уравнения, 
называют разрешающим уравнением, а коэффициент аij этого уравнения при 
неизвестном xi, исключаемом из остальных уравнений системы.

     Метод Гаусса основывается на следующих утверждениях.

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

  • перестановка уравнений;
  • умножение уравнения на любое число, отличное от нуля;
  • прибавление одного уравнения, умноженного на любое число, 
    к другому уравнению,

     являются  эквивалентными, т.е. имеют одни и те же решения.

  1. Преобразованиям уравнений системы соответствуют элементарные
 

     преобразования  строк расширенной матрицы системы:

  • перестановка строк;
  • умножение всех элементов строки на любое число, отличное от 
    нуля;
  • прибавление элементов одной строки, умноженных на одно и то же 
    число, к соответствующим элементам другой строки.

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

     Матрицы А и В, полученные одна из другой с помощью элементарных преобразований строк, называются эквивалентными, что обозначается А - В. Чтобы решить систему n уравнений с n неизвестными, необходимо расширенную матрицу системы с помощью элементарных преобразований строк привести к такому виду, чтобы основная матрица системы (стоящая слева от черты) была приведена к треугольной форме, тогда на месте столбца свободных членов (справа от черты) окажется решение системы:

     Пусть дана система n линейных алгебраических уравнений с n неизвестными: 

     a11x1+a12x2 +…+a1nxn=b1,

     a21x1+a22x2 +…+a2nxn=b2,

                         …                                           (3)

     an1x1+an2x 2+…+annxn=bn, 

     Решением  системы (3) называют упорядоченное множество чисел (ε1, ε2,... εn ), если x1=ε1 х2=ε2, ..., хn=εn превращает уравнения в системе (3) в равенства. Решение системы представляет собой n-мерный вектор, который обозначим через ε.

     Рассмотрим  общую схему Гаусса для систем, имеющих единственное решение. Пусть а11≠0. В противном случае можно поменять местами первое уравнение с уравнением, в котором коэффициент отличен от нуля. Разделим первое уравнение системы (2) на а11. Оно примет вид:

          x1+a12(1)x2+a13(1)x3+…+a1n(1)xn=b1(1),

         где aij(1)=aij/a11, b1(1)=b1/a11.                                  (4) 

     Умножим уравнение (4) на а21 и вычтем полученное уравнение из второго уравнения системы (3). Аналогично преобразовываются остальные уравнения. В результате система запишется следующим образом:

     x1+ a12(1) x2+a13(1) x3 +…+a1n(1) xn=b1(1),

            a22(1) x2+a23(1) x3 +…+a2n(1) xn=b2(1),

                                  …                                                   (5)         

            an2(1) x2+an3(1) x3+…+ann(1) xn=bn(1), 

     где a2j(1)=a2j - a1j(1)a21; a3j(1)=a3j - a1j(1)a31, anj(1)=anj - a1j(1)an1; bj(1)=bj-b1(1)aj1 (j=2,3,…,n)

     Если  какой-либо из коэффициентов aj1=0, то j-oe уравнение системы (3) войдет в систему (5) без изменений, то есть акj(1)= akj, bj(1)=bj (k=2,3,..,n).

     Оставив без изменений первое уравнение системы (5), сделаем второе 
уравнение разрешающими, применим описанную процедуру к системе из (n-1)   уравнений,   исключив   неизвестную переменную x2 из третьего   и последующих уравнений. Получаем систему вида:
 

     x1+ a12(1) x2+a13(1) x3 +…+a1n(1) xn=b1(1),

                   x2+a23(2) x3 +…+a2n(2) xn=b2(2),

                         a33(1) x3 +…+a3n(1) xn=b3(1),                         (6)

                                  …                                         

            an2(1) x2+an3(1) x3+…+ann(1) xn=bn(1), 

     где a2j(1) = a2j – a2ja22(1); a3j(2) = a3j(2) – a2j(2)a32(1),…, anj(2) = anj(1) – anj(2)an2(1); bj(2) = bj(1)-b2(2)aj2(1) (j=2,3,…,n)

     Продолжив   аналогичные   вычисления,   приведем   систему   (3)   к эквивалентной системе: 

     x1+ a12(1) x2+a13(1) x3 +…+a1n(1) xn=b1(1),

                   x2+a23(2) x3 +…+a2n(2) xn=b2(2),

                                x3 +…+a3n(3) xn=b3(3),                         (7)

                                            …                                         

                                                       xn=bn(n),

     в которой матрица из коэффициентов  имеет треугольный вид.

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

     При обратном ходе происходит последовательное исключение неизвестных хn, начиная с (n-l)-oro уравнения и заканчивая первым. Получаем:

     x1+ a12(1) x2+a13(1) x3 +…+a1n-1(1) xn-1=b1(1,1),

                   x2+a23(2) x3 +…+a2n-1(2) xn-1=b2(2,1),

                                 x3 +…+a3n-1(3) xn-1=b3(3,1),                         (8)

                                                        …        

                                                       xn-1=bn-1(n-1,1),

                                                       xn=bn(n).

     Исключая  неизвестные x(n-2) из уравнения с номером j (j=n-2,...l), вычисления заканчиваются решением системы, имеющей вид:

     x1=b1(1,n-1),

        …

     xn-j=bn-j(n-j,j),

        …                                                (9)

     xn-2 =bn-2(n-2,2),                        

     xn-1=bn-1(n-1,1),

     xn=bn(n). 

     Процесс прямого хода метода Гаусса может  привести не к треугольной матрице, а к двум другим случаям:

  • число     преобразованных    уравнений     системы     меньше    числа 
    неизвестных, тогда система имеет бесконечное множество решений;
  • все коэффициенты при неизвестных в каком-либо уравнении равны
 

     нулю, а свободные члены уравнения  отличны от нуля, в этом случае

     система не имеет решений. 
 

2.2 Математическое описание решения СЛАУ методом итераций

     Пусть  дана  система  n  линейных  алгебраических  уравнений  с  n неизвестными:

     a11x1+a12x2+…+a1n xn=b1,

     a21x1+a22x2+…+a2n xn=b2,                   (10)

                      …

     an1x1+an2x2+…+ann xn=bn,

     Для решения СЛАУ итерационными методами преобразуем систему от формы (8) к виду: 

     x1 = (a1,n+1-a11x1-a12x2-…-a1nxn)/a11+x1,

     x2 = (a2,n+1-a21x1-a22x2-…-a2nxn)/a22+x2,

                         …                                                     (11)

     xn = (an,n+1-an1x1-an2x2-…-annxn)/ann+xn;

     Задав столбец начальных приближений х10, х20,..., хn°, подставим их в правые части системы (11) и вычислим новые приближения х11, х21..., хn1 которые опять подставим в систему (11) и т.д. Таким образом, организуется итерационный процесс, являющийся обобщением метода простых итераций на системы уравнений: 

     x1(m+1) = φ1(x1(m),x2(m),…,xn(m)),

     x2(m+1) = φ2(x1(m),x2(m),…,xn(m)),

                        …

     xn(m+1) = φn(x1(m),x2(m),…,xn(m)); 

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

     Итерационный процесс заканчивается, когда выполнятся условие:

 
     | xk (m+1)-xk(m) |<ε.                                             (12) 

     где ε - заданная погрешность; k=l,2,..,n. 
 
 
 
 

     3 Разработка алгоритма 

     Опишем  блок-схемы алгоритмов каждой функции. На рисунке 1 представлена блок-схема функции main() – главной функции программы. 
 

     Рисунок 1 – блок – схема алгоритма функции main() 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     На  рисунке 2 представлена блок-схема функции vvod() ввода исходных данных при решении системы.

     

Рисунок 2 – блок – схема алгоритма функции vvod()

     По  данной блок – схеме сначала надо ввести количество переменных t, а затем элементы матрицы a[t][t+1], составленной из коэффициентов при неизвестных и свободных членов уравнений. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     На  рисунке 3 представлена блок-схема функции iteracia(), организующая решение системы методом итерации.

     

Рисунок 3 – блок – схема алгоритма функции iteracia() 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     На  рисунке 4 представлена блок-схема функции gauss(), организующая решение системы методом Гаусса. 

Рисунок 4 – блок – схема алгоритма  функции gauss()

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

(n-1)-ого уравнения и заканчивая первым. 

     На  рисунке 5 представлена блок-схема функции vivod(), организующая вывод решения на экран.

Рисунок 5 – блок – схема алгоритма функции vivod()

Данная  функция организует вывод результатов на экран.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

4 Описание входной  и выходной информации 

     Входной информацией для решения СЛАУ является количество переменных.

     Количество  переменных вводится с клавиатуры и может принимать целые значения, кроме 0 и 1. Количество переменных  описывается с помощью переменной t, которая имеет тип integer – целые значения.

     Коэффициенты  а[t][t+1] вводятся с клавиатуры в следующем порядке: вводятся коэффициенты при неизвестных в первом уравнении системы, вводится свободный член первого уравнения, далее ввод повторяется для элементов второго уравнения и т.д.

     Элементы  матрицы А являются коэффициентами при неизвестных в уравнениях системы. Переменные a[t][t+1] имеют тип float – значения с плавающей точкой, и могут принимать любые значения. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     5 Разработка и описание программы  

     Программа реализует поиск решений системы уравнений, реализована на языке Си.

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

     Описание  разработанных функций:

     void vvod() – функция, предназначена для ввода значений с клавиатуры, функция не возвращает никаких значений.

     void iteracia () – функция, предназначена для решения системы методом итерации.

     void gauss () – функция, предназначена для решения системы методом Гаусса

     void vivod () - функция, предназначена для вывода результатов на экран.

     void main (void) – главная функция, в которой происходит обращение к функциям void vvod(),void iteracia (),void gauss (),void vivod (). Таким образом, основные функции программы, оформлены виде логически законченных структурных единиц, которые можно вызывать в любом месте программы.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     6 Расчет решения задания и анализ полученных результатов 

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

           7.9x1+5.6x2+5.7x3-7.2x4=6.68,

           5.8x1-4.8x2+0.8x3+3.5x4=9.95,            

           5.3x1+4.2x2-3.2x3+9.3x4=8.60,

           3.2x1-1.4x2-8.9x3+3.3x4=1.00;

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

     7.9 5.6 5.7 -7.2  6.68

     8.5 -4.8 0.8 3.5  9.95

     4.3 4.2 -3.2 9.3  8.60

     3.2  -1.4  -8.9  3.3  1.00

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

     x1=0.967100,

     x2=0.124800,

     x3=0.426300,

     x4=0.567900.

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

     7.9·0.967100+5.6·0.124800+5.7·0.426300-7.2·0.567900=6.68,

     8.5·0.967100-4.8·0.124800+0.8·0.426300+3.5·0.567900=9.95,

     4.3·0.967100+4.2·0.124800-3.2·0.426300+9.3·0.567900=8.6,

     3.2·0.967100-1.4·0.124800-8.9·0.426300+3.3·0.567900=1.00;

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

     Решим следующую систему уравнений методом итерации: 

              6x1-x2-x3=11.33,

               -x1-x2-6x3=32,                                  

              -x1-x2-6x3=42;

     Для этого запускаем программу и  нажимаем 2. Потом вводим необходимое число переменных в системе (в нашем случае 3).

     6  -1  -1  11,33

     -1  6  -1 32

     -1  -1  6  42

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

     x1=4.665224,

     x2=7.618504,

     x3=9.047288;

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

     6·4.665224-7.618504-9.04228=11.33,

     -4.665224+6·7.618504-9.047288=32,

     -4.665224-7.6185504+6·9.04228=42.

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

     Заключение 

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

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

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

     1. Гурский В.Е. Руководство к решению задач по высшей математике. – Мн.: Высш. шк, 1998г.

     2. Романовская Л.М. Программирование в среде Си для ПЭВМ ЕС/ Л.М.Романовская, Т.В.Русс, С.Г.Свитковский. - М.: Финансы и статистика,1991.-352 с.

     3. Скляров В.А. Программное и лингвистическое обеспечение персональных ЭВМ. Системы общего назначения: Справ. пособие. – Мн.: Выш. шк., 1992. – 426 с.: ил.

     4. Мудров А.Е. Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. – Томск: МП “РАСКО”, 1991. – 227 с. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     Приложение  А

     (обязательное)

Разработка специализированного программного модуля