Condizioni al conto FDM

emiglio
Buonasera a tutti,

Non riesco a capire a cosa servano le condizioni al contorno nel metodo delle differenze finite. Volendo discretizzare l'operatore di derivata prima su un mesh monodimensionale, diciamo da 0 ad L, potrei utilizzare uno schema forward difference in x=0 e un backward difference in x=L, senza che si renda necessario definire le boundary conditions. Infatti, supposto che il mesh sia costituito da N punti, avrei un sistema di N equazioni in N incognite. Discorso simile può essere fatto per la derivata seconda. L'unica cosa che mi viene in mente è che così facendo mi ritroverei con una matrice poco simpatica, oltre che inficiare il grado di accuratezza se usassi formule centrali nei punti interni, ma per il resto non vedo problemi. Qualcuno mi illumina? Grazie in anticipo!

Risposte
lucastamba
Ciao! Se non si definisce la condizione al contorno rimane una incognita, quindi si avrebbero N+1 incognite. Infatti se ad esempio si ha l'equazione differenziale
$f'(x)=f(x)$
con foward difference hai
$f(x_{i+1})=f(x_i)+f'(x_{i}) \cdot (x_{i+1}-x_i)$
per i=0 si avrebbe
$f(x_{1})=f(x_0)+f'(x_{0}) \cdot (x_{1}-x_0)$
in cui si richiede di sapere il valore $f(x_0)$ che è appunto la condizione al contorno.
In questo caso particolare si conosce la soluzione analitica generale dell'equazione differenziale che è
$f(x)=c \cdot e^x$
che è una famiglia di funzioni al variare del parametro c, ma che diventa una soluzione particolare definendo la condizione al contorno $f(x_0)$, cioè dando un valore a c.

emiglio
Non ti seguo. Si vuole risolvere l'equazione differenziale $(\partialvarphi)/(\partialx)=f$ per $x\in[0,5]$ col metodo delle differenze finite. Si procede quindi discretizzando l'operatore di derivata prima definendo una matrice $bbD$ tale che $bbD\ul\varphi=\ulf$. Consideriamo a tal fine il seguente mesh uniforme $\ulx=[0,1,2,3,4,5]$. Utilizzando uno schema centrale per i punti interni, un forward difference in $x=0$ ed un backward difference in $x=5$, si ottiene la seguente matrice:
$\bbD=[[-1,1,0,0,0],[-1/2,0,+1/2,0,0],[0,-1/2,0,1/2,0],[0,0,-1/2,0,1/2],[0,0,0,-1,1]]$.
La soluzione discretizzata può essere valutata come $\ul\varphi=\bbD^-1\ulf$.
Dove sta l'incognita? Bada bene che $\ulf$ è sempre noto. Oltretutto quando dici
"LucaSt":
... in cui si richiede di sapere il valore $f(x_0)$ che è appunto la condizione al contorno.

stai dando per scontato che si definiscano BC alla Dirichlet. Come giustifichi l'affermazione con BC alla Neumann?

gabriella127
Ho spostato qui l'argomento, mi sembra la sezione più appropriata.

feddy
Ciao emiglio,

senza condizioni al contorno non hai unicita' della soluzione, come ha detto LucaSt. A livello pratico, la matrice che troveresti e' singolare. Per rispondere alla tua ultima frase:

stai dando per scontato che si definiscano BC alla Dirichlet. Come giustifichi l'affermazione con BC alla Neumann?


Il punto è proprio questo. A seconda delle condizioni al bordo, **date dal problema**, ci sono tecniche diverse. Per condizioni di Neumann ai bordi, uno puo' usare forward o backward differences (a seconda dell'estremo in cui si trova). Alternativamente, si puo' utilizzare un approccio ghost-node, dove si introduce un nodo fittizio ai bordi che rientra poi nel membro di destra.

Leggendo la tua prima riga e ultima riga risulta che hai Neumann ad entrambi i bordi del tuo dominio. Ora, cio' equivale a dire che stai risolvendo $$\varphi '(x)=f$$ in $[0,L]$ con condizioni ai bordi $\varphi'(0)$ e $\varphi'(L)$ fissati in qualche modo (che appunto non specifichi e dipendono quindi da cosa assegni a $f(x_0)$ ed $f(x_{N-1})$).
Il problema in questo caso e' che il tuo problema ora e' mal posto perche' hai perso unicita' della soluzione. Data una $u$ che risolve il problema, $u+c$, con $c \in \mathbb{R}$ costante sara' ancora soluzione. Se invece avessi avuto un bordo fissato con Dirichlet, avresti unicita'.

Morale della favola: senza condizioni ai bordi, non puoi ben definire un problema **ai limiti**, perche' appunto non specifichi i limiti.

emiglio
"feddy":
Ciao emiglio,

senza condizioni al contorno non hai unicita' della soluzione, come ha detto LucaSt. A livello pratico, la matrice che troveresti e' singolare. Per rispondere alla tua ultima frase:

stai dando per scontato che si definiscano BC alla Dirichlet. Come giustifichi l'affermazione con BC alla Neumann?


Il punto è proprio questo. A seconda delle condizioni al bordo, **date dal problema**, ci sono tecniche diverse. Per condizioni di Neumann ai bordi, uno puo' usare forward o backward differences (a seconda dell'estremo in cui si trova). Alternativamente, si puo' utilizzare un approccio ghost-node, dove si introduce un nodo fittizio ai bordi che rientra poi nel membro di destra.

Leggendo la tua prima riga e ultima riga risulta che hai Neumann ad entrambi i bordi del tuo dominio. Ora, cio' equivale a dire che stai risolvendo $$\varphi '(x)=f$$ in $[0,L]$ con condizioni ai bordi $\varphi'(0)$ e $\varphi'(L)$ fissati in qualche modo (che appunto non specifichi e dipendono quindi da cosa assegni a $f(x_0)$ ed $f(x_{N-1})$).
Il problema in questo caso e' che il tuo problema ora e' mal posto perche' hai perso unicita' della soluzione. Data una $u$ che risolve il problema, $u+c$, con $c \in \mathbb{R}$ costante sara' ancora soluzione. Se invece avessi avuto un bordo fissato con Dirichlet, avresti unicita'.

Morale della favola: senza condizioni ai bordi, non puoi ben definire un problema **ai limiti**, perche' appunto non specifichi i limiti.

Credo di aver capito. In sostanza quando non assegno le BC è come se stessi assegnando BC alla Neumann. Mi spiego meglio, quando uso un forward difference in x=0 e un backward difference in x=L è come se stessi assegnando il valore della derivata agli estremi, ergo BC alla Neumann, quindi il problema ammette infinite soluzioni oppure nessuna se la relazione di compatibilità non è verificata. Che poi equivale come mi dicevi ad avere una matrice singolare, singolarità che elimino assegnando una BC alla Dirichlet in x=0 o in x=L. Ecco svelata la necessità delle BC. Ho sbagliato qualcosa?

feddy
Mi pare che ci siamo, ma riguardo a questa frase:
"emiglio":
singolarità che elimino assegnando una BC alla Dirichlet in x=0 o in x=L.

voglio rimarcare che questa singolarità' in linea di principio non dovresti eliminarla tu, ma non dovrebbe proprio esistere nel problema continuo di partenza. Detto in altre parole, le condizioni al bordo devono essere un dato nel problema. :-)

feddy
Per convincerti di quanto dici, puoi sempre provare a verificare con mano (nel linguaggio che usi) che la matrice che assembli risulti singolare :)

emiglio
Ok, ma per quanto mi riguarda sono io ad assegnarle. A me interessa risolvere problemi di scambio termico, le condizioni al contorno le assegno a convenienza. Assegnare (garantire) condizioni al contorno al Dirichlet è quasi impossibile, è molto più semplice lavorare con BC alla Neumann. Per questo parlavo di eliminare la singolarità. Grazie di cuore per la disponibilità!!

feddy
Non avevo capito dal post che il tuo problema ai limiti rappresentava un modello. Più' che impossibili, magari Neumann BC sono naturali dal punto di vista fisico. In un problema "puro Neumann", cioè' dove entrambi i bordi hanno condizioni sulle derivate, non hai unicità' e ci sono diverse tecniche per fissare **una soluzione**.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.