Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт Данилевск.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
918.02 Кб
Скачать

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

PRINT "ИСХОДНАЯ МАТРИЦА"

CALL PrintMatr(a(), N)

PRINT INPUT$(1)

PRINT

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

PRINT

NEXT i

PRINT

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

PRINT

END SUB

ПОЯСНЕНИЯ К ТЕКСТУ ПРОГРАММЫ

  1. Объявление констант, переменных и процедур программы.

  2. Очистка экрана и печать заголовка программы.

  3. Вызов процедуры чтения матрицы из файла – ReadFromFile; Вызов процедуры печати матрицы– PrintMatr.

  4. Вызов основной процедуры – Form.

  5. завершение программы.

Процедуры программы

  1. Заголовок процедуры Forb, описание вспомогательных матриц.

  2. Создание единичной матрицы e.

  3. Подготовка к основному циклу процедуры; заголовок цикла WHILE.

  4. Проверка допустимости вычислений.

  5. Формирование матрицы b (её предпоследней строки).

  6. Формирование матрицы m.

  7. Вычисление матрицы b.

  8. Получение матрицы c.

  9. Перезапись матрицы с в матрицу а; печать матрицы а.

  10. Уменьшение счётчика R на 1; завершение цикла.

  11. Печать найденных значений коэффициентов характеристического уравнения.

  12. Завершение процедуры Frob.

  13. Процедура PrintMatr печати матрицы.

  14. Процедура ReadFromFile чтения матрицы из файла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]