sábado, 20 de enero de 2007

Matriz inversa en pascal

Para El uso de este procedimiento es necesario otros artículos de este blog como:
Determinante en pascal
Matriz Adjunta en pascal

Dada la siguiente declaración de tipos:

type
tDimension = 1..100;
eMatriz(f,c: tDimension) = array [1..f,1..c] of real;

tRango = record
f,c: tDimension value 1;
end;

tpMatriz = ^eMatriz;


procedure MatrizInversa(m: tpMatriz; var resul: tpMatriz);
var i,j,i2,j2: integer;
adjunta: tpMatriz;
deter: real;
begin
deter:= Determinante(m);
if(deter <> 0) then begin
{Crea la matriz Adjunta}
new (adjunta, m^.c -1, m^.f -1);

for i:=1 to m^.f do
for j:=1 to m^.c do
begin
AdjuntoMatriz(m,i,j,adjunta);
resul^[i,j] := Determinante(adjunta);
end;

MatrizTraspuesta(resul);
{ dividir determinante }
for i2:=1 to m^.f do
for j2:=1 to m^.c do
resul^[i2,j2]:= resul^[i2,j2] / deter;
end;
end;