int main(int argc, char *argv[]) { int err; err = MPI_Init(&argc, &argv); if (err < 0) exit(1); int probleme = 0; int alteration = 0; int valeur = 0; int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (argc != 4) { printf( "Utilisation: lab01_partie1 noProbbleme nbAlterations valeurInitiale"); err = MPI_Finalize(); return 0; } probleme = atoi(argv[1]); alteration = atoi(argv[2]); valeur = atoi(argv[3]); if (probleme == 1) { if (rank == 0) printf("Solution au probleme no 1: \n"); resoudreProbUn(valeur, alteration); afficherMatrice(); if (rank == 0) printf("probleme1 resolu"); } else if (probleme == 2) { if (rank == 0) printf("Solution au probleme no 2: \n"); resoudreProbDeux(valeur, alteration); afficherMatrice(); } else { printf("Aucun probleme selectionne, le programme se termine\n"); } err = MPI_Finalize(); return 0; }
/** * Permet de remplir la matrice de caractères générés aléatoirement * @param Mat Matrice de caractères comprenant les caractères générés ci-dessus */ void creaMatrice(char Mat[N][N]){ int i,j, nbAleatoire; srand (time (NULL)); // Obligatoire for(i=0;i<N;i++) { for(j=0;j<N;j++) { nbAleatoire = rand_a_b(0,1533628); Mat[i][j] = getLettreRandom(nbAleatoire); } } afficherMatrice(Mat); }
int main(int argc, char ** argv){ double delta; int cptIteration = 0; double T[LARGEUR+2][HAUTEUR+2], T1[LARGEUR+2][HAUTEUR+2]; //INITIALISATION delta = MAX; int cptI, cptJ; for(cptI = 0; cptI < LARGEUR+2; cptI++){ for(cptJ = 0; cptJ < HAUTEUR+2; cptJ++){ if(cptI == 0 || cptI == LARGEUR+1 || cptJ == 0 || cptJ == HAUTEUR+1){ T[cptI][cptJ] = MAX; T1[cptI][cptJ] = MAX; } else{ T[cptI][cptJ] = 0; T1[cptI][cptJ] = 0; } } } while(delta >= SEUIL){ delta = 0; int i, j; for(i = 1; i <= LARGEUR; i++){ for(j = 1; j <= HAUTEUR; j++){ T1[i][j] = (T[i][j+1] + T[i][j-1] + T[i+1][j] + T[i-1][j] + T[i][j]) / 5; delta = delta + abs(T1[i][j] - T[i][j]); int cptL; int cptC; for(cptL = 0; cptL <= LARGEUR+1; cptL++){ for(cptC = 0; cptC <= HAUTEUR+1; cptC++){ T[cptL][cptC] = T1[cptL][cptC]; } } } } if( (cptIteration % K) == 0){ afficherMatrice(T); printf("Delta = %f\n", delta); } cptIteration++; } }
void jacobi (double** a, double** b, double** xInit, int n, double prec) { int i, j, cpt; double residu=2*prec; double** xNext= (double**) malloc(n*sizeof(double*)); double** ax; double** axb; cpt=0; for (i=0; i<n; i++) //initialisation xNext { xNext[i]= (double*) malloc(sizeof(double)); } while (residu>=prec) { for (i=0; i<n; i++) { double somme1=0, somme2=0; for (j=0; j<i; j++) //avant l'élément diagonal { somme1=somme1+a[i][j]*xInit[j][0]; } for (j=i+1; j<n; j++) //après l'élément diagonal { somme2=somme2+a[i][j]*xInit[j][0]; } xNext[i][0]=(1/a[i][i])*(b[i][0]-somme1-somme2); } for(i=0; i<n; i++) { xInit[i][0] = xNext[i][0] ; //copie de xNext dans xInit pour la prochaine itération } ax=produitMatriciel(a, xNext, n, n, 1); //ax axb=difference(ax, b, n, 1); //ax - b residu=norme(axb, n); //norme de (ax - b) cpt++; //affichage printf("\nVecteur à l'itération %d :\n", cpt); afficherMatrice(xNext, n, 1); } //libération mémoire for (i=0;i<n;i++) { free(ax[i]); free(axb[i]); free(xNext[i]); } free(ax); free(axb); free(xNext); }
static void buttonAfficherMatrice( GtkWidget *widget,gpointer data ){ if(m == NULL) afficherMessage("Erreur: Aucune matrice chargee",data); else afficherMatrice(m); }
int main (int argc, char ** argv) { int n, j, g, choice; double p; double** A; int i=1; while (i!=0) { clear(); printf("Menu principal : Polynome caractéristique, valeurs propres et vecteurs propres\n\n"); printf("Choisir le mode de saisie de la matrice :\n"); printf("1- Utiliser le générateur de matrices\n"); printf("0- Entrer manuellement les valeurs\n"); printf("Votre choix : "); scanf("%d",&g); clear(); if(g) { printf("MENU : GENERATION DE MATRICES\n\n"); printf("Choisir un type de matrice à générer :\n"); printf("1. Creuse à 70%%\n"); printf("2. A bord\n"); printf("3. Ding-Dong\n"); printf("4. Franc\n"); printf("5. Hilbert\n"); printf("6. KMS\n"); printf("7. Lehmer\n"); printf("8. Lotkin\n"); printf("9. Moler\n"); printf("Votre choix : "); scanf("%d", &choice); printf("Dimension : "); scanf("%d", &n); switch (choice) { case 1: A=creuse70(n); break; case 2: A=bord(n); break; case 3: A=dingDong(n); break; case 4: A=franc(n); break; case 5: A=hilbert(n); break; case 6: printf("Parametre p : "); scanf("%lf", &p); A=kms(n,p); break; case 7: A=lehmer(n); break; case 8: A=lotkin(n); break; case 9: A=moler(n); break; } // Déplacement de afficher matrice pour l'afficher au-dessus du menu de choix, ainsi elle est systématiquement affichée } else { printf("Matrice A :\n"); printf("Dimension : "); scanf("%d",&n); A=creerRemplirMatrice(n,n); } convertMattoLatex(A,n,n); i=1; while (i!=0 && i!=9) { clear(); printf("Matrice :\n"); afficherMatrice(A, n, n); printf("\nQue voulez-vous faire ?\n"); printf("1- Méthode de Leverrier\n"); printf("2- Méthode de Leverrier améliorée\n"); printf("3- Méthode des Puissances Itérées\n"); printf("9- Nouvelle matrice (Menu principal)\n"); printf("0- Quitter\n"); printf("Votre choix : "); scanf("%d", &i); cleanBuffer(); //vidage buffer clear(); switch (i) { case 1: printf("Polynome caracteristique par Leverrier... \n"); leverrier(A,n); hitToContinue(); break; case 2: printf("Polynome caracteristique par Leverrier améliorée ... \n"); leverrierA(A,n); hitToContinue(); break; case 3: printf("Méthode des puissances itérées ... \n"); printf("Précision souhaitée : "); scanf("%lf", &p); cleanBuffer(); puissancesIt(A,n,p); hitToContinue(); break; } } //libération mémoire for (j=0; j<n; j++) { free(A[j]); } free(A); } return 0; }