Программная реализация решения задачи




 

; ROW_COL - КОЛИЧЕСТВО СТРОК И СТОЛБЦОВ МАТРИЦЫ

( SETQ ROW_COL 0)

(SETQ INPUT (OPEN " D: \MATRIX. TXT": DIRECTION: INPUT))

(SETF ROW_COL (READ INPUT))

; MATRIX - МАТРИЦА ДЛЯ ВЫЧИСЛЕНИЯ

( SETQ MATRIX (MAKE-ARRAY (LIST ROW_COL ROW_COL): ELEMENT-TYPE 'INTEGER: INITIAL-ELEMENT 0))

(SETF MATRIX (READ INPUT))

; ПОЛУЧАЕМ СВОБОДНЫЕ ЧЛЕНЫ

( SETQ B (MAKE-ARRAY ROW_COL: ELEMENT-TYPE 'INTEGER: INITIAL-ELEMENT 0))

; ПОЛУЧАЕМ МАТРИЦУ

( SETQ B (READ INPUT))

(CLOSE INPUT)

(DEFUN METHOD_GAUS (MATRIX ARRAY_B R_C)

; ОБЪЯВЛЛЯЕМ ПЕРЕМЕННЫЕ

; ИТЕРАТОРЫ

( DECLARE (SPECIAL I))

(DECLARE (SPECIAL J))

(DECLARE (SPECIAL A))

(DECLARE (SPECIAL B))

(DECLARE (SPECIAL X))

; ВРЕМЕННАЯ ПЕРЕМЕННАЯ

( DECLARE (SPECIAL NUMB))

; A - ВРЕМЕННАЯ МАТРИЦА

( SETQ A (MAKE-ARRAY (LIST R_C R_C): ELEMENT-TYPE 'INTEGER: INITIAL-ELEMENT 0))

(SETF A MATRIX)

; В - МАТРИЦА СВОБОДНЫХ ЧЛЕНОВ

( SETQ B (MAKE-ARRAY R_C: ELEMENT-TYPE 'INTEGER: INITIAL-ELEMENT 0))

(SETF B ARRAY_B)

; X - МАССИВ РЕШЕНИЙ

( SETQ X (MAKE-ARRAY R_C: ELEMENT-TYPE 'INTEGER: INITIAL-ELEMENT 0))

; ВЫПОЛНЯЕМ ПРЕОБРАЗОВАНИЯ СТРОК

( DO

((P 0))

((>= P (- R_C 1)))

(DO

((I (+ P 1)))

((>= I R_C))

(SETQ NUMB (/ (AREF A I P) (AREF A P P)))

(DO

((J P))

((>= J R_C))

(SETF (AREF A I J) (- (AREF A I J) (* (AREF A P J) NUMB)))

(SETQ J (+ J 1))

)

(SETF (AREF B 0 I) (- (AREF B 0 I) (* (AREF B 0 P) NUMB)))

(SETQ I (+ I 1))

)

(SETQ P (+ P 1))

)

(SETF (AREF X (- R_C 1)) (FLOAT (/ (AREF B 0 (- R_C 1)) (AREF A (- R_C 1) (- R_C 1)))))

; ПОЛУЧИЛИ СТУПЕНЧАТУЮ МАТРИЦУ

; НАХОДИМ X

( DO

((I (- R_C 2)))

((< I 0))

(SETQ NUMB 0)

(DO

((J (+ I 1)))

((>= J R_C) X)

(SETQ NUMB (+ NUMB (* (AREF A I J) (AREF X J))))

(SETQ J (+ J 1))

)

(SETF (AREF X I) (FLOAT (/ (- (AREF B 0 I) NUMB) (AREF A I I))))

(SETQ I (- I 1))

)

X

)

; ПРИМЕНЯЕМ МЕТОД ГАУССА ДЛЯ ЗАДАННОЙ МАТРИЦЫ

( METHOD_GAUS MATRIX B ROW_COL)

; ФУНКЦИЯ ВЫВОД МАССИВА X

( DEFUN PRINT_RES (MATR_X LEN)

(DO

((I 0))

((>= I LEN))

(PRINT (LIST 'X I '= (AREF MATR_X I)) OUTPUT)

(SETQ I (+ I 1))

)

)

; ВЫВОД МАССИВА X В ФАЙЛ

( SETQ OUTPUT (OPEN " D: \RESULT. TXT": DIRECTION: OUTPUT))

(PRINT_RES X ROW_COL)

(TERPRI OUTPUT)

(CLOSE OUTPUT)


Пример выполнения программы

 

Пример 1.

 

Рисунок 3 - Входные данные

 

Рисунок 4 - Выходные данные

 

Пример 2.

 

Рисунок 5 - Входные данные

 

Рисунок 6 - Выходные данные

 

Пример 3.

 

Рисунок 7 - Входные данные

 

Рисунок 8 - Выходные данные

 


Заключение

 

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

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


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

 

1. Васильев Ф.П. Численные методы решения экстремальных задач. [Текст] / Ф.П. Васильев - М.: Наука, 2002. C.415.

2. Калиткин Н.Н. Численные методы. [Электронный ресурс] / Н.Н. Калиткин. - М.: Питер, 2001. С.504.

3. Кнут Д.Э. Искусство программирования. Основные алгоритмы [Текст] / Д.Э. Кнут. - М.: Вильямс, 2007. Т.1. - 712 с.

4. Метод Гаусса [Электронный ресурс] - Режим доступа: https://www.wikipedia.org/wiki/Метод_Гаусса.

5. Степанов П.А. Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А. Степанов, А.В. Бржезовский. - М.: ГУАП, 2003. С.79.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: