Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1468 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Calculs de normes matricielles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Calculs de normes matricielles

n°1625624
Goodspeed2​1
Posté le 17-10-2007 à 15:47:38  profilanswer
 

Salut tout le monde,
 
Je débute en programmation et j'aurais besoin d'un petit coup de pouce. Je dois calculer les normes matricielles (norme 1 et norme infinie). J'ai essayé de le sprogrammer, à la compilation ça passe, par contre je ne comprends pas pourquoi ça plante à l'exécution. Je vous mets ici mon code pour la norme 1 (pour la norme infinie il suffit juste de permuter les indices) :
 
main.c :

Code :
  1. #include <stdio.h>
  2. #include "functions.h"
  3. int main ()
  4. { int i,j,c,nrows,ncols;
  5.     double **mat;
  6. double res1,res3;
  7. printf("Choose the norm you want to calculate :\n 1. l1 norm\n 2. linf norm\n " );
  8. scanf("%d",&c);
  9. printf("Please input the number of rows and columns for the matrix. These numbers must be the same :\n" );
  10.     scanf("%d %d",&nrows,&ncols);
  11. mat = dmatrix(nrows,ncols); /* dynamic allocation for the matrix*/
  12. printf("Please input the %d*%d matrix elements :\n",nrows,ncols);
  13. /*nested loop*/
  14. for (i=0;i<nrows;i++)
  15.   {
  16.    for (j=0;j<ncols;j++)
  17.     {
  18.      scanf("%lf",&mat[i][j]);
  19.     }
  20.   }
  21. switch (c)
  22. {case 1: res1=norm1(mat,nrows,ncols);
  23.    printf("The result is %lf", res1);
  24.    break;
  25.      case 2: res3=norminf(mat,nrows,ncols);
  26.    printf("The result is %lf", res3);
  27.    break;
  28. }
  29. /* frees the memory for the matrix */
  30. for (i=0;i<nrows;i++)
  31.  {
  32.   free(mat[i]);
  33.  }
  34. free(mat);
  35. }


 
functions.c (contient les fonctions qui vont calculer les normes)
 

Code :
  1. #include <math.h>
  2. double norminf(double **mat ,int nrows, int ncols)
  3. {
  4. double sum, res;
  5. int i,j;
  6. res=0;
  7. sum=0;
  8. for(i=0;i<=nrows;i++)
  9.  {
  10.    for(j=0;j<=ncols;j++)
  11.   {
  12.     sum = sum + fabs(mat[i][j]);
  13.     if(sum>res)
  14.    {
  15.      res=sum;
  16.    }
  17.   }
  18.  }
  19. return(res);
  20. }
  21. double norm1(double **mat ,int nrows, int ncols)
  22. {
  23. double sum, res;
  24. int i,j;
  25. res=0;
  26. sum=0;
  27. for(j=0;j<=ncols;i++)
  28.  {   
  29.   for(i=0;i<=nrows;i++)
  30.   {
  31.    sum = sum + fabs(mat[i][j]);
  32.    if(sum>res)
  33.     {
  34.      res=sum;
  35.     }
  36.   }
  37.  }
  38. return(res);
  39. }


 
memory.c (gestion de la mémoire dynamique)

Code :
  1. #include <stdio.h>
  2. /* dynamic memory allocation function for a matrix */
  3. double ** dmatrix (int nrows, int ncols)
  4. {
  5. double **mat; /* matrix */
  6. int i;
  7. mat = (double **)malloc(nrows*sizeof(double*));
  8. for(i=0;i<nrows;i++)
  9.  {
  10.   mat[i] = (double *)malloc(ncols*sizeof(double));
  11.  }
  12. return mat;
  13. }


J'ai fait aussi un function.h pour les prototypes des fonctions. Est-ce que des programmeurs un peu plus expérimentés pourraient m'aider ? Merci bcp

mood
Publicité
Posté le 17-10-2007 à 15:47:38  profilanswer
 

n°1625826
olivthill
Posté le 17-10-2007 à 17:33:37  profilanswer
 

Il faut avoir inférieur strictement au lieu d'inférieur ou égal dans les boucles de fonctions.c, car la matrice a été allouée avec les bornes excluses.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Calculs de normes matricielles

 

Sujets relatifs
[résolu] normes w3c et naviguateurs[Excel] Fusionner plusieurs feuilles de calculs du meme classeur
Site aux normes?balise <script> : question à propos des normes W3C & validator
Tableaux de calculsNormes - On en est-on?
Créer un site E-commerce aux normes w3cCalculs Mathématiques en HTML ?
Le css et les normesfaire des calculs sur des binaires
Plus de sujets relatifs à : Calculs de normes matricielles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR