Ultima modifica:
Ci sono molte cose che non vanno, per esempio nella funzione
Prendiamo la funzione che hai scritto:
Come ben saprai la formula di Frobenius consiste nel calcolare la radice della somma dei quadrati di ogni scalare contenuto nella matrice, eppure vedendo il tuo codice non ti stai iterando sulla matrice bensì solo su una riga siccome stai utilizzando solo la varibaile
Sto utilizzando Visual Studio 2022 e non capisco come tu riesca a compilare questo codice siccome nella riga
oppure in un modo più elegante:
Ho visto che hai commesso questo errore un pò ovunque nel tuo codice, ovvero quello di iterati su un vettore di vettori come se fosse un unico vettore.
Poi un altro errore che ho notato è che nella funzione
Nel caso di una tua prossima ripsosta ti prego di fornire il nome del compilatore che stai utilizzando, perchè mi pare strano che tu riesca a compilarlo.
calculate_norm
da quel che ho capito stai utilizzando l'agoritmo di Frobenius ma lo hai implementato male.Prendiamo la funzione che hai scritto:
C++:
// calculate the norm
long double calculate_norm(std::vector<std::vector<double>> matrixA, int order)
{
long double norm = 0;
for (int i = 0; i != order; ++i)
{
for (int j = 0; j != order; ++j)
{
norm += matrixA[j] * matrixA[j];
}
}
return sqrt(norm);
}
j
.Sto utilizzando Visual Studio 2022 e non capisco come tu riesca a compilare questo codice siccome nella riga
norm += matrixA[j] * matrixA[j];
quello che stai facendo è una moltiplicazione tra std::vector
e non valori scalari, implementando quell'algoritmo correttamente in C++ avrai qualcosa come:
C++:
// calculate the norm
long double calculate_norm(std::vector<std::vector<double>> matrixA, int order)
{
long double norm = 0;
for (int i = 0; i != order; ++i)
{
for (int j = 0; j != order; ++j)
{
norm += matrixA[i][j] * matrixA[i][j];
}
}
return sqrt(norm);
}
C++:
// calculate the norm
long double calculate_norm(std::vector<std::vector<double>> matrix)
{
long double norm = 0;
for (auto& vec : matrix)
{
for (auto s : vec)
{
norm += s * s;
}
}
return sqrt(norm);
}
Poi un altro errore che ho notato è che nella funzione
random_val
apri un file stream con std::ofstream os("RANDOM");
, però non chiudi il file, per ragioni di performance le classi fstream
scriveranno i dati sul disco solo dopo aver chiamato la funzione close()
o altri metodi come flush()
, finchè non lo fari i dati verrannò archiviati nella RAM ed il file sul disco rimarrà vuoto.Nel caso di una tua prossima ripsosta ti prego di fornire il nome del compilatore che stai utilizzando, perchè mi pare strano che tu riesca a compilarlo.