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
Partager