Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
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'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-01-2012, 19:25   #1
mesonepigreco
Member
 
L'Avatar di mesonepigreco
 
Iscritto dal: Oct 2011
Messaggi: 48
[C/C++] Algoritmo per calcolare gli invarianti secondari delle matrici quadrate

Ciao a tutti,
Non riesco a trovare un algoritmo per calcolare gli invarianti secondari delle matrici quadrate. È chiaramente banale il problema se si conosce in anticipo l'ordine dell'invariante, ma vorrei scrivere una funzione che prende in input l'ordine dell'inveriante, la matrice e la sua dimensione e restituisce l'invariante di quell'ordine, il prototipo dovrebbe essere qualcosa del genere
Codice:
double OttieniInvariante(double Matrice[][1000], int dimensione, int ordine);
Per chi non lo sapesse un invariante di ordine k è la somma dei determinanti di tutte le possibili sottomatrici di ordine k costruite sulla diagonale della matrice data.
Lo scopo del programma è quello di usare gli invarianti primari (traccia e determinante) e secondari per costruire il polinomio caratteristico di una matrice, e trovare dunque gli autovalori.

So che è complicato, ma ho già scritto alcune funzioni possono essere utili per questo, ecco i prototipi:
Quote:
int RiduciAScala(double Matrice[][N_MAX], int n);
// Riduce a scala la matrice con l'algoritmo di Gauss-Jordan

double Determinante(double Matrice[][N_MAX], int n);
// Calcola con lo sviluppo di Laplace il determinante della matrice

double ComplementoAlgebrico(double Matrice[][N_MAX], int n, int riga, int colonna);
// Calcola il complemento algebrico della matrice nella riga e nella colonna data

void stampa(double Matrice[][N_MAX], int n);
//Stampa a schermo la matrice

void CalcolaInversa(double Matrice[][N_MAX], int n, double inversa[][N_MAX]);
// Calcola la matrice inversa salvando il risultato in inversa

void Trasposta(double Matrice[][N_MAX], int n, double trasposta[][N_MAX]);
// Transpone la matrice, salvando il risultato in trasposta

void ProdottoRigheXColonne(double m1[][N_MAX], double m2[][N_MAX], int n, double ris[][N_MAX]);

void CalcolaSottomatrice(double Matrice[][N_MAX], int n, int riga, int colonna, double ridotta[][N_MAX]);
// Calcola la sottomatrice ottenuta togliendo dalla matrice la riga e la colonna data e salvando il risultato in ridotta
Grazie mille in anticipo!
__________________
Opok il nuovo gioco open source ispirato ai Pokemon (fatto da me ;-D) (http://sourceforge.net/projects/opok/):

Ultima modifica di mesonepigreco : 16-01-2012 alle 09:29.
mesonepigreco è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2012, 15:52   #2
mesonepigreco
Member
 
L'Avatar di mesonepigreco
 
Iscritto dal: Oct 2011
Messaggi: 48
Entro un po' nel dettaglio del mio problema.
Allora, ho ragionato un po' sul problema, e penso che si possa risolvere in più passaggi:
  1. Generare un array contenente tutte le possibili combinazioni di numeri da 1 alla dimensione della matrice come nell'esempio:
    k = 1 Matrice di dimensione 4x4
    {1} {2} {3} {4}
    k = 2 Matrice di dimensione 4x4
    {1,2} {1,3} {1,4} {2,3} {2,4} {3,4}
    k = 3 Matrice di dimensione 4x4
    {1,2,3} {1,2,4} {1,3,4} {2,3,4}
    k = 4
    {1,2,3,4}
  1. A questo punto si crea una sottomatrice per ognuno degli array in cui si sono tolte tutte le righe e le colonne che non appartengono all'array
    es:
    Matrice 4X4 Array: {1,2,4}
    tolgo la terza riga e la terza colonna (non appartengono all'array)
    Matrice 4x4 Array {2,3}
    tolgo la prima riga e la quarta riga e colonna (1 e 4 non sono nell'array)
  1. Sommo tra di loro i determinanti delle matrici così ottenute e ho il valore dell'invariante.

Il problema rimane come fare il punto primo?
Non riesco a scrivere una funzione che generi questi array, il prototipo dovrebbe essere qualcosa del genere
Codice:
int GeneraArrays(int Array[][100], int k, int max);
// Genera questi array e li salva in Array, con k elementi generati da max numeri, e ritorna il numero di array generati
Mi è venuto in mente che per farlo, basterebbe generare un gruppo simmetrico e poi salvare la posizione dei primi k numeri, poi cancellare tutti quelli che non sono in ordine crescente:
es.
k = 2; numeri da 1 a 3
{1,2,3} {1,3,2} {2,1,3} {3,2,1} {3,1,2}{2,3,1} // Questo sono in numero 3!
Prendo le posizioni dei primi k numeri:
{1,2} {1,3}{2,1}{3,1}{2,3}{3,1} // Anche questi sono in numero 3!
Elimino quelli non ordinati:
{1,2}{1,3}{2,3} // e ho quello che voglio

Il problema è, come genero questi array?
k = 2; numeri da 1 a 3
{1,2,3} {1,3,2} {2,1,3} {3,2,1} {3,1,2}{2,3,1}????????

Aiuto!!!!
__________________
Opok il nuovo gioco open source ispirato ai Pokemon (fatto da me ;-D) (http://sourceforge.net/projects/opok/):
mesonepigreco è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2012, 16:48   #3
mesonepigreco
Member
 
L'Avatar di mesonepigreco
 
Iscritto dal: Oct 2011
Messaggi: 48
Non fa niente, ho trovato l'algoritmo dei gruppi simmetrici da solo,
se ci fosse la remota possibilità che qualcunaltro si inbatta in questo problema ecco l'algoritmo:
Codice:
si parte da k = 1
il gruppo vale 1.

k = 2. Si aggiunge 2 in  tutte le posizioni possibili del gruppo precedente:
2 1
1 2

k = 3. Si aggiunge 3 in tutte le posizioni possibili:
3 2 1
3 1 2

2 3 1
1 3 2

2 1 3
1 2 3

k = 4. Si aggiunge 4 in ogni possibile posizioni delle permutazioni di k = 3:
4 3 2 1
4 3 1 2
4 2 3 1
4 1 3 2
4 2 1 3
4 1 2 3

3 4 2 1
3 4 1 2
.....
Adesso devo solo implementare tutto in C, ma non sembra essere troppo impossibile.
__________________
Opok il nuovo gioco open source ispirato ai Pokemon (fatto da me ;-D) (http://sourceforge.net/projects/opok/):
mesonepigreco è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Tesla Semi arriva in Europa: fino a 500 ...
realme 16 Pro Harry Potter Edition &egra...
Siri potrebbe permettere di scegliere tr...
OpenAI acquisisce Glass Imaging per oltr...
Steam Deck 2: Valve non trova ancora il ...
Il CEO di Microsoft chiede una supervisi...
Dreame T15 Pro Heat, aspira la polvere e...
Apple rilascia iOS 27, iPadOS 27 e macOS...
DDRop, l'attacco hardware da meno di 200...
LG OLED G6 55'' a 1.368€ e LG NANO 98'' ...
OpenRGB 1.0 arriva dopo tre anni: una so...
OpenAI paga centinaia di revisori per le...
Opel scarica l'adrenalina elettrica al S...
Volkswagen Mission Efficiency: Cd di 0,1...
Dreame L10s Pro Gen 3 a 179€: ottimo pre...
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: 10:02.


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