Calcola il determinante della matrice

di il
3 risposte

Calcola il determinante della matrice

Buongiorno devo realizzare questo programma che calcola il determinante di una matrice ottenuta generando numeri casuali (e altre cosette)

il problema sta nel fatto che non riesco a fargli calcolare il determinante, qualcuno può dirmi dove sbaglio?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main()
{
    int a[3][3], b[3], c[3][6], i, j, X, seed, Y, z, deta;
    seed = time(NULL);
    srand(seed);

    for( i=0; i<3; i++ ) {          /* Genera numeri casuali tra [0,10] e li mette in b[i][j] */
       X = rand()%11;
       b[i] = X;
    }
    
    for( i=0; i<3; i++ ) {       
       printf("%d ",b[i]);       /* Stampa b[i][j] */
       printf("\n"); 
    }
    
    for( i=0; i<3; i++ ) {
        for ( j=0; j<3; j++ ) {      /* Genera numeri casuali tra [-9,9] e li mette in a[i][j] */
            Y = rand()%19 - 9;       /* copia a[i][j] in c[i][j+3] */
            a[i][j] = Y;
            c[i][j] = a[i][j];
            c[i][j+3] = a[i][j];
        }
    }
    
    for( i=0; i<3; i++ ) {
       printf("\n");
       for ( j=0; j<3; j++ ) {       /* Stampa a[i][j] */
           printf("%d ",a[i][j]);
       }
    }
    printf("\n");
    
    for( i=0; i<3; i++ ) {
       printf("\n");
       for ( j=0; j<6; j++ ) {       /* Stampa c[i][j] */
           printf("%d ",c[i][j]);
       }
    }
    printf("\n");
    
    printf("\nIl sistema di equazioni da risolvere e': \n");   /* Scrive il sistema di equazioni da risolvere eliminando il coefficiente se 
                                                               a[i][j] = 1 e eliminado anche l'incognita se vale 0 */ 
    for( i=0; i<3; i++) { 
        
        for( j=0; j<3; j++ ) {
            
            
            if( a[i][j] != 0 ) {
                
              if ( a[i][j] > 0 )
                 printf("+");
                
              if ( a[i][j] != 1 ) {
                 printf("%dx_%d",a[i][j],j+1);
              }
              else {
                 printf("x_%d",j+1);
              }
            
            }  
            else {
              printf("  ");  
            } 
               
        
        }
        printf("=%d",b[i]); 
        printf("\n");
    }
    printf("\n");
    
    
    int diag1 = 0;
    for( z=0; z<=2; z++) {
        i = 0;
        for( j=0; j<=2; j++) {
            diag1 = c[i][j] * c[i+1][j+1] * c[i+2][j+2] + diag1;
        }
    }
    
    printf("diag1 vale %d\n",diag1);
    
    int diag2 = 0;
    for( z=0; z<=2; z++) {
        i = 2;
        for( j=0; j<=2; j++) {
            diag1 = c[i][j] * c[i-1][j+1] * c[i-2][j+2] + diag2;
        }
    }
    printf("diag2 vale %d\n",diag2);
    
    deta = diag1 - diag2;
    printf("\nIl determinante della matrice A vale %d\n", deta);
        
    return 0;
}

3 Risposte

  • Re: Calcola il determinante della matrice

    Tutto sto delirio per una matrice 3x3?

    L'inizializzazione la fai così
    
    int main()
    {
        int a[3][3], i, j, deta = 0;
       
        srand(time(NULL));
    
        for( i=0; i<3; i++ ) 
            for ( j=0; j<3; j++ ) 
                a[i][j]= rand()%19 - 9;   
    
    Poi il determinante lo calcoli secondo la regola di Sarrus
    https://it.m.wikipedia.org/wiki/Regola_di_Sarru
    
     deta += a[0][0]*a[1][1]*a[2][2];
     deta += ...
     deta += ...
     deta -= a[0][2]*a[1][1]*a[2][0];
     deta -= ...
     deta -= ...
    
    completa tu le 4 righe che mancano
  • Re: Calcola il determinante della matrice

    Alla fine ho risolto cosi:
    
    int diag1 = 0;
        for( j=0; j<3; j++) {
            diag1 = c[0][j] * c[1][j+1] * c[2][j+2] + diag1;     /* Calcola la somma dei prodotti degli elementi sulle diagonali principali
                                                                   di c[i][j] */
        }
        
        int diag2 = 0;
           for( j=1; j<4; j++) {
            diag2 = c[2][j] * c[1][j+1] * c[0][j+2] + diag2;    /* Calcola la somma dei prodotti degli elementi sulle diagonali secondarie
                                                                   di c[i][j] */
        }
            
        deta = diag1 - diag2;    
        printf("\nIl determinante di A vale %d\n",deta);
    
  • Re: Calcola il determinante della matrice

    Nel caso tu sia interessato anche a matrici di ordine maggiore, dai un'occhiata qui:
    https://it.wikipedia.org/wiki/Metodo_di_eliminazione_di_Gauss#Algoritmo_di_Gauss
Devi accedere o registrarti per scrivere nel forum
3 risposte