Primero un poco de Teoría. Aprende a realizar el determinante de una matriz de
cualquier dimesión.
Sea A una matriz cuadrada y aij (con i y j como filas y columnas del array) uno cualquiera de sus elementos. Si se suprime la fila i y la columna j de la matriz A se obtiene una submatriz (o matriz adjunta) Mij que recibe el nombre de matriz adjunta del elemento aij.
Dada la matriz
la matriz adjunta del elemento a11 es la matriz que resultante de suprimir la fila 1 y columna 1 en la matriz A, es decir:
Llamamos menor complementario del elemento aij al determinante de la matriz complementaria del elemento aij , y se representa por aij
Se llama adjunto de aij , y se representa por por Aij, al número (–1)i+jaij.
El determinante de una matriz cuadrada es igual a la suma de los elementos de una fila o columna cualquiera, multiplicados por sus adjuntos.
Por ejemplo, si desarrollamos un determinante de orden n por los adjuntos de la 1ª fila se tiene:
Cálculo del determinante de una matriz.
El determinante de la matriz en este código se calcula por adjuntos mediante
dos procedimientos que se llaman de forma recursiva.
Dado la declaración en la sección de tipos:
type
tDimension = 1..100;
eMatriz(f,c: tDimension) = array [1..f,1..c] of real;
tpMatriz = ^eMatriz;
Y las variables:
var
pM1, pM2, pResul: tpMatriz;
El procedimiento AdjuntoMatriz devuelve la matriz adjunta a la fila (f)
y columna (c) indicadas.
procedure AdjuntoMatriz(m: tpMatriz; f,c: integer; var resul: tpMatriz);
var i,j,i2,j2: integer value 0;
begin
i2 := 0;
for i:= 1 to m^.f do begin
if (i <> f) then begin {Comprobar si la fila no es la que se va a elminar}
i2 := i2 +1;
for j:= 1 to m^.c do
if (j <> c) then begin {Comprobar si la columna no es la que se va a eliminar}
j2 := j2 +1;
resul^[i2,j2] := m^[i,j] * (-1) pow(i+j);
end;
end;
j2:= 0;
end;
end;
La función determinante calcula el determinante de la matriz de forma
recursiva y por adjuntos.
function Determinante(m: tpMatriz):real;
var
j:integer value 0;
det:real;
m2: tpMatriz;
begin
new(m2,m^.f -1,m^.c -1);
if m^.c = 2 then
{ Determinante de dos por dos, caso base de la recursividad }
-
-
Determinante := m^[1,1] * m^[2,2] - m^[1,2] * m^[2,1]
else
begin
det:= 0;
for j:= 1 to m^.c do
begin
{Calcula los adjuntos de la fila 1. LLama al procedimiento Adjunto
Matriz que devuelve la matriz adjunta a la fila primera y a la columna j}
AdjuntoMatriz(m,1,j,m2);
{LLamada recursiva de la funcion Determinante}
det:= det + m^[1,j] * Determinante(m2);
end;
Determinante:= det;
end;
end;