Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-04-2004, 14:57   #1
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
[C] Matrici quadrate (calcolo del det. con Laplace)

Ciao Cercavo un' algoritmo in C che mi permetta di calcolare il determinante di una matrice con Laplace.

Grazie Mille a chi mi sarà di aiuto...
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2004, 13:26   #2
fabio_tarantino
Member
 
Iscritto dal: Nov 2002
Messaggi: 160
Perchè con Laplace?
Fai prima a trasformare la matrice data in una matrice triangolare superiore e poi calcoli il delta semplicemente moltiplicando gli elementi sulla diagonale principale.
fabio_tarantino è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2004, 19:48   #3
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
Codice:
Function f_detm0(a)
 Real(8) a( : , : )
 Integer ik(1:KK), jk(1:KK)
 
 Do i = 1, KK; ik(i) = i; jk(i) = i; End Do
 f_detm0 = f_detm(a, ik, jk, KK)
 
End Function



Recursive Function f_detm(a, ik, jk, k)   Result (detm)
 Real(8) a( : , : )
 Integer ik(1: ), jk(1: )
 Integer ik1(1:k - 1), jk1(1:k - 1)
 
 If (k == 2) Then
  detm = a(ik(1), jk(1)) * a(ik(2), jk(2)) - a(ik(1), jk(2)) * a(ik(2), jk(1))
 Else
  i = 1; iki = ik(i)
  Call minore(ik, ik1, i, k)
  isgn = 1; detm = 0.0
  Do j = 1, k
   Call minore(jk, jk1, j, k)
   detm = detm + isgn * a(iki, jk(j)) * f_detm(a, ik1, jk1, k - 1)
   isgn = -isgn
  End Do
 End If
 
End Function



Subroutine minore(ik, ik1, i0, k)
 Integer ik(1: ), ik1(1: )

 Do i = 1, i0 - 1
  ik1(i) = ik(i)
 End Do
 Do i = i0 + 1, k
  ik1(i - 1) = ik(i)
 End Do
 
End Subroutine

Ultima modifica di a2000 : 29-04-2004 alle 20:04.
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 01-05-2004, 21:36   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Prova con questo:
Codice:
#include <stdio.h>
#define SIZE 4

void trova_minore(int m[SIZE][SIZE], int size, int r, int c, int minore[SIZE][SIZE])
{
	int i1, i2, j1, j2;
	for(i1=i2=0; i1<size-1; ++i1,++i2)
	{
		if(i1 == r) ++i2;
		for(j1=j2=0; j1<size-1; ++j1,++j2)
		{
			if(j1 == c) ++j2;
			minore[i1][j1] = m[i2][j2];
		}
	}
}

int det(int m[SIZE][SIZE], int size, int rp)
{
	int minore[SIZE][SIZE], i, j;
	int result = 0, detm;
	printf("Calcolo determinate di :\n"); 
	for(i=0; i<size; ++i)
	{
		for(j=0; j<size; ++j)
			printf("%5d", m[i][j]);
		printf("\n");
	}
	if(size == 1) return m[0][0];
	for(i=0; i<size; ++i)
	{
		trova_minore(m, size, rp, i, minore);
		detm = det(minore, size-1, 0);
		result += (m[rp][i]) ? /*se l'elemento è diverso da zero*/
					((((rp + i) % 2) ? -1 : 1) * /*-1 se rp+i è dispari altrimenti +1*/
					m[rp][i] * detm) /*elmento * det(Aij)*/
					: 0; /*ritorna zero se l'elemento è nullo*/
	}
	return result;
}

int main()
{
	int m[SIZE][SIZE];
	int i, j;
	for(i=0; i<SIZE; ++i)
		for(j=0; j<SIZE; ++j)
		{
			printf("Inserisci il valore dell'elemento (%d,%d): ", i+1, j+1);
			scanf("%d", &m[i][j]);
		}
	
	printf("Determinante = %d", det(m,SIZE,0));
	return 0;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-05-2004, 16:25   #5
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
perfetto cionci funziona...grazie

Un'altra domanda è.
Nel testo è specificato che non è possibie utilizzare array per allocare i minori della matrice, che metodo posso usare?
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 03-05-2004, 20:52   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Azzz...come non è possibile ?
Non era meglio se lo dicevi prima ?

Sinceramente ora non mi viene niente in mente...probabilmente si può fare qualcosa con la ricorsione...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-05-2004, 23:34   #7
Dark_Tranquillity
Member
 
Iscritto dal: Mar 2001
Messaggi: 53
io ho trovato questa funzione in java:
Codice:
private long det (int [][] matrice, int ordine) {
   long risultato = 0;
   int [][] nuova;
   int pos;

   if (ordine == 2)
      risultato = matrice[0][0] * matrice[1][1] - matrice[0][1] * matrice[1][0];
   else {
      nuova = new int[ordine-1][ordine-1];
      for (int k=0; k<ordine;k++) {
         for (int i=1; i<ordine; i++) {
            pos = 0;
            for (int j=0; j<ordine; j++)
               if (j != k) {
                  nuova[i-1][pos] = matrice[j];
                  pos++;
               }
         }

         if ((k % 2) == 0)
            risultato = risultato + matrice[0][k] * det(nuova, (ordine-1));
         else
            risultato = risultato - matrice[0][k] * det(nuova, (ordine-1));
      }
   }

   return risultato;
}

ma come si traduce:
nuova = new int[ordine-1][ordine-1];

Ultima modifica di Dark_Tranquillity : 03-05-2004 alle 23:48.
Dark_Tranquillity è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2004, 09:51   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Anche quello usa le matrici per contenere i minori...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2004, 10:55   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ecco qua:
Codice:
#include <stdio.h>
#define SIZE 5

void scambia_righe(int m[SIZE][SIZE], int size, int r1, int r2, int start)
{
	int i, tmp;
	for(i=start; i<size; ++i)
	{
		tmp = m[r1][i];
		m[r1][i] = m[r2][i];
		m[r2][i] = tmp;
	}
}

int det(int m[SIZE][SIZE], int size, int start)
{
	int r;
	int sgn = 1;
	int risultato = 0;
	
	if(start == (size - 1))
		return m[size-1][size-1];
	
	for(r=start; r<size; ++r)
	{
		if(r != start)
		{
			sgn = -1; /*scambiando due righe il determinante del minore cambia di segno*/
			scambia_righe(m, size, start, r, start);
		}
		
		risultato += sgn * m[start][start] * det(m, size, start+1);
		
		if(r != start)
			scambia_righe(m, size, start, r, start);
	}
	return risultato;
}

int main()
{
	int m[SIZE][SIZE];
	int i, j;
	for(i=0; i<SIZE; ++i)
		for(j=0; j<SIZE; ++j)
		{
			printf("Inserisci il valore dell'elemento (%d,%d): ", i+1, j+1);
			scanf("%d", &m[i][j]);
		}
	
	printf("Determinante = %d", det(m,SIZE,0));
	return 0;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2004, 15:00   #10
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
Codice:
Recursive Function f_detm(a, jk, k)  Result(detm)
 Real(8) a(1: KK, 1: KK)
 Integer jk(1 : k)
 Integer jk1(1 : k)

 If (k == 2) Then
  detm = a(KK - 1, jk(1)) * a(KK, jk(2)) - a(KK - 1, jk(2)) * a(KK, jk(1))
 
 Else
  jk1(1:k-1) = jk(2:k)
  detm = 0d0 ; isgn = -1
  k1=k-1; i = KK - k1
  Do j = 1, k
   isgn = -isgn
   detm = detm + isgn * a(i, jk(j)) * f_detm(a, jk1, k-1)
   jk1(j) = jk(j)
  End Do
   
 End If

End Function

12 x 12 in 0.10 secondi
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2004, 16:35   #11
fabio_tarantino
Member
 
Iscritto dal: Nov 2002
Messaggi: 160
hai usato Laplace per il calcolo del determinante?


Quote:
Originariamente inviato da a2000
Codice:
Recursive Function f_detm(a, jk, k)  Result(detm)
 Real(8) a(1: KK, 1: KK)
 Integer jk(1 : k)
 Integer jk1(1 : k)

 If (k == 2) Then
  detm = a(KK - 1, jk(1)) * a(KK, jk(2)) - a(KK - 1, jk(2)) * a(KK, jk(1))
 
 Else
  jk1(1:k-1) = jk(2:k)
  detm = 0d0 ; isgn = -1
  k1=k-1; i = KK - k1
  Do j = 1, k
   isgn = -isgn
   detm = detm + isgn * a(i, jk(j)) * f_detm(a, jk1, k-1)
   jk1(j) = jk(j)
  End Do
   
 End If

End Function

12 x 12 in 0.10 secondi
fabio_tarantino è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2004, 17:05   #12
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
sì.
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2004, 19:00   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
a2000: hai alocato altri vettori, non vale
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2004, 08:06   #14
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
puntatori. vale.
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2004, 08:23   #15
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
Quote:
Originariamente inviato da Dark_Tranquillity
Nel testo è specificato che non è possibie utilizzare array per allocare i minori della matrice
a2000 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
iPhone Duo, il debutto del pieghevole di...
Atlas 960E SuperPoD, la risposta di Huaw...
IA militare e nucleare: esperti USA e ci...
Dieci mini-reattori nucleari in Europa d...
CONTROL Resonant su PC: Path Tracing, Ra...
ColorOS 17 arriva su circa 90 dispositiv...
GTA VI, il multiplayer potrebbe debuttar...
Aggiornamento KB5002914 rompe Excel: ecc...
Processo Huawei a Brooklyn: l'FBI mostra...
WhatsApp introduce nuovi temi per le cha...
NVIDIA, Google e Emerald AI uniscono le ...
iPhone 18 Pro Max, il test sulla vapor c...
Fine estate in giardino: le proposte sco...
Batterie allo stato solido dietro l'ango...
Gears of War: E-Day raggiunge la fase Go...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v