- •Задание на курсовую работу
- •Введение
- •1. Методы решения алгебраических проблем собственных значений
- •2. Описание численного метода
- •3. Схема программы
- •4. Список переменных и описание программы
- •5. Текст программы
- •6. Численный пример, рассчитанный вручную и в программе
- •7. Результаты работы программы
- •Заключение
- •Список используемой литературы
3. Схема программы
Рис. 1. Схема программы
Рис. 2. Схема процедуры Frob
Рис. 2. Схема процедуры Frob (продолжение)
Рис. 2. Схема процедуры Frob (продолжение)
Рис. 2. Схема процедуры Frob (продолжение)
Рис. 2. Схема процедуры Frob (продолжение)
Рис. 3. Схема функции PrintMatr
Рис. 4. Схема функции ReadFromFile
4. Список переменных и описание программы
Константы
Q=4 максимальный порядок системы
Переменные
N реальный размер системы
a исходная матрица
b, m вспомогательные матрицы
e единичная матрица
c результирующая матрица
i, j, k переменные для организации цикла
Описание программы
Программа начинает свою работу с выдачи информации о назначении и разработчике. Затем осуществляется чтение данных из файла data.txt.
Данные в файле размещены следующим образом: в первой строке находится порядок матрицы, а в каждой следующей строке – элементы строки матрицы.
Данные считываются в матрицу А и она печатается на экране. Затем осуществляется вызов процедуры Frob, осуществляющей формирование матрицы Фробениуса. Если процедура отработала нормально, т.е. не имел места особый случай, характеристическое уравнение матрицы А выводится на экран. На этом программа завершает свою работу. Т.к. отыскание корней характеристического уравнения уже не входит в метод Данилевского, а является самостоятельной задачей.
Вычисление матрицы Фробениуса выполняется точно в соответствии с описанным методом в п. 2.
Кроме основной процедуры Frob, в программе реализованы вспомогательные процедуры для печати матриц и для чтения данных из файла.
5. Текст программы
|
|
REM Отыскание характеристического полинома матрицы методом Данилевского
CONST Q = 4
DECLARE SUB PrintMatr (m!(), N!) DECLARE SUB ReadFromFile (a!(), N!) DECLARE SUB Frob (a!(), N!)
DIM a(Q, Q)
|
|
|
REM основная программа
CLEAR PRINT "Отыскание характеристического полинома матрицы методом Данилевского"
|
|
|
REM чтение матрицы из файла CALL ReadFromFile(a(), N)
PRINT "ИСХОДНАЯ МАТРИЦА" CALL PrintMatr(a(), N) PRINT INPUT$(1)
|
|
|
CALL Frob(a(), N)
|
|
|
END
|
Процедуры программы
|
|
SUB Frob (a!(), N!) REM процедура приведения матрицы к norm виду Frobeniusa DIM e(Q, Q), b(Q, Q), m(Q, Q), c(Q, Q)
|
|
|
REM создание единичной матрицы e (Q,Q) FOR i = 1 TO N FOR j = 1 TO N IF i = j THEN e(i, j) = 1 ELSE e(i, j) = 0 END IF NEXT j NEXT i
|
|
|
R = N PRINT "ПРЕОБРАЗОВАНИЕ МАТРИЦЫ" WHILE (R > 1)
|
|
|
REM преобразование r-1 столбца матрицы а(Q,Q)
IF ABS(a(R, R - 1)) < .000001 THEN PRINT " ОСОБЫЙ СЛУЧАЙ; ПЕРЕОБРАЗОВАНИЕ НЕ ВОЗМОЖНО " PRINT INPUT$(1) END END IF
|
|
|
FOR i = 1 TO N b(i, R - 1) = a(i, R - 1) / a(R, R - 1) NEXT i
|
|
|
REM формирование матрицы m(Q,Q)
FOR i = 1 TO N FOR j = 1 TO N m(i, j) = e(i, j) NEXT j NEXT i
FOR i = 1 TO N IF (i <> (R - 1)) THEN m(R - 1, i) = -a(R, i) / a(R, R - 1) ELSE m(R - 1, i) = 1 / a(R, R - 1) END IF NEXT i
|
|
|
REM вычисление матрицы b(Q,Q)
FOR i = 1 TO N FOR j = 1 TO N IF (j <> R - 1) THEN b(i, j) = a(i, j) + a(i, R - 1) * m(R - 1, j) ELSE b(i, j) = a(i, R - 1) * m(R - 1, R - 1) END IF NEXT j NEXT i
|
|
|
REM получение матрицы c(Q,Q) FOR i = 1 TO R - 2 FOR j = 1 TO N c(i, j) = b(i, j) NEXT j NEXT i
FOR j = 1 TO N sum = 0 FOR K = 1 TO N sum = sum + a(R, K) * b(K, j) NEXT K c(R - 1, j) = sum NEXT j
FOR j = 1 TO N c(R, j) = b(R, j) NEXT j
|
|
|
REM перезапись матрицы c--> a
FOR i = 1 TO N FOR j = 1 TO N a(i, j) = c(i, j) NEXT j NEXT i CALL PrintMatr(c(), N)
|
|
|
R = R - 1 WEND ' {while}
|
|
|
PRINT : PRINT PRINT "ХАРАКТЕРИСТИЧЕСКОЕ УРАВНЕНИЕ :"
COLOR (2) PRINT "L^"; N; j = N - 1 FOR i = 1 TO N PRINT USING " - ### *L^#"; c(1, i); j; j = j - 1 NEXT i
COLOR (8) PRINT : PRINT
|
|
|
END SUB
|
|
|
SUB PrintMatr (m!(), N!) SCREEN 0
FOR i = 1 TO N FOR j = 1 TO N IF ABS(m(i, j)) <= .000001 THEN COLOR 2
ELSE COLOR 15 END IF PRINT USING "###.### "; m(i, j); NEXT j NEXT i
COLOR (15)
END SUB
|
|
|
SUB ReadFromFile (a!(), N!)
OPEN "data.txt" FOR INPUT AS #1 'open file for read
INPUT #1, N 'прочитали размер матрицы
FOR i = 1 TO N FOR j = 1 TO N INPUT #1, a(i, j) 'прочитали элемент NEXT j
NEXT i CLOSE #1
END SUB
|
ПОЯСНЕНИЯ К ТЕКСТУ ПРОГРАММЫ
Объявление констант, переменных и процедур программы.
Очистка экрана и печать заголовка программы.
Вызов процедуры чтения матрицы из файла – ReadFromFile; Вызов процедуры печати матрицы– PrintMatr.
Вызов основной процедуры – Form.
завершение программы.
Процедуры программы
Заголовок процедуры Forb, описание вспомогательных матриц.
Создание единичной матрицы e.
Подготовка к основному циклу процедуры; заголовок цикла WHILE.
Проверка допустимости вычислений.
Формирование матрицы b (её предпоследней строки).
Формирование матрицы m.
Вычисление матрицы b.
Получение матрицы c.
Перезапись матрицы с в матрицу а; печать матрицы а.
Уменьшение счётчика R на 1; завершение цикла.
Печать найденных значений коэффициентов характеристического уравнения.
Завершение процедуры Frob.
Процедура PrintMatr печати матрицы.
Процедура ReadFromFile чтения матрицы из файла.
