Fortran - Programacion de multiplicacion de matrices complejas en subrutina

 
Vista:

Programacion de multiplicacion de matrices complejas en subrutina

Publicado por Mauricio Duque (1 intervención) el 17/07/2014 02:05:28
Buenas Tardes comunidad,

Antes que nada, gracias por cualquier comentario o sugerencia.

Mi duda es la siguiente, estoy trabajando con fortran 90, y estoy haciendo el producto de matrices complejas en una subrutina. La cuestion es que todas las matrices son complejas, asi que para verificar que el producto es correcto, determino la parte imaginaria. La cuestion es que al hacer la tercera multiplicacion no la realiza.
el producto es el siguiente,

! ---------------------------------------------------------------------------
matD = matmul(matFG1,matFSRL);
PartD1 = matmul(matFSLR,matD);
matD = matmul(matFG4,PartD1)
! ---------------------------------------------------------------------------

donde matFG1, matFSRL matFSLR, matFG4 son matrices complejas que son leidas desde otra subrutima.

La cuestion es que para verificar que es correcto, las escribo en un archivo con el mismo formato, pero al realizar la tercera multiplicacion y respectivamente escribir el archivo varios elementos de la matriz son (asterisco) ********.

Mi pregunta un poco abusiva porque sucede esto y como lo puedo corregir?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Programacion de multiplicacion de matrices complejas en subrutina

Publicado por Sebastian (10 intervenciones) el 19/07/2014 03:21:00
Hola Mauricio.
Tu problema es que no usas el formato adecuado en los datos de salida. Para que quede más claro pongo un ejemplo:
1
2
3
4
5
6
7
8
PROGRAM test
     IMPLICIT NONE
     REAL(KIND=4) :: x, y
          x = 5.5
          y = -15.5
          WRITE(*,'(F4.1)') x
          WRITE(*,'(F4.1)') y
END PROGRAM
la salida de este programa será:
5.5
****
justamente tu problema. La función WRITE(*,'(F4.1)') dice que escriba en konsola un flotante de 4 dígitos y un decimal. Siempre debes considerar el punto y el signo negativo, por ejemplo en el caso anterior si escribes WRITE(*,'(F5.1)') y la salida será:
5.5
-15.5

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar