[C++] matrice di jacobi

Messaggioda zerbo1000 » 11/10/2018, 16:44

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
Una mente matematica cerca un fine, una mente artistica lo stabilisce.
zerbo1000
Senior Member
Senior Member
 
Messaggio: 596 di 1244
Iscritto il: 13/04/2015, 20:29

Re: [C++] matrice di jacobi

Messaggioda apatriarca » 11/10/2018, 20:53

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.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5136 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C++] matrice di jacobi

Messaggioda vict85 » 12/10/2018, 09:39

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.
vict85
Moderatore
Moderatore
 
Messaggio: 9421 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] matrice di jacobi

Messaggioda zerbo1000 » 12/10/2018, 15:12

vict85 ha scritto: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<s;i1++)
diff+=fabs(nx[i1]-x[i1]);
Una mente matematica cerca un fine, una mente artistica lo stabilisce.
zerbo1000
Senior Member
Senior Member
 
Messaggio: 597 di 1244
Iscritto il: 13/04/2015, 20:29

Re: [C++] matrice di jacobi

Messaggioda apatriarca » 12/10/2018, 15:14

È la 1-norma se non ricordo male. È esattamente quello che intendevo.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5137 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite