[C] determinante matrice

bibus12

#include<stdio.h>
#include<stdlib.h>

int main() {

int **matrix;

int i,j;

int dim;

printf ("Dimensione della matrice: ");
scanf ("%d",&dim);

matrix = (int**) malloc(dim*dim*sizeof(int));
for (i=0; i<dim; i++) 

matrix[i] = (int*) malloc(dim*sizeof(int));




for (i=0; i<dim; i++) // senza { non iteri quanto segue fai un for con contenuto nullo
for (j=0; j<dim; j++) {

printf ("Elemento [%d][%d]: ",i+1,j+1);
scanf ("%d",&matrix[i][j]);

}

  printf("La matrice e':\n");

  for(i = 0; i <dim; i++) {
    for(j = 0; j <dim; j++)
      printf("%d ", matrix[i][j]);
    printf("\n");
  }
free(matrix);

return 0; }



Ho scritto questo codice per introdurre e stampare una qualsiasi matrice dinamica. Ora vorrei aggiungere una funzione che mi permettesse di calcolare il determinante della matrice. Il problema e' che , pur sapendo come calcolarlo matematicamente , escludendo quello per matrici con dimensione 0 1 e 2 , a partire da matrici con dim = 3 non saprei proprio come scrivere il codice.

L'unica cosa che ho trovato su internet al riguardo e' questa porzione di codice (http://paulbourke.net/miscellaneous/det ... erminant.c) ma vorrei che qualcuno mi desse qualche consiglio per poi poter la scrivere da sola.. Grazie

Risposte
giuscri
"ellosma":

Ho scritto questo codice per introdurre e stampare una qualsiasi matrice dinamica. Ora vorrei aggiungere una funzione che mi permettesse di calcolare il determinante della matrice. Il problema e' che , pur sapendo come calcolarlo matematicamente , escludendo quello per matrici con dimensione 0 1 e 2 , a partire da matrici con dim = 3 non saprei proprio come scrivere il codice.

L'unica cosa che ho trovato su internet al riguardo e' questa porzione di codice (http://paulbourke.net/miscellaneous/det ... erminant.c) ma vorrei che qualcuno mi desse qualche consiglio per poi poter la scrivere da sola.. Grazie


Se ti riconducessi ad una matrice triangolare, facendo poi il prodotto degli elementi sulla diagonale? (Attenta alla divisone per zero! :wink:)

minomic
Credo che l'approccio proposto da giuscri sia il migliore, comunque puoi anche pensare che il solito metodo per calcolare il determinante di una matrice, cioè lo sviluppo di Laplace, è un procedimento ricorsivo, quindi puoi partire da un elemento, generare la sotto-matrice che si ottiene eliminando la sua riga e la sua colonna dalla matrice di partenza e richiamare la funzione per il calcolo del determinante su questo minore. ;)

apatriarca
Se l'obiettivo è quello di ottenere il determinante di una matrice intera, è necessario fare alcune considerazioni sul metodo di giuscri. I metodi classici per fare la fattorizzazione desiderata sono infatti validi solo per matrici con coefficienti in un campo. In questo caso abbiamo solo un dominio euclideo. E' sempre possibile ricondursi ad una forma triangolare, ma l'algoritmo è un po' più complicato e potrebbe essere necessario usare interi più grandi di quelli base offerti dal C.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.