|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
[C++/nonperforza] Trasposizione di una matrice
Ciao,
sto scrivendo classi per vettori e matrici, a scopo di studiare l'algebra lineare, e ho scritto questo algoritmo (mi sembra scontato) per la trasposizione: Codice:
for (int i = 1; i <= ret.n_rows(); ++i) {
for (int j = i + 1; j <= ret.n_columns(); ++j) {
double temp = ret[i][j];
ret[i][j] = ret[j][i];
ret[j][i] = temp;
}
}
Qualcuno sa darmi qualche consiglio? O meglio, visto che sono cose che si trovano su tantissimi libri/siti, avete link a letture interessanti? E magari ai source code di qualche libreria matematica open source, così vado a tirar fuori idee senza annoiare voi con argomenti basilari? |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 47
|
Perché i cicli for vanno da 1 a n invece che da 0 a n-1? Nel sorgente nel thread sul memory leak vedo che per la struttura interna allochi n+1 elementi invece che n. Probabilmente vuoi che la matrice sia acceduta con indici che partono da 1, ma allora dovresti semplicemente sottrarre 1 quando accedi alla struttura dati interna.
Una buona libreria per l'algebra lineare è questa, ma non so quanto possa essere comprensibile il sorgente. Inoltre la tua implementazione funziona solo per matrici quadrate. Per matrici qualsiasi: Codice:
matrix trasposed() const
{
matrix t(colonne, righe);
for (int i = 0; i < right; ++i) {
for (int j = 0; j < colonne; ++j) {
t.ret[j][i] = ret[i][j];
}
}
return t;
}
Ultima modifica di bender86 : 15-07-2012 alle 11:21. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
Riguardo agli indici, all'inizio sottraevo 1 come dici, ma poi ho implementato questo: Codice:
double* operator[](int k) { return myMatrix[k]; }
const double* operator[](int k) const { return myMatrix[k]; }
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:21.




















