Bonjour,

j'essaye actuellement de faire un produit de Kronecker en fortran 90.

Voici le code de ma fonction:

MODULE kronec

!
! Calcul du produit de kronecker par la fonction kron
!

!IMPLICIT NONE


CONTAINS

FUNCTION kron(A,B)

IMPLICIT NONE

!!
!!! Calcul du produit de kronecker, equivalent de la fonction kron matlab
!!


REAL, dimension( : , : ) , intent(in) :: A,B


REAL, dimension(size(B,1),size(B,2),size(A,1),size(A,2)) :: C
REAL, dimension(size(A,1)*size(A,2),size(B,1)*size(B,2)) :: kron

INTEGER :: i, j, m, n, p, q, ii, jj
INTEGER :: ind1, ind2, ip, jq, mp, nq


m = size(A,1)
n = size(A,2)
p = size(B,1)
q = size(B,2)

!m=2
!n=3
!p=4
!q=5


mp = m*p
nq = n*q


DO i = 1,m
DO j = 1,n
DO ii = 1,p
DO jj = 1,q
C(ii,jj,i,j) = A(i,j)*B(ii,jj)
END DO
END DO
END DO
END DO


DO i = 1,m
ind1 = (i-1)*p+1
ip = i*p
DO j = 1,n
ind2 = (j-1)*q+1
jq = j*q
kron(ind1:ip,ind2:jq) = C(:,:,i,j)
END DO
END DO



WRITE(*, *) 'C=', C

WRITE(*, *) 'C(:,:,1,1)=',C(:,:,1,1)



END FUNCTION kron



END MODULE kronec

Je sais que je calcule bien ce qu'il faut avec le tableau C. Cependant lorsque je veux ranger les valeurs dans la matrice kron, il y a un problème: à partir de la deuxième colonne (jusqu'à la fin) et pour les deux premières lignes le récupère les valeurs sur les deux dernières lignes depuis la première colonne jusqu'à l'avant dernière.

Donc je sais que c'est un problème d'indice, mais je n'arrive pas à le résoudre.

Si quelqu'un à une idée, je suis preneur, merci d'avance