[C++] matrice di jacobi
ciao ragazzi
come esercizio devo implementare una funziona per risolvere un sistema lineare con la matrice di jacobi,
premetto che è il primo e unico corso di informatica che facciamo a fisica e l'esame tratta variabili cicli funzione e classi e niente di più complesso, la teoria fatta è basilare quindi si presuppone che io faccia l'esercizio usando solo cicli e funzioni cioè le uniche cose che abbiamo fatto. le classi vengono dopo di questo esercizio.
il problema lo ho nella ricorsione ovviamente, o meglio nel fermarsi della ricorsione, dice che la ricorsione si ferma quando la differenza tra due vettori successivi calcolati dalla ricorsione è minore di una certa soglia,
ora qui si tratta di vettori quindi come si fa a dire che un vettore è minore di un altro? i loro elementi possono essere alcuni più grandi alcuni più piccoli a parità dell indice dell'elemento del vettore che il ciclio in c++ per fare il vettore sta considerando.
Ho visto le soluzioni. Usa non il vettore ma fa la somma degli elementi di vettore successivo e vettore precedente e confronta la somma tra singoli elementi dei vettori, come può essere questo affidabile? Se le somme degli elementi sono molto simili non vuol dire che i due vettori siano molto simili. Non capisco il criterio per cui questa modalità di stoppare la ricorsione va bene,
grazie
come esercizio devo implementare una funziona per risolvere un sistema lineare con la matrice di jacobi,
premetto che è il primo e unico corso di informatica che facciamo a fisica e l'esame tratta variabili cicli funzione e classi e niente di più complesso, la teoria fatta è basilare quindi si presuppone che io faccia l'esercizio usando solo cicli e funzioni cioè le uniche cose che abbiamo fatto. le classi vengono dopo di questo esercizio.
il problema lo ho nella ricorsione ovviamente, o meglio nel fermarsi della ricorsione, dice che la ricorsione si ferma quando la differenza tra due vettori successivi calcolati dalla ricorsione è minore di una certa soglia,
ora qui si tratta di vettori quindi come si fa a dire che un vettore è minore di un altro? i loro elementi possono essere alcuni più grandi alcuni più piccoli a parità dell indice dell'elemento del vettore che il ciclio in c++ per fare il vettore sta considerando.
Ho visto le soluzioni. Usa non il vettore ma fa la somma degli elementi di vettore successivo e vettore precedente e confronta la somma tra singoli elementi dei vettori, come può essere questo affidabile? Se le somme degli elementi sono molto simili non vuol dire che i due vettori siano molto simili. Non capisco il criterio per cui questa modalità di stoppare la ricorsione va bene,
grazie
Risposte
Prima di tutto, perché stiamo parlando di ricorsione? E' certamente possibile usare la ricorsione per risolvere un sistema lineare con la matrice di Jacobi, ma il metodo è naturalmente definito in modo iterativo e non vedo quindi la ragione di complicarsi la vita.
Accettando di usare la ricorsione non capisco a questo punto cosa tu stia effettivamente cercando di fare. La ricorsione si ferma quando si raggiunge il caso base che dipende dalla definizione del problema. Puoi avere una condizione come quella che hai descritto o condizioni totalmente diverse. Quali sono i due vettori che vuoi confrontare e perché stai usando questa particolare condizione per terminare la tua ricorsione?
Non mi è chiaro cosa stia cercando di fare nella soluzione. La condizione per terminare cicli o ricorsioni in questo caso è normalmente quella di calcolare una qualche norma della differenza tra i due vettori e la si confronta con una tolleranza.
Accettando di usare la ricorsione non capisco a questo punto cosa tu stia effettivamente cercando di fare. La ricorsione si ferma quando si raggiunge il caso base che dipende dalla definizione del problema. Puoi avere una condizione come quella che hai descritto o condizioni totalmente diverse. Quali sono i due vettori che vuoi confrontare e perché stai usando questa particolare condizione per terminare la tua ricorsione?
Non mi è chiaro cosa stia cercando di fare nella soluzione. La condizione per terminare cicli o ricorsioni in questo caso è normalmente quella di calcolare una qualche norma della differenza tra i due vettori e la si confronta con una tolleranza.
Per confrontare i vettori \(\mathbf{x}_{k+1}\) con \(\mathbf{x}_{k+1}\) devi usare una qualche norma di \(\mathbb{R}^n\). La scelta è poco importante dato che le scelte più comuni sono tutte equivalenti. https://it.wikipedia.org/wiki/Norma_(matematica)#Norme_equivalenti
La somma degli coordinate del vettore non è una norma, quindi sicuramente non è usata da nessuna soluzione corretta. Suppongo tu abbia frainteso cosa stessero sommando.
La somma degli coordinate del vettore non è una norma, quindi sicuramente non è usata da nessuna soluzione corretta. Suppongo tu abbia frainteso cosa stessero sommando.
"vict85":
Per confrontare i vettori \(\mathbf{x}_{k+1}\) con \(\mathbf{x}_{k+1}\) devi usare una qualche norma di \(\mathbb{R}^n\). La scelta è poco importante dato che le scelte più comuni sono tutte equivalenti. https://it.wikipedia.org/wiki/Norma_(matematica)#Norme_equivalenti
La somma degli coordinate del vettore non è una norma, quindi sicuramente non è usata da nessuna soluzione corretta. Suppongo tu abbia frainteso cosa stessero sommando.
Ho sbagliato a scrivere intendevo ricorsione.
Ho fraintesi anche i codici, è una somma tra le differenze delle coordinate con stessi indici di vettori successivi.
Ha un nome questa cosa? Non è una norma?
// calcoliamo la differenza fra la nuova approx e l'ultima
diff=0.0;
for(i1=0;i1
È la 1-norma se non ricordo male. È esattamente quello che intendevo.