Newsgroup: it.comp.dotnet
Titolo: Moltiplicazione tra matrici

Un saluto.
Sto programmando in c# .NET. Devo moltiplicare tra di loro due matrici, 
dichiarate come array bidimensionale:
double[,] A = new double[4,4];
double[,] B = new double[4,4];
Esiste un modo per calcolare direttamente il prodotto matriciale C=A*B? 
Oppure devo implementare a mano una funzione che esegui il prodotto 
righe per colonne?
Altrimenti se esiste ma per classi particolari sono disponibile a 
dichiarare le due matrici sopra con un diverso tipo di dato.

 righe per colonne?
Non esiste.
Dovrai svilupparlo da te.
-- 
http://carnefrisca.blogspot.com
http://frischfleisch.deviantart.com


per le matrici 3x3 c'ï¿œ la classe Matrix di GDI+:
http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.matrix.aspx
Per quelle 4x4 puoi usare la struct Matrix di WPF:
http://msdn.microsoft.com/en-us/library/system.windows.media.matrix.aspx
Sono pensate specificamente per l'elaborazione grafica ma le operazioni 
ovviamente sono le stesse, quindi sei servito.
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/


Ecco, adesso vado OT ma ne approfitto per sentire altri pareri...
Prendiamo ad esempio l'interfaccia della Matrix di WPF:
vedo property tipo Determinant e HasInvese
Ecco la mia domanda: secondo me mettere roba di questo tipo (che 
richiede calcoli e quindi tempo) dietro una property puï¿œ generare 
confusione.
Provo a spiegarmi:
tralasciamo per un attimo il fatto che nel caso in questione (matrici 
3x3) il calcolo in questione sia quasi banale e molto veloce e 
concentriamoci sul concetto.
Sappiamo tutti che le property altro non sono che "zucchero sintattico" 
ma vedendo quelle property, io come utilizzatore sono portato a pensare 
che internamente sia presente per lo meno un qualche meccanismo di 
caching per evitare che il valore venga ricalcolato tutte le volte.
E invece, sbircio con ILSpy e... scopro che il valore viene ricalcolato.
Per poi non parlare dell'implementazione di IsInvertible nella 
System.Drawing.Drawing2D.Matrix:
// System.Drawing.Drawing2D.Matrix
public bool IsInvertible
{
	get
	{
		int num2;
		int num = SafeNativeMethods.Gdip.GdipIsMatrixInvertible(new 
HandleRef(this, this.nativeMatrix), out num2);
		if (num != 0)
		{
			throw SafeNativeMethods.Gdip.StatusException(num);
		}
		return num2 != 0;
	}
}
E allora chiedo: non era meglio dichiararle come metodo anzichï¿œ come 
property???? Oppure documentare il fatto che sotto il cofano non 
ritornano semplicemente un valore ma eseguono calcoli?

 semplicemente un valore ma eseguono calcoli?
Concordo con la tua analisi, ma se ci atteniamo alla richiesta di Pidi, 
puï¿œ fare affidamento su una "buona" implementazione senza reinventare 
l'acqua calda.
Ma ti do assolutamente ragione sul fatto che le proprietï¿œ dovrebbero 
essere 'light'.
Aggiungo anche che il pattern MVVM peggiora di molto la situazione.
Proprio perchï¿œ MVVM si basa sul concetto di proprietï¿œ modificata, sui 
setter delle proprietï¿œ sono agganciate i metodi di "propertychanged" 
dietro cui si nasconde spesso un notevole lavoro.
Personalmente avrei preferito un meccanismo che permettesse di 
schedulare (presso il dispatcher) l'esecuzione di un metodo anzichï¿œ 
l'esecuzione sincrona.
Nonostante tutto MVVM ï¿œ un 'must' non solo in WPF ma (a mio avviso) 
anche in MVC (che chiamerei MVVMC).
Extra-OT :)
Mi ï¿œ capitato di debuggare codice di altri in cui i getter cambiano lo 
stato dell'oggetto! Questo provoca comportamenti assurdi sotto debugger 
perchï¿œ nella finestra dei watch c'era una proprietï¿œ il cui getter 
veniva giustamente chiamato da visual studio per aggiornare la view del 
debugger e continuava a cambiare lo stato dell'oggetto.


 stato dell'oggetto!
...
Extra-Extra-OT :):)
...certo che se in .NET esistesse const ....

 wrote in message 
news:4e042ee4$0$15672$4faf...@reader2.news.tin.it...

Si potrebbero fare porcherie ancora piu' sofisticate... :)
-LV
 
--- Posted via news://
freenews.netfront.net/
 - Complaints to 
ne...@netfront.net
 ---

 ...certo che se in .NET esistesse const ....
Non sai quante volte mi ï¿œ mancato :)
Che se poi guardi l'introduzione di "in" e "out" usato per la 
covarianza e la controvarianza di C# 4.0, ï¿œ usato ben per quello ...


 
http://msdn.microsoft.com/en-us/library/system.windows.media.matrix.aspx
Ho delle matrici 4x4, ma sto usando Windows Forms e non WPF. Quindi ho 
optato per la creazione di una funzione self maid.
Grazie

 anche in MVC (che chiamerei MVVMC).
ti dirï¿œ: visto che tanto quello che si usa attualmente *non* ï¿œ MVC 
(anche se tuti lo chiamano cosï¿œ) bensï¿œ "Model 2", io ormai faccio cosï¿œ:
- Definisco il ViewModel specifico di una view
- implemento uno o piï¿œ servizi che, consumati dalla action del 
controller, fanno I/O (ergo, da gateway) del viewmodel tra il controller 
stesso e la logica applicativa. In "lingua DDD" questi servizi sarebbero 
l'application layer, ma io li chiamo "worker services" per rimanere 
agnostico rispetto a metodologie/pratiche specifiche
- chiamo tutto tutto ciï¿œ "Model 3", ad indicare sia la "provenienza", 
sia la "revisione" :-)
-- 
.A
GUISA - 
http://www.guisa.org
UGIdotNET - 
http://www.ugidotnet.org
Read my blog at: 
http://blogs.ugidotnet.org/pape

 "revisione" :-)
Da "meccanico" del software non posso che sposare totalmente questo 
approccio visto che è l'unica soluzione che mi ha dato soddisfazione in 
asp.net
 mvc... e lascio a te architetto il corretto 'labeling' :)
