[ Foro de Pascal ]
Por favor, ayúdenme a generar la inversa de una matriz, yo ya lo intenté y no pude, por favor ayuda
:(, éste es el código que tengo, pero no genera la inversa correcta
var
R:array[1..100,1..100] of real;
B:array[1..100,1..100] of real;
n,m,i,j,s,t,k,l,x:integer;
aux,aux1,aux2:real;
begin
clrscr;
s:=0;
x:=0;
t:=0;
Write('Introduzca el orden de la matriz R: ');ReadLn(n);
WriteLn('Ingrese la matriz R');
for i:=1 to n do
for j:=1 to n do
begin
Write('R[',i,',',j,']= ');
ReadLn(R[i,j]);
end;
for i:=1 to n do
for j:=1 to n do
begin
if i=j then
B[i,j]:=1
else
B[i,j]:=0;
end;
for j:=1 to n do
begin
i:=1;
s:=s+1;
repeat
p:=j;
if R[s,j]<>0 then
begin
for k:=1 to n do
begin
R[p,k]:=R[p,k]/R[p,j];
B[p,k]:=B[p,k]/R[p,j];
end;
WriteLn('Aplicando oef');
for m:=1 to n do
begin
for i:=1 to n do
write(R[m,i]:10:2,' ');
WriteLn;
end;
WriteLn('Aplicando oef a la identidad');
for m:=1 to n do
begin
for i:=1 to n do
Write(B[m,i]:10:2,' ');
WriteLn;
end;
for l:=1 to n do
if l<>p then
begin
aux:=R[l,p];
for k:=1 to n do
begin
R[l,k]:=R[l,k]-aux*R[p,k];
B[l,k]:=B[l,k]-aux*B[p,k];
end;
WriteLn('Aplicando oef');
for m:=1 to n do
begin
for i:=1 to n do
Write(R[m,i]:10:2,' ');
WriteLn;
end;
WriteLn('Aplicando oef a la identidad');
for m:=1 to n do
begin
for i:=1 to n do
write(B[m,i]:10:2,' ');
WriteLn;
end;
end
else
i:=n;
end
else
begin
t:=p+1;
if R[t,j]<>0 then
begin
for k:=1 to n do
begin
aux1:=R[t,k];
R[t,k]:=R[p,k];
R[p,k]:=aux1;
aux2:=B[t,k];
B[t,k]:=B[p,k];
B[p,k]:=aux2;
i:=p;
end;
WriteLn('Aplicando oef');
for m:=1 to n do
begin
for i:=1 to n do
write(R[m,i]:10:2,' ');
WriteLn;
end;
WriteLn('Aplicando oef a la identidad');
for m:=1 to n do
begin
for i:=1 to n do
write(B[m,i]:10:2,' ');
WriteLn;
end;
end
else
i:=i+1;
end;
until i=n;
end;
for i:=1 to n do
for k:=1 to n do
if k=i then
if R[i,k]=1 then
x:=x+1;
if x=n then
begin
WriteLn('La matriz es invertible');
WriteLn ('Su INVERSA es: ');
for m:=1 to n do
begin
for i:=1 to n do
Write (B[m,i]:10:2,' ');
WriteLn;
end;
end
else
WriteLn('La matriz NO es invertible');
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)