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 – Структурная схема программного
продукта
