Domingo 15 de Diciembre de 2024, 21:52
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problema inversa
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problema inversa (Leído 2431 veces)
Checho360
Miembro activo
Mensajes: 84
Problema inversa
«
en:
Miércoles 23 de Marzo de 2011, 00:17 »
0
Hola muy buenas, estoy programando algunas cosas con C++ y en este caso el calculo de la inversa a partir de una matriz que introduce el usuario. Tengo el mismo algoritmo programado en matlab y funciona perfectamente pero en c++ no lo ejecuta como yo esperaba. En primer lugar no calcula la inversa, y ademas se cuelga si metes orden 4. Espero que alguien me diga por que no funciona. Espero vuestra respuesta un saludo y gracias de antemano!!!
Código: C++
#include <iostream>
using
namespace
std
;
int
main
(
)
/*Este programa pide al usuario una matriz de orden n la diagonaliza por el
metodo de Gauss-Jordan sin pivote*/
{
//Genero las variables, la matriz, la pido al usuario y la muestro por pantalla
int
n
;
double
long
t
;
int
w
;
cout
<<
"Introduzca el orden de la matriz:"
<<
endl
;
cin
>>
n
;
int
q
=
n
+
1
;
double
A
[
n
]
[
2
*
n
]
;
double
B
[
n
]
[
n
]
;
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
for
(
int
k
=
1
;
k
<=
n
;
k
++
)
{
cout
<<
"Introduzca el elemento de la fila "
<<
i
<<
" y la columna "
<<
k
<<
endl
;
cin
>>
A
[
i
]
[
k
]
;
}
}
cout
<<
endl
<<
endl
;
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
for
(
int
k
=
1
;
k
<=
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
if
(
k
==
n
)
{
cout
<<
endl
;
}
}
}
//Genero la matriz identidad
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
for
(
int
j
=
1
;
j
<=
n
;
j
++
)
{
if
(
j
==
i
)
{
B
[
i
]
[
j
]
=
1
;
}
else
{
B
[
i
]
[
j
]
=
0
;
}
}
}
//Acoplo la matriz identidad para trabajar con ella
for
(
int
j
=
1
;
j
<=
n
;
j
++
)
{
int
a
=
1
;
for
(
int
i
=
n
+
1
;
i
<=
2
*
n
;
i
++
)
{
A
[
j
]
[
i
]
=
B
[
j
]
[
a
]
;
a
++
;
}
}
//Muestro la matriz con la que voy a trabajar
cout
<<
endl
<<
endl
<<
"La matriz introducida con la identidad acoplada es:"
<<
endl
<<
endl
;
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
for
(
int
k
=
1
;
k
<=
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
cout
<<
endl
<<
endl
;
//Triangulo la matriz
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
for
(
int
k
=
i
+
1
;
k
<=
n
;
k
++
)
{
t
=
A
[
k
]
[
i
]
/
A
[
i
]
[
i
]
;
for
(
int
j
=
1
;
j
<=
2
*
n
;
j
++
)
{
A
[
k
]
[
j
]
=
A
[
k
]
[
j
]
-
t
*
A
[
i
]
[
j
]
;
}
}
}
cout
<<
endl
<<
endl
;
//Muestro la matriz triangulada
cout
<<
"La matriz triangulada es:"
<<
endl
<<
endl
;
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
for
(
int
k
=
1
;
k
<=
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
cout
<<
endl
<<
endl
;
//Aplico Gauss-Jordan
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
q
--
;
w
=
q
;
for
(
int
k
=
i
+
1
;
k
<=
n
;
k
++
)
{
w
--
;
t
=
A
[
w
]
[
q
]
/
A
[
q
]
[
q
]
;
for
(
int
j
=
1
;
j
<=
2
*
n
;
j
++
)
{
A
[
w
]
[
j
]
=
A
[
w
]
[
j
]
-
t
*
A
[
q
]
[
j
]
;
}
}
}
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
for
(
int
j
=
1
;
j
<=
2
*
n
;
j
++
)
{
A
[
i
]
[
j
]
=
A
[
i
]
[
j
]
/
A
[
i
]
[
i
]
;
}
}
//Muestro la matriz diagonalizada y la inversa:
cout
<<
"La matriz diagonalizada y la inversa de A es:"
<<
endl
<<
endl
;
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
for
(
int
k
=
1
;
k
<=
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
system
(
"pause"
)
;
return
0
;
}
Tweet
Epa
Miembro MUY activo
Mensajes: 242
Nacionalidad:
Re: Problema inversa
«
Respuesta #1 en:
Miércoles 23 de Marzo de 2011, 20:41 »
0
Buenas.
Los rangos de las variables para los bucles estan mal.
En c/c++ los elementos de los vectores van de 0 a N-1.
Por ejemplo:
# for(int i=1;i<=n;i++){
# for(int k=1;k<=n;k++){
# cout<<"Introduzca el elemento de la fila "<<i<<" y la columna "<<k<<endl;
# cin>>A
[k];
# }
# }
tendria que quedar:
# for(int i=0;i<n;i++){
# for(int k=0;k<n;k++){
# cout<<"Introduzca el elemento de la fila "<<i+1<<" y la columna "<<k+1<<endl;
# cin>>A
[k];
# }
# }
La verdad que ni mire el algoritmo
Corregi eso y si aparece otro problema avisa.
Saludos
The sweet smell of a great sorrow lies over the land.
Checho360
Miembro activo
Mensajes: 84
Re: Problema inversa
«
Respuesta #2 en:
Miércoles 23 de Marzo de 2011, 20:51 »
0
Hola Epa; en primer lugar muchisimas gracias por contestar ya pensaba que nadie lo haría jeje. Voy a probar lo que dices. Ya sabia que las matrices se generan contando desde 0 pero simplemente me parecio mas comodo hacerlo asi, y ademas pensaba que eso no generaria errores, es decir pense: que mas da recorrer la matriz de 0 a n-1 que de 1 a n. De todas formas voy a cambiarlo todo a ver si cambia la cosa. Ahh y lo del algoritmo, creo que esta bien porque lo pense yo y lo programe primero en matlab y ahí funciona de maravilla. Lo unico que a este aun no le añadi cosas como que no tome como pivote un 0 o cosas asi (primero que funcione con esto y luego ya le añado cosas).
Un saludo y muchas gracias por contestar
Epa
Miembro MUY activo
Mensajes: 242
Nacionalidad:
Re: Problema inversa
«
Respuesta #3 en:
Miércoles 23 de Marzo de 2011, 22:03 »
0
Ahi revise el algoritmo.
Ademas de los de los bucles, tendrias que modificar el q=n +1; del principio, cambiarlo por q=n;
Fijate que los valores iniciales de las variables en los bucles anidados, quedan como estaban. Por ejemplo:
for(int i=0;i<n;i++){
for(int k=i+1;k<n;k++){
k=i+1 queda asi, y no k=i
Aunque encontre un pequeño error en el algoritmo, no se si ya te habras dado cuenta.
En la parte
Código: C++
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
j
=
0
;
j
<
2
*
n
;
j
++
)
{
A
[
i
]
[
j
]
=
A
[
i
]
[
j
]
/
A
[
i
]
[
i
]
;
}
}
Despues da Gauss-Jordan
Fijate que estas dividiendo primero la matriz original, por lo que vas poniendo 1's en la diagonal, y despues dividis las filas de la otra matriz por 1, o sea que queda igual.
Podrias ahcer algo como:
Código: C++
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
j
=
n
;
j
<
2
*
n
;
j
++
)
{
A
[
i
]
[
j
]
=
A
[
i
]
[
j
]
/
A
[
i
]
[
i
]
;
}
A
[
i
]
[
i
]
=
1
;
}
Me alegra haber sido de ayuda
Saludos
The sweet smell of a great sorrow lies over the land.
Checho360
Miembro activo
Mensajes: 84
Re: Problema inversa
«
Respuesta #4 en:
Miércoles 23 de Marzo de 2011, 22:06 »
0
Bueno pues ya he probao a cambiar eso y sigue igual. Ahora ademas tengo dos cosas que pasan que no entiendo. Adjunto una imagen para explicarlo: para empezar la primera columna de la matriz A la cambia por la columna 1 de la matriz identidad y despues todo mal claro... no encuentro el error a ver si alguien me puede decir; gracias de antemano!!
img121.imageshack.us/i/sinttuloi.gif/
El nuevo codigo es:
Código: C++
#include <iostream>
using
namespace
std
;
int
main
(
)
/*Este programa pide al usuario una matriz de orden n la diagonaliza por el
metodo de Gauss-Jordan sin pivote y calcula su inversa*/
{
//Genero las variables, la matriz, la pido al usuario y la muestro por pantalla
int
n
;
double
long
t
;
int
w
;
cout
<<
"Introduzca el orden de la matriz:"
<<
endl
;
cin
>>
n
;
int
q
=
n
;
double
A
[
n
-
1
]
[
(
2
*
n
)
-
1
]
;
double
B
[
n
-
1
]
[
n
-
1
]
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
n
;
k
++
)
{
cout
<<
"Introduzca el elemento de la fila "
<<
i
<<
" y la columna "
<<
k
<<
endl
;
cin
>>
A
[
i
]
[
k
]
;
}
}
cout
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
if
(
k
==
n
-
1
)
{
cout
<<
endl
;
}
}
}
//Genero la matriz identidad
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
j
=
0
;
j
<
n
;
j
++
)
{
if
(
j
==
i
)
{
B
[
i
]
[
j
]
=
1.0
;
}
else
{
B
[
i
]
[
j
]
=
0.0
;
}
}
}
//Acoplo la matriz identidad para trabajar con ella
for
(
int
j
=
0
;
j
<
n
;
j
++
)
{
int
a
=
0
;
for
(
int
i
=
n
;
i
<
2
*
n
;
i
++
)
{
A
[
j
]
[
i
]
=
B
[
j
]
[
a
]
;
a
++
;
}
}
//Muestro la matriz con la que voy a trabajar
cout
<<
endl
<<
endl
<<
"La matriz introducida con la identidad acoplada es:"
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
cout
<<
endl
<<
endl
;
//Triangulo la matriz
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
i
+
1
;
k
<
n
;
k
++
)
{
t
=
A
[
k
]
[
i
]
/
A
[
i
]
[
i
]
;
for
(
int
j
=
0
;
j
<
2
*
n
;
j
++
)
{
A
[
k
]
[
j
]
=
A
[
k
]
[
j
]
-
t
*
A
[
i
]
[
j
]
;
}
}
}
cout
<<
endl
<<
endl
;
//Muestro la matriz triangulada
cout
<<
"La matriz triangulada es:"
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
cout
<<
endl
<<
endl
;
//Aplico Gauss-Jordan
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
q
--
;
w
=
q
;
for
(
int
k
=
i
+
1
;
k
<
n
;
k
++
)
{
w
--
;
t
=
A
[
w
]
[
q
]
/
A
[
q
]
[
q
]
;
for
(
int
j
=
0
;
j
<=
2
*
n
-
1
;
j
++
)
{
A
[
w
]
[
j
]
=
A
[
w
]
[
j
]
-
t
*
A
[
q
]
[
j
]
;
}
}
}
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
j
=
1
;
j
<
2
*
n
;
j
++
)
{
A
[
i
]
[
j
]
=
A
[
i
]
[
j
]
/
A
[
i
]
[
i
]
;
}
A
[
i
]
[
i
]
=
1
;
}
//Muestro la matriz diagonalizada y la inversa:
cout
<<
"La matriz diagonalizada y la inversa de A es:"
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
1
;
k
<
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
system
(
"pause"
)
;
return
0
;
}
Por cierto epa tienes toda la razon en el fallo del algoritmo en la parte de dividir por la diagonal. No lo había visto asi que un error menos jejeje.
Muchisimas gracias epa da gusto que haya gente asi
EDITO: epa he modificao el primer programa que puse con este ultimo fallo que has comentao y funciona perfectamente, sin embargo cambiando los bucles por 0:n-1 no funciona (no veo el error), por esos fallos de la imagen. Aver si lo ves tu. Un saludo
Epa
Miembro MUY activo
Mensajes: 242
Nacionalidad:
Re: Problema inversa
«
Respuesta #5 en:
Miércoles 23 de Marzo de 2011, 22:19 »
0
En la linea 75 se te escapo un = del <= en el for.
Creo que no me explique muy bien en la otra respuesta
Si tenes una matriz, por ejemplo mat[N][M]
los elementos de esa matriz van desde mat[0][0] a mat[N-1][M-1]
O sea, N y M representa la cantidad de elementos e cada dimension.
Pero despues para acceder a cada elemento, se empieza desde 0.
Si tenes por ejemplo:
int A[5];
los elementos de ese vector son, A[0], A[1], A[2], A[3] y A[4]
Te dejo tu codigo con esas cositas corregidas.
Fijate que le saque la matriz B, y directamente le agrego la identidad a A.
Código: C++
#include <iostream>
using
namespace
std
;
int
main
(
)
/*Este programa pide al usuario una matriz de orden n la diagonaliza por el
metodo de Gauss-Jordan sin pivote*/
{
//Genero las variables, la matriz, la pido al usuario y la muestro por pantalla
int
n, w, q
;
long
double
t
;
cout
<<
"Introduzca el orden de la matriz:"
<<
endl
;
cin
>>
n
;
q
=
n
;
double
A
[
n
]
[
2
*
n
]
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
n
;
k
++
)
{
cout
<<
"Introduzca el elemento de la fila "
<<
i
<<
" y la columna "
<<
k
<<
endl
;
cin
>>
A
[
i
]
[
k
]
;
}
}
cout
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
if
(
k
==
n
)
{
cout
<<
endl
;
}
}
}
//Acoplo la matriz identidad para trabajar con ella
for
(
int
j
=
0
;
j
<
n
;
j
++
)
{
for
(
int
i
=
n
;
i
<
2
*
n
;
i
++
)
{
if
(
j
==
(
i
-
n
)
)
A
[
j
]
[
i
]
=
1
;
else
A
[
j
]
[
i
]
=
0
;
}
}
//Muestro la matriz con la que voy a trabajar
cout
<<
endl
<<
endl
<<
"La matriz introducida con la identidad acoplada es:"
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
cout
<<
endl
<<
endl
;
//Triangulo la matriz
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
i
+
1
;
k
<
n
;
k
++
)
{
t
=
A
[
k
]
[
i
]
/
A
[
i
]
[
i
]
;
for
(
int
j
=
0
;
j
<
2
*
n
;
j
++
)
{
A
[
k
]
[
j
]
=
A
[
k
]
[
j
]
-
t
*
A
[
i
]
[
j
]
;
}
}
}
cout
<<
endl
<<
endl
;
//Muestro la matriz triangulada
cout
<<
"La matriz triangulada es:"
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
cout
<<
endl
<<
endl
;
//Aplico Gauss-Jordan
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
q
--
;
w
=
q
;
for
(
int
k
=
i
+
1
;
k
<
n
;
k
++
)
{
w
--
;
t
=
A
[
w
]
[
q
]
/
A
[
q
]
[
q
]
;
for
(
int
j
=
0
;
j
<
2
*
n
;
j
++
)
{
A
[
w
]
[
j
]
=
A
[
w
]
[
j
]
-
t
*
A
[
q
]
[
j
]
;
}
}
}
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
j
=
n
;
j
<
2
*
n
;
j
++
)
{
A
[
i
]
[
j
]
=
A
[
i
]
[
j
]
/
A
[
i
]
[
i
]
;
}
A
[
i
]
[
i
]
=
1
;
}
//Muestro la matriz diagonalizada y la inversa:
cout
<<
"La matriz diagonalizada y la inversa de A es:"
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
return
0
;
}
Saludos
The sweet smell of a great sorrow lies over the land.
Checho360
Miembro activo
Mensajes: 84
Re: Problema inversa
«
Respuesta #6 en:
Miércoles 23 de Marzo de 2011, 22:44 »
0
En la linea 29 creo que esta mal; deberia ser:
Código: C++
if
(
k
==
n
-
1
)
{
cout
<<
endl
;
}
La explicacion que das de A[5] es perfecta, ahora entiendo bien eso. Hasta ahora pensaba que era como matlab .
Bueno haciendo esos ajustes ya me funciona perfectamente, ahora le queda hacer algunos ajustes de pivoteo y esas cosas a ver que tal, si eso ya comento otra vez con el error para que me ayudes jaja.
Bueno pues lo dicho muchas gracias, y por cierto epa, que estudias??
«
última modificación: Jueves 24 de Marzo de 2011, 12:29 por Checho360
»
Epa
Miembro MUY activo
Mensajes: 242
Nacionalidad:
Re: Problema inversa
«
Respuesta #7 en:
Miércoles 23 de Marzo de 2011, 23:13 »
0
jaja, que bueno que hayas entendido con esa "pseudo" explicacion jaja
Estudio Ingenieria en Sistemas de Informacion. O por lo menos eso intento
jajaja
Saludos
The sweet smell of a great sorrow lies over the land.
Checho360
Miembro activo
Mensajes: 84
Re: Problema inversa
«
Respuesta #8 en:
Lunes 28 de Marzo de 2011, 22:12 »
0
Por cierto, en su momento se me olvido... pero por si a alguien le interesa quedo:
Código: C++
#include <iostream>
using
namespace
std
;
int
main
(
)
/*Este programa pide al usuario una matriz de orden n la diagonaliza por el
metodo de Gauss-Jordan sin pivote y calcula su inversa*/
{
//Genero las variables, la matriz, la pido al usuario y la muestro por pantalla
int
n
;
double
long
t
;
int
w
;
cout
<<
"Introduzca el orden de la matriz:"
<<
endl
;
cin
>>
n
;
int
q
=
n
;
double
A
[
n
]
[
(
2
*
n
)
]
;
double
B
[
n
]
[
n
]
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
n
;
k
++
)
{
cout
<<
"Introduzca el elemento de la fila "
<<
i
+
1
<<
" y la columna "
<<
k
+
1
<<
endl
;
cin
>>
A
[
i
]
[
k
]
;
}
}
cout
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
if
(
k
==
n
-
1
)
{
cout
<<
endl
;
}
}
}
//Genero la matriz identidad
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
j
=
0
;
j
<
n
;
j
++
)
{
if
(
j
==
i
)
{
B
[
i
]
[
j
]
=
1.0
;
}
else
{
B
[
i
]
[
j
]
=
0.0
;
}
}
}
//Acoplo la matriz identidad para trabajar con ella
for
(
int
j
=
0
;
j
<
n
;
j
++
)
{
int
a
=
0
;
for
(
int
i
=
n
;
i
<
2
*
n
;
i
++
)
{
A
[
j
]
[
i
]
=
B
[
j
]
[
a
]
;
a
++
;
}
}
//Muestro la matriz con la que voy a trabajar
cout
<<
endl
<<
endl
<<
"La matriz introducida con la identidad acoplada es:"
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
cout
<<
endl
<<
endl
;
//Triangulo la matriz
int
u
=
2
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
i
+
1
;
k
<
n
;
k
++
)
{
//Activo este bucle para evitar que el programa divida por 0 (el pivote sea 0)
if
(
A
[
i
]
[
i
]
==
0
)
{
double
sum
=
0.0
;
for
(
int
x
=
i
+
1
;
x
<
n
;
x
++
)
{
if
(
A
[
x
]
[
i
]
!
=
0
)
{
sum
=
1
;
break
;
}
sum
=
sum
+
A
[
x
]
[
i
]
;
}
if
(
sum
==
0
)
{
u
=
1
;
break
;
}
}
if
(
u
==
1
)
{
break
;
}
int
a
=
i
+
1
;
//Permutamos las filas mientras el pivote sea 0
while
(
A
[
i
]
[
i
]
==
0
)
{
for
(
int
s
=
0
;
s
<
2
*
n
;
s
++
)
{
int
p
=
A
[
i
]
[
s
]
;
A
[
i
]
[
s
]
=
A
[
a
]
[
s
]
;
A
[
a
]
[
s
]
=
p
;
}
a
++
;
}
t
=
A
[
k
]
[
i
]
/
A
[
i
]
[
i
]
;
for
(
int
j
=
0
;
j
<
2
*
n
;
j
++
)
{
if
(
u
==
1
)
{
break
;
}
A
[
k
]
[
j
]
=
A
[
k
]
[
j
]
-
t
*
A
[
i
]
[
j
]
;
}
}
}
cout
<<
endl
<<
endl
;
//Muestro la matriz triangulada
cout
<<
"La matriz triangulada es:"
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
cout
<<
endl
<<
endl
;
//Aplico Gauss-Jordan
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
q
--
;
w
=
q
;
for
(
int
k
=
i
+
1
;
k
<
n
;
k
++
)
{
w
--
;
t
=
A
[
w
]
[
q
]
/
A
[
q
]
[
q
]
;
for
(
int
j
=
0
;
j
<
2
*
n
;
j
++
)
{
A
[
w
]
[
j
]
=
A
[
w
]
[
j
]
-
t
*
A
[
q
]
[
j
]
;
}
}
}
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
j
=
n
;
j
<
2
*
n
;
j
++
)
{
A
[
i
]
[
j
]
=
A
[
i
]
[
j
]
/
A
[
i
]
[
i
]
;
}
A
[
i
]
[
i
]
=
1
;
}
//Muestro la matriz diagonalizada y la inversa:
cout
<<
"La matriz diagonalizada y la inversa de A es:"
<<
endl
<<
endl
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
k
=
0
;
k
<
2
*
n
;
k
++
)
{
cout
<<
A
[
i
]
[
k
]
<<
" "
;
}
cout
<<
endl
;
}
system
(
"pause"
)
;
return
0
;
}
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problema inversa