Рисунок 1 – Блок-схема решения задачи для функции GAUSS
\
4 Программная реализация решения задачи
ФУНКЦИЯ ПОИСКА МАКСИМАЛЬНОГО ЭЛЕМЕНТА И ПЕРЕСТАНОВКИ СТРОК И СТОЛБЦОВ
(DEFUNGLAV_EL (K MATRIX N X)
(DECLARE (SPECIAL I_MAX))
(DECLARE (SPECIAL J_MAX))
(DECLARE (SPECIAL TEMP))
(DECLARE (SPECIAL I))
(SETQ I_MAX K)
(SETQ J_MAX K)
;ИЩЕМ МАКСИМАЛЬНЫЙ ПО МОДУЛЮ ЭЛЕМЕНТ
(DO
((I K))
((>= I N))
(DO
((J K))
((>= J N))
(IF (< (ABS (AREF MATRIX I_MAX J_MAX)) (ABS (AREF MATRIX I J)))
(PROGN
(SETQ I_MAX I)
(SETQ J_MAX J)
)
)
(SETQ J (+ J 1))
)
(SETQ I (+ I 1))
)
;ПЕРЕСТАВЛЯЕМ СТРОКИ
(DO
((J K))
((>= J (+ N 1)))
(SETQ TEMP (AREF MATRIX K J))
(SETF (AREF MATRIX K J) (AREF MATRIX I_MAX J))
(SETF (AREF MATRIX I_MAX J) TEMP)
(SETQ J (+ J 1))
)
;ПЕРЕСТАВЛЯЕМ СТОЛБЦЫ
(DO
((I 0))
((>= I N))
(SETQ TEMP (AREF MATRIX I K))
(SETF (AREF MATRIX I K) (AREF MATRIX I J_MAX))
(SETF (AREF MATRIX I J_MAX) TEMP)
(SETQ I (+ I 1))
)
;УЧИТЫВАЕМ ИЗМЕНЕНИЕ ПОРЯЛКА КОРНЕЙ
(SETQ I (AREF X K))
(SETF (AREF X K) (AREF X J_MAX))
(SETF (AREF X J_MAX) I)
)
(DEFUNGAUSS (MATRIX N X)
(DECLARE (SPECIAL OTV))
(DECLARE (SPECIAL RES))
(SETQ OTV (MAKE-ARRAY 50 :ELEMENT-TYPE 'INTEGER :INITIAL-ELEMENT 0))
(SETQ RES (MAKE-ARRAY N :ELEMENT-TYPE 'INTEGER :INITIAL-ELEMENT 0))
;СНАЧАЛА ВСЕ КОРНИ ПО ПОРЯДКУ
(DO
((I 0))
((>= I (+ N 1)))
(SETF (AREF OTV I) I)
(SETQ I (+ I 1))
)
;ПРЯМОЙ ХОД МЕТОДА ГАУССА
(DO
((K 0))
((>= K N))
;ОПРЕДЕЛЯЕМ НА КАКОЙ ПОЗИЦИИ ДОЛЖЕН СТОЯТЬ ГЛАВНЫЙ ЭЛЕМЕНТ
(GLAV_EL K MATRIX N OTV)
(IF (< (ABS (AREF MATRIX K K)) 0.0001) (PRINT "SYSTEMA NE IMEET EDINSTVENNOGO RESHENIYA"))
(DO
((J N))
((< J K))
(SETF (AREF MATRIX K J) (FLOAT (/ (AREF MATRIX K J) (AREF MATRIX K K))))
(SETQ J (- J 1))
)
(DO
((I (+ K 1)))
((>= I N))
(DO
((J N))
((< J K))
(SETF (AREF MATRIX I J) (- (AREF MATRIX I J) (* (AREF MATRIX K J) (AREF MATRIX I K))))
(SETQ J (- J 1))
)
(SETQ I (+ I 1))
)
(SETQ K (+ K 1))
)
;ОБРАТНЫЙ КОД
(DO
((I 0))
((>= I N))
(SETF (AREF X I) (AREF MATRIX I N))
(SETQ I (+ I 1))
)
(DO
((I (- N 2)))
((< I 0))
(DO
((J (+ I 1)))
((>= J N))
(SETF (AREF X I) (- (AREF X I) (* (AREF X J) (AREF MATRIX I J))))
(SETQ J (+ J 1))
)
(SETQ I (- I 1))
)
(DO
((I 0) (INDEX 0))
((>= I N) RES)
(DO
((J 0))
((>= J N))
;РАССТАВЛЯЕМ КОРНИ ПО ПОРЯДКУ
(IF (= I (AREF OTV J))
(PROGN
(SETF (AREF RES INDEX) (AREF X J))
(SETQ INDEX (+ INDEX 1))
)
)
(SETQ J (+ J 1))
)
(SETQ I (+ I 1))
)
(SETQ X RES)
)
(SETQINPUT_STREAM(OPEN " D:\GAUSS_MATRIX.TXT" :DIRECTION :INPUT))
;ПОЛУЧАЕМ РАЗМЕРНОСТЬ МАТРИЦЫ
(SETF N (READINPUT_STREAM))
;ПОЛУЧАЕММАТРИЦУ
(SETF MATRIX (READINPUT_STREAM))
(CLOSEINPUT_STREAM)
(SETQ X (MAKE-ARRAY 50 :ELEMENT-TYPE 'INTEGER :INITIAL-ELEMENT 0))
(SETQ RES (GAUSS MATRIX N X))
;ЗАПИСЫВАЕМКОРНИСЛАУВФАЙЛ
(SETQOUTPUT_STREAM(OPEN " D:\KORNI_SLAY.TXT" :DIRECTION :OUTPUT))
(PRINT RES OUTPUT_STREAM)
(TERPRIOUTPUT_STREAM)
(CLOSEOUTPUT_STREAM)
5 Пример выполнения программы
Пример 1.
Рисунок 2 – Входные данные
Рисунок 3 – Выходные данные
Пример 2.
Рисунок 4 – Входные данные
Рисунок 5 – Выходные данные
Пример 3.
Рисунок 6 – Входные данные
Рисунок 7 – Выходные данные
ЗАКЛЮЧЕНИЕ
Проблема повышения качества вычислений, как несоответствие между желаемым и действительным, существует и будет существовать в дальнейшем. Ее решению будет содействовать развитие информационных технологий, которое заключается как в совершенствовании методов организации информационных процессов, так и их реализации с помощью конкретных инструментов – сред и языков программирования.
Итогом работы можно считать созданную функциональную модель численного решения системы линейных уравнений с помощью метода исключения Гаусса с выбором главного элемента по столбцу. Созданная функциональная модель и ее программная реализация могут служить органической частью решения более сложных задач.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ и литературы
1. Бронштейн, И.Н. Справочник по математике для инженеров и учащихся втузов [Текст] / И.Н. Бронштейн, К.А. Семендяев. – М.: Наука, 2007. – 708 с.
2. Васильев, Ф.П. Численные методы решения экстремальных задач. [Текст] / Ф.П. Васильев – М.: Наука, 2002. C. 415.
3. Высшая документация – Online документация [Электронный ресурс] – Режим доступа: http://vm.psati.ru/online-vmath/index.php?page=8
4. Калиткин, Н.Н. Численные методы. [Электронный ресурс] / Н.Н. Калиткин. – М.: Питер, 2001. С. 504.
5. Кнут, Д.Э. Искусство программирования. Основные алгоритмы [Текст] / Д.Э. Кнут. – М.: Вильямс, 2007. Т.1.– 712 с.
6. Метод Гаусса [Электронный ресурс] – Режим доступа: http://www.wikipedia.org/wiki/Метод_Гаусса.
7. Симанков, В.С. Основы функционального программирования [Текст] / В.С. Симанков, Т.Т. Зангиев, И.В. Зайцев. – Краснодар: КубГТУ, 2002. – 160 с.
8. Степанов, П.А. Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А.Степанов, А.В. Бржезовский. – М.: ГУАП, 2003. С. 79.
9. Хювенен Э. Мир Лиспа [Текст] / Э. Хювенен, Й. Сеппянен. – М.: Мир, 1990. – 460 с.