Problème avec un programme en freefemcs++

J'essaye de programmer la matrice de Hadamard en freefem le programme donne des résultats pour n=1, n=2 et n=4 mais pour autres valeurs il signale une erreur a la ligne 32. Je ne vois pas l'erreur, est-ce que quelqu'un peut m'aider s'il vous plaît.
voici le code freefem que j'ai fait.
int n,i,j;
cout<<"Donner l'ordre de la matrice de Hadamard"<<endl;
cin>>n;
real [int,int] H(n,n),H2(2,2);
real H1=1;

H2(1,0)=1;
H2(0,1)=1;
H2(0,0)=1;
H2(1,1)=-1;

if(n==1)
   H=H1;
if(n==2)
   H=H2;

int m=2;
real [int,int] P(m,m);
P=H2;

if(n>2)
{
   m=4;
   real [int,int] P(m,m),F(m/2,m/2);
   F=H2;
   //cout<<"F="<<F<<endl;

   while(m<n || m==n)
   {
      for(i=0;i<m/2;i++)
         for(j=0;j<m/2;j++)
            P(i,j)=F(i,j);

      for(i=0;i<m/2;i++)
         for(j=0;j<m/2;j++)
            P(i+m/2,j)=F(i,j);

      for(i=0;i<m/2;i++)
         for(j=0;j<m/2;j++)
            P(i,j+m/2)=F(i,j);

      for(i=0;i<m/2;i++)
         for(j=0;j<m/2;j++)
            P(i+m/2,j+m/2)=-F(i,j);

      //cout<<"F="<<F<<endl;
      m=2*m;
      real [int,int] F(m/2,m/2);
      F=P;

      if(m<n)
      {
         real [int,int] P(m,m);
         P=0;
      }
      if(m>n)
      H=P;
   }
}
cout<<"La matrice de Hadamard d'ordre"<<n<<"est"<<H<<endl;

Réponses

  • peut-être le -F(... à remplacer par un -1*F(...
    Ce serait sympa de dire quelle est la ligne !
    Aline
  • int n,i,j,m;
    cout<<"Donner l'ordre de la matrice de Hadamard"<<endl;
    cin>>n;
    real [int,int] H(n,n),H2(2,2),P(n,n);
    real H1=1;
    P=0;
    
    H2(1,0)=1;
    H2(0,1)=1;
    H2(0,0)=1;
    H2(1,1)=-1;
    
    if(n==1)
    H=H1;
    
    if(n==2)
    H=H2;
    
    
    
    
    if(n>2)
    {
    m=4;
    P(1,0)=1;
    P(0,1)=1;
    P(0,0)=1;
    P(1,1)=-1;
    
    //cout<<"F="<<F<<endl;
    
    while(m<n || m==n)
    {
    
    for(i=0;i<m/2;i++)
    for(j=0;j<m/2;j++)
    H(i,j)=P(i,j);
    
    for(i=0;i<m/2;i++)
    for(j=0;j<m/2;j++)
    H(i+m/2,j)=P(i,j);
    
    for(i=0;i<m/2;i++)
    for(j=0;j<m/2;j++)
    H(i,j+m/2)=P(i,j);
    
    for(i=0;i<m/2;i++)
    for(j=0;j<m/2;j++)
    H(i+m/2,j+m/2)=-P(i,j);
    
    
    
    //cout<<"F="<<F<<endl;
    m=2*m;
    P=H;
    
    }
    }
    
    
    
    cout<<"La matrice de Hadamard d'ordre"<<n<<"est"<<H<<endl;
    
Connectez-vous ou Inscrivez-vous pour répondre.