• Non ci sono risultati.

14._metodo_di_galerkin_-_parabolici.pdf

N/A
N/A
Protected

Academic year: 2021

Condividi "14._metodo_di_galerkin_-_parabolici.pdf"

Copied!
4
0
0

Testo completo

(1)

Metodo di Galerkin: elementi finiti per problemi parabolici

Con condizioni di Cauchy-Dirichlet omogenee { 𝜕𝑢 𝜕𝑡− 𝑎(𝑥)𝑢′′ + 𝑏(𝑥)𝑢′ + 𝑐(𝑥)𝑢 = 𝑓(𝑥) 𝑥 ∈ [0, 𝐿] 𝑢(0, 𝑡) = 0 𝑢(𝐿, 𝑡) = 0 𝑢(𝑥, 0) = 0

Dato un problema di Cacuhy-Dirichlet in forma generale come segue è possibile passare al problema in forma debole:

{ 𝜕𝑢 𝜕𝑡− 𝑎(𝑥)𝑢′′ + 𝑏(𝑥)𝑢′ + 𝑐(𝑥)𝑢 = 𝑓(𝑥) 𝑥 ∈ [0, 𝐿] 𝑢(0, 𝑡) = 0 𝑢(𝐿, 𝑡) = 0 𝑢(𝑥, 0) = 0 − ∫ 𝑎(𝑥)𝑢′𝑣′𝑑𝑥 𝐿 0 + ∫ 𝑏(𝑥)𝑢′𝑣𝑑𝑥 𝐿 0 + ∫ 𝑐(𝑥)𝑢𝑣𝑑𝑥 𝐿 0 = ∫ 𝑓(𝑥)𝑣𝑑𝑥 𝐿 0 ∫ 𝜕𝑢 𝜕𝑡𝑣𝑑𝑥 𝐿 0 − ∫ 𝑎(𝑥)𝜕 2𝑢 𝜕𝑥2𝑣′𝑑𝑥 𝐿 0 + ∫ 𝑏(𝑥)𝑢′𝑣𝑑𝑥 𝐿 0 + ∫ 𝑐(𝑥)𝑢𝑣𝑑𝑥 𝐿 0 = ∫ 𝑓(𝑥)𝑣𝑑𝑥 𝐿 0 ∫ 𝜕𝑢 𝜕𝑡𝑣𝑑𝑥 𝐿 0 − ∫ [𝑎(𝑥)𝜕𝑢 𝜕𝑥 𝜕𝑣 𝜕𝑥+ 𝑏(𝑥) 𝜕𝑢 𝜕𝑥𝑣 + 𝑐𝑢𝑣] 𝑑𝑥 𝐿 0 = ∫ 𝑓(𝑥)𝑣𝑑𝑥 𝐿 0

Se i coefficienti 𝑎(𝑥) = 𝑎, 𝑏(𝑥) = 𝑏, 𝑐(𝑥) = 𝑐 sono costanti allora si può calcolare la matrice di massa:

𝑀 = ℎ [ 2 3 1 6 ⋯ 0 1 6 2 3 1 6 ⋮ ⋮ 0 1 6 ⋯ ⋱ ⋱ ⋱ 2 3 ]

Poi si può calcolare la matrice A è simmetrica e può essere calcolata così:

𝐴 =𝑎 ℎ[ 2 −1 ⋯ 0 −1 2 −1 ⋮ ⋮ 0 −1 ⋯ ⋱ ⋱ ⋱ 2 ] + 𝑏 [ 0 1 2 ⋯ 0 −1 2 0 1 2 ⋮ ⋮ 0 − 1 2 ⋯ ⋱ ⋱ ⋱ 1 2 ] + 𝑐𝑀

Dove ℎ è l’ampiezza dei sottointervalli. E la dimensione della matrice A è N ovvero la lunghezza del vettore dei nodi. Il vettore dei nodi (NON comprende il primo estremo mentre comprende il secondo) si calcola come:

vert=[x0+h:h:xL-h]

A questo punto per risolvere l’equazione differenziale occorre calcolare il vettore dei termini noti 𝐹⃗. Per calcolare il vettore dei termini noti si scrive la funzione come function handle, poi la si valuta nei nodi e infine la si moltiplica per l’ampiezza degli intervalli dunque:

fun = @(x) -2.*exp(x).*cos(x); f = h*fun(vert);

(2)

A questo punto occorre risolvere la seguente equazione che può essere vista come un sistema:

1 𝜏𝑀(𝑢𝑛− 𝑢𝑛−1) + 𝐴[𝜗𝑢𝑛+ (1 − 𝜗)𝑢𝑛−1] = 𝜗𝑓𝑛+ (1 − 𝜗)𝑓𝑛−1 (𝑀 𝜏 + 𝐴𝜗)𝑢𝑛= [ 𝑀 𝜏 − 𝐴(1 − 𝜗)] 𝑢𝑛−1+ 𝑓

Quindi in funzione del tipo di metodo che si vuole utilizzare per risolvere tale equazione occorre scegliere il valore di 𝜗:

• 𝜗 = 0 → Eulero esplicito • 𝜗 = 1 → Eulero implicito • 𝜗 = 0.5 → Crank-Nicholson

Dopo dunque aver imposto 𝜏, 𝜗 e T ovvero il numero di passi temporali si effettua la fattorizzazione LU del termine in blu e si procede con il seguente ciclo: u = zeros(N,1); tao = 0.01; teta = 0.5; nodi = [x0:h:xL]; plot(nodi,[0;u],’ro-‘); hold on [L,U,P] = lu(M/tao+teta*A); for i = 1:T b = (M/tao-A*(1-teta))*u+f; y = fwsub(L,P*b); u = bksub(U,y); plot(nodi,[0;u], 'bo-'); end

(3)

Con condizioni di Cauchy-Neuman (secondo estremo) { 𝜕𝑢 𝜕𝑡− 𝑎(𝑥)𝑢′′ + 𝑏(𝑥)𝑢′ + 𝑐(𝑥)𝑢 = 𝑓(𝑥) 𝑥 ∈ [0, 𝐿] 𝑢(0, 𝑡) = 0 𝑢(𝐿, 𝑡) = 𝑔𝑁 𝑢(𝑥, 0) = 0

Dato un problema parabolico di Cacuhy-Neumann in forma generale come segue è possibile passare al problema in forma debole:

{ 𝜕𝑢 𝜕𝑡− 𝑎(𝑥)𝑢′′ + 𝑏(𝑥)𝑢′ + 𝑐(𝑥)𝑢 = 𝑓(𝑥) 𝑥 ∈ [0, 𝐿] 𝑢(0, 𝑡) = 0 𝑢(𝐿, 𝑡) = 𝑔𝑁 𝑢(𝑥, 0) = 0 ∫ 𝜕𝑢 𝜕𝑡𝑣𝑑𝑥 𝐿 0 − ∫ 𝑎(𝑥)𝜕 2𝑢 𝜕𝑥2𝑣′𝑑𝑥 𝐿 0 + ∫ 𝑏(𝑥)𝑢′𝑣𝑑𝑥 𝐿 0 + ∫ 𝑐(𝑥)𝑢𝑣𝑑𝑥 𝐿 0 = ∫ 𝑓(𝑥)𝑣𝑑𝑥 𝐿 0 + 𝑔𝑁𝑣(𝐿) ∫ 𝜕𝑢 𝜕𝑡𝑣𝑑𝑥 𝐿 0 − ∫ [𝑎(𝑥)𝜕𝑢 𝜕𝑥 𝜕𝑣 𝜕𝑥+ 𝑏(𝑥) 𝜕𝑢 𝜕𝑥𝑣 + 𝑐𝑢𝑣] 𝑑𝑥 𝐿 0 = ∫ 𝑓(𝑥)𝑣𝑑𝑥 𝐿 0 + 𝑔𝑁𝑣(𝐿)

Se i coefficienti 𝑎(𝑥) = 𝑎, 𝑏(𝑥) = 𝑏, 𝑐(𝑥) = 𝑐 sono costanti allora si può calcolare la matrice di massa:

𝑀 = ℎ [ 2 3 1 6 ⋯ 0 1 6 2 3 1 6 ⋮ ⋮ 0 1 6 ⋯ ⋱ ⋱ ⋱ 1 3 ]

Poi si può calcolare la matrice A è simmetrica e può essere calcolata così:

𝐴 =𝑎 ℎ[ 2 −1 ⋯ 0 −1 2 −1 ⋮ ⋮ 0 −1 ⋯ ⋱ ⋱ ⋱ 1 ] + 𝑏 [ 0 1 2 ⋯ 0 −1 2 0 1 2 ⋮ ⋮ 0 − 1 2 ⋯ ⋱ ⋱ ⋱ 1 2 ] + 𝑐𝑀

Dove ℎ è l’ampiezza dei sottointervalli. E la dimensione della matrice A è N ovvero la lunghezza del vettore dei nodi. Il vettore dei nodi (NON comprende il primo estremo mentre comprende il secondo) si calcola come:

vert=[x0+h:h:xL]

A questo punto per risolvere l’equazione differenziale occorre calcolare il vettore dei termini noti 𝐹⃗. Per calcolare il vettore dei termini noti si scrive la funzione come function handle, poi la si valuta nei nodi, la si moltiplica per l’ampiezza degli intervalli e infine si somma all’ultimo elemento del vettore il termine noto 𝑔𝑁 dunque:

fun = @(x) 5.*x.^3+15.*x.^2-33.*x-3; gN = 12;

f = h*fun(vert); f(N)=f(N)+gN;

(4)

A questo punto occorre risolvere la seguente equazione che può essere vista come un sistema:

1 𝜏𝑀(𝑢𝑛− 𝑢𝑛−1) + 𝐴[𝜗𝑢𝑛+ (1 − 𝜗)𝑢𝑛−1] = 𝜗𝑓𝑛+ (1 − 𝜗)𝑓𝑛−1 (𝑀 𝜏 + 𝐴𝜗)𝑢𝑛= [ 𝑀 𝜏 − 𝐴(1 − 𝜗)] 𝑢𝑛−1+ 𝑓

Quindi in funzione del tipo di metodo che si vuole utilizzare per risolvere tale equazione occorre scegliere il valore di 𝜗:

• 𝜗 = 0 → Eulero esplicito • 𝜗 = 1 → Eulero implicito • 𝜗 = 0.5 → Crank-Nicholson

Dopo dunque aver imposto 𝜏, 𝜗 e T ovvero il numero di passi temporali si effettua la fattorizzazione LU del termine in blu e si procede con il seguente ciclo: u = zeros(N,1); tao = 0.01; teta = 0.5; nodi = [x0:h:xL]; plot(nodi,[0;u],’ro-‘); hold on [L,U,P] = lu(M/tao+teta*A); for i = 1:T b = (M/tao-A*(1-teta))*u+f; y = fwsub(L,P*b); u = bksub(U,y); plot(nodi,[0;u], 'bo-'); end

Riferimenti

Documenti correlati

Per il teorema sull’algebra delle derivate, per quello sulla derivata della funzione composta, per il dominio della derivata del modulo (si osservi che sin x 6= 0 in dom(f )),

Avendo evidentemente f α anche segno costante, andiamo a studiarne il comportamento asintotico agli estremi dell’intervallo di integrazione... Essendo una serie a termini

termine generale della serie risulta essere (−1) n /(n + 1) e quindi la serie converge per il criterio di Leibniz, ma non converge assolutamente perch´ e il termine generale, in

[r]

Corso di Laurea in Scienze Fisiche Prova scritta del

Il dominio della funzione è D = R in quanto il denominatore del secondo tratto si annulla in x=1, punto che appartiene al

Laurea in INGEGNERIA MEDICA METODI MATEMATICI PER

Si implementi la funzione ricorsiva void moltiplica (int Q[]) che, utilizzando una libreria di funzioni di accesso alla coda (da implementare) prendendo in input Q, restituisce la