1 votos

¿Cómo puedo encontrar la matriz pivote a partir de la factorización LU?

Intento resolver la factorización LU con pivote:

$$PA=LU$$

Utilizando la subrutina sgeft2 de Lapack. Es una biblioteca de Fortran 90 para álgebra lineal numérica.

He encontrado el $L$ y $U$ matriz, pero no se ha encontrado la $P$ matriz, y es por la IPIV argumento.

IPIV is INTEGER array, dimension (min(M,N))
The pivot indices; for 1 <= i <= min(M,N), row i of the
matrix was interchanged with row IPIV(i).

Interprento este texto como debería tener una matriz de identidad $P \in \Re^{nxn}$ . Entonces debería mover las filas de $P$ dependiendo de lo que el vector $IPIV$ dice. ¿Es esto correcto? He intentado diferentes formas de modelar algún código de MATLAB, pero no consigo encontrar el $P$ matriz.

Ejemplo. Si tengo la matriz $A$

0.300000 0.815502 0.632273 0.217150 
0.041052 0.756497 0.383632 0.963453 
0.840969 0.653643 0.988885 0.256717 
0.464724 0.148658 0.405135 0.055045 
0.306172 0.033121 0.250060 0.465494 

Entonces me sale el $U$ matriz

0.840969 0.653643 0.988885 0.256717 
0.000000 0.724589 0.335359 0.950921 
0.000000 0.000000 -0.042955 0.192122 
0.000000 0.000000 0.000000 -0.593969

Y $L$ matriz

1.000000 0.000000 0.000000 0.000000 
0.048815 1.000000 0.000000 0.000000 
0.552605 -0.293337 1.000000 0.000000 
0.356731 0.803665 -0.232571 1.000000 
0.364071 -0.282713 0.352770 -0.964855 

También debería obtener el $P$ matriz

   0   0   1   0   0
   0   1   0   0   0
   0   0   0   1   0
   1   0   0   0   0
   0   0   0   0   1

Pero en cambio, debido a $IPIV$

3 2 4 4 4 

Tengo mi $P$ matriz

0.000000 0.000000 0.000000 0.000000 0.000000 
0.000000 1.000000 0.000000 0.000000 0.000000 
1.000000 0.000000 0.000000 0.000000 0.000000 
0.000000 0.000000 1.000000 1.000000 1.000000 
0.000000 0.000000 0.000000 0.000000 0.000000 

¿Debo haber interpretado mal este texto de arriba?

0 votos

Su interpretación del texto es correcta. La IPIV debe utilizarse elemento por elemento para cambiar la identidad en la permutación final.

0 votos

@VorKir Pero no dará el resultado correcto.

1voto

VorKir Puntos 1

La IPIV debe procesarse de la siguiente "manera recursiva". Se comienza con la permutación de identidad 1 2 3 4 5.

1) IPIV(1)=3 significa que intercambias el primer y el tercer elemento. Tu permutación ahora es 3 2 1 4 5.

2) IPIV(2)=2 significa que se intercambia el segundo elemento actual con él mismo. Así, el resultado es de nuevo 3 2 1 4 5.

3) El resultado es 3 2 4 1 5

4) El resultado es 3 2 4 1 5

5) El resultado es 3 2 4 5 1

Parece que no coincide con la respuesta correcta. ¿Está seguro de que su IPIV no tiene 5 como último elemento?

0 votos

Sí. Muy seguro. ¿Puede probar la biblioteca con código C? Si no, puedo subir algo de código C, pero necesitas el compilador de Eclipse para ello.

0 votos

¿Quiere tener un ejemplo de código fuente?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X