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

1.2 Математическая постановка задачи

Сформировать матрицу A с помощью датчика случайных чисел. Размерность матрицы n*n и диапазон для формирования массива [r1;r2].

A[i,j]:=random(r2-r1+1) + r1 (1)

Используя сформированный матрицу A, необходимо сформировать обратную матрицу А-1, используя правила матричной алгебры, нахождение обратной матрицы (за основу взят способ Крамара).

В начале мы транспонируем нашу матрицу, записывая ее в массив:

obr[i, j]:= StrToFloat(StringGrid1.Cells[j, i]);

Берётся переменная (k), которая меняется n раз (от 0 до kol-1){ kol - переменная в которой хранится размерность матрицы}:

for k:=0 to kol - 1 do begin

Далее внутри этого цикла строится просмотр всех элементов матрицы:

[i,j] – индекс элемента матрицы;

for i:=0 to kol - 1 do

for j:=0 to kol - 1 do

Так же здесь присутствуют переменные b[i,j] и obr[i,j] – это массивы;

b[i,j] – массив используемый лишь внутри процедуры (вспомогательный), obr[i,j] – основной массив для хранения обратной матрицы.

Внутри этих циклов и организован главным образом алгоритм нахождения обратной матрицы. Здесь происходит проверка принадлежности элемента матрицы к одной из четырёх формул, по которым в дальнейшем он и рассчитывается:

1)Если (i=k) и (j=k) тогда b[i,j] := 1/obr[i,j]; (2)

2)Если (i=k) и (j<>k) тогда b[i,j] := -obr[i,j]/obr[k,k]; (3)

3)Если (i<>k) и (j=k) тогда b[i,j] := obr[i,k]/obr[k,k]; (4)

4)Если (i<>k) и (j<>k) тогда b[i,j] := obr[i,j] - obr[k,j] * obr[i,k]/obr[k,k]; (5)

Перед каждым изменением переменной k, мы обновляем значение obr[i,j] – основного массива для хранения обратной матрицы.

for i:= 0 to kol - 1 do

for j:= 0 to kol - 1 do

obr[i, j]:= b[i, j];

Этот способ основан на применении правила матричной алгебры при нахождении обратной матрицы.

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

2.1 Идентификаторы переменных

kol:integer; {переменная в которой хранится размерность матрицы}

obr:array[0..300, 0..300] of real; {массив обратной матрицы}

FName:string; {строковая переменная для сохранения матриц}

h:string; {строковая переменная для сохранения матриц}

i:integer; {параметр цикла а процедурах}

j:integer; {параметр цикла в процедурах}

b:array[0..300,0..300] of real; {вспомогательный массив для расчета обратной матрицы }

k:integer; {вспомогательная переменная}

p:integer; {переменная в которой хранится ключ программы}

i1:integer; {переменная для вывода ошибки при неправильном вводе числа в столбце}

j1:integer; {переменная для вывода ошибки при неправильном вводе числа в столбце}

r1:integer; {(от)r1 - переменная в которой хранится размерность промежутка для чисел матрицы}

r2:integer; {(до)r2 - переменная в которой хранится размерность промежутка для чисел матрицы}

2.2 Структурная схема программного продукта

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

Рисунок 1 – Структурная схема программного продукта