Algoritmo per calcolo prodotto di matrici

Messaggioda Andry459 » 15/09/2011, 09:38

Salve, sto facendo un vecchio (2004) esercizio trovato su un sito, relativo ad Analisi numerica.

Date D (matrice diagonale nxn) e B (matrice generica nxn) dire:

1) se \( \displaystyle {D}{B}={B}{D} \)

risolto, basta che la matrice D abbia tutti elementi uguali sulla diagonale affinché l'uguaglianza sia vera, altrimenti sarà vero \( \displaystyle {D}{B}={{\left({B}{D}\right)}}^{{T}} \)

2) descrivere due algoritmi che calcolano i prodotti DB e BD con costo \( \displaystyle {O}{\left({{n}}^{{2}}\right)} \) e fornire una implementazione in pseudocodice

questo non riesco a farlo(o meglio c'ho provato). scrivendo le matrici mi accorgo che per moltiplicarle devo solo moltiplicare l' elemento della diagonale (quindi per a i,i che va da (i=1 a i=n)) per un solo valore della seconda matrice, secondo il mio ragionamento ,credo sbagliato, mi viene un costo pari a 1 operazione per ogni elemento fino ad n (per coprire tutte la colonne) per n che è la dimensione delle matrici(per le righe), quindi \( \displaystyle {O}{\left({{n}}^{{2}}\right)} \) può andare?

ma l'implementazione in pseudocodice come la faccio?

3) se \( \displaystyle {v}\in{\mathbb{R}}^{{n}} \) trovare un algoritmo che calcoli \( \displaystyle {D}{B}{v} \) con costo asintotico \( \displaystyle {2}{{n}}^{{2}} \) operazioni

questo non riesco a capire come può venire \( \displaystyle {2}{{n}}^{{2}} \) operazioni..


Se potete aiutarmi a capire ve ne sarò infinitamente grato!
Grazie mille
Andry459
Starting Member
Starting Member
 
Messaggi: 19
Iscritto il: 10/06/2011, 17:04

Re: Algoritmo per calcolo prodotto di matrici

Messaggioda vict85 » 15/09/2011, 15:29

Per il primo si tratta di notare che devi semplicemente scalare le righe e le colonne. Lo pseudocodice usato sarà qualcosa del tipo:

Codice: Seleziona tutto
INPUT dense nxn matrix B
      diagonal nxn matrix D as vector
OUTPUT dense nxn matrix R = DB
for i = 1 to n do
for j = 1 to n do
R(i,j) = D(i) * B(i,j);
end for
end for


Ma il tuo libro userà uno pseudocodice suo. Quindi vedilo e imparalo.
L'altro è del tutto simile.

Per il punto 3 uso lo stesso pseudocodice.

Codice: Seleziona tutto
INPUT dense nxn matrix B
      diagonal nxn matrix D as vector
      n vector v
OUTPUT n vector V = DBv
for i = 1 to n do
V(i) = 0;
for j = 1 to n do
temp := D(i) * B(i,j);
V(i) += temp * v(j);
end for
end for


Immagino che intenda questo metodo. Lo puoi anche dividere in due gruppi di cicli in realtà.
vict85
Cannot live without
Cannot live without
 
Messaggi: 3383
Iscritto il: 16/01/2008, 00:13
Località: Torino

Re: Algoritmo per calcolo prodotto di matrici

Messaggioda Andry459 » 15/09/2011, 21:23

Grazie , era proprio questo quello che cercavo di acpire.

Per il codice posso usare quello che preferisco, anche un linguaggio vero e proprio volendo..

Grazie mille!
Andry459
Starting Member
Starting Member
 
Messaggi: 19
Iscritto il: 10/06/2011, 17:04

Re: Algoritmo per calcolo prodotto di matrici

Messaggioda hamming_burst » 16/09/2011, 15:26

ma la complessità \( \displaystyle {O}{\left({{n}}^{{2}}\right)} \) per la moltiplicazione di queste due matrici, è dovuta unicamente al fatto che una di esse è diagonale, giusto? se no mi pare parecchio errata sta complessità... :-)
"Un giorno tutti noi sciocchi saremo morti e allora i vivi andranno avanti. ... tutti gli uomini saranno fratelli e nessuno se ne starà al sole in panciolle a farsi nutrire dai suoi compagni"
[Jack London]

HOFL...che stress!!
Avatar utente
hamming_burst
Moderatore
Moderatore
 
Messaggi: 2266
Iscritto il: 04/07/2009, 10:53

Re: Algoritmo per calcolo prodotto di matrici

Messaggioda Andry459 » 16/09/2011, 15:59

Si si , la matrice D è diagonale.
Andry459
Starting Member
Starting Member
 
Messaggi: 19
Iscritto il: 10/06/2011, 17:04


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

cron