• Non ci sono risultati.

1. Equazione del calore.

N/A
N/A
Protected

Academic year: 2021

Condividi "1. Equazione del calore."

Copied!
6
0
0

Testo completo

(1)

Equazioni del calore e metodo delle linee 1

A. Sommariva

2

Keywords: Equazione del calore in Matlab. Eulero esplicito, implicito e theta metodi.

Revisione: 4 maggio 2020

1. Equazione del calore.

Consideriamo l’equazione del calore

∂u

∂t

=

∂x2u2

+ G, 0 < x < 1, t > 0 u(0, t) = d

0

(t), u(1, t) = d

1

(t), t ≥ 0 u(x, 0) = f (x), 0 ≤ x ≤ 1

(1)

Sia

• m > 0 intero,

• h

x

= 1/m,

• x

j

= jh

x

con j = 0, 1, . . . , m.

Se la soluzione `e sufficentemente regolare da

2

u

∂x

2

(x

j

, t) ≈ u(x

j+1

, t) − 2u(x

j

, t) + u(x

j−1

, t)

h

2x

, j = 1, . . . , m − 1 (2) posto u

j

(t) := u(x

j

, t) otteniamo per j = 1, . . . , m − 1 il sistema di equazioni differenziali

u

0j

(t) = u

j+1

(t) − 2u

j

(t) + u

j−1

(t)

h

2x

+ G(x

j

, t) (3)

Nel risolvere il sistema dobbiamo far attenzione alle condizioni sul bordo u

0

(t) = d

0

(t), u

m

(t) = d

1

(t)

e ricordare che la condizione iniziale del sistema di equazioni differenziali `e

u

j

(0) = f (x

j

), j = 1, . . . , m − 1.

(2)

Il sistema differenziale (3) pu`o essere riscritto matricialmente. Posto u(t) := [u

1

(t), . . . , u

m−1

(t)]

T

u

0

:= [f (x

1

), . . . , f (x

m−1

)]

T

g(t) :=  1

h

2x

d

0

(t), 0, . . . , 0, 1 h

2x

d

1

(t)



T

+ [G(x

1

, t), . . . , G(x

m−1

, t)]

T

Λ = 1 h

2x

−2 1 0 0 . . . 0

1 −2 1 0 . . . 0

0 1 −2 1 . . . 0

. . . . . . . . . . . . . . . . . .

0 0 0 0 1 −2

(4)

allora (3) `e equivalente al sistema di equazioni differenziali lineari

u

0

(t) = Λu(t) + g(t), u(0) = u

0

(5)

1.1. Equazione del calore e metodo delle linee: Eulero esplicito, implicito e θ-metodi Risolvendo u

0

(t) = Λu(t) + g(t), u(0) = u

0

in t

n

= nh

t

, n = 0, 1, . . . con

• Eulero esplicito, per u

n+1

:= u(t

n+1

), si ha v

n+1

≈ u

n+1

ove

 v

n+1

= v

n

+ h

t

(Λv

n

+ g(t

n

))

v

0

assegnato (6)

• Eulero implicito, si ha

 v

n+1

= v

n

+ h

t

(Λv

n+1

+ g(t

n+1

))

v

0

assegnato (7)

ovvero

 (I − h

t

Λ)v

n+1

= v

n

+ h

t

g(t

n+1

)

v

0

assegnato (8)

con I −h

t

Λ definita positiva (e quindi non singolare) poich`e Λ `e definita negativa (per due teoremi di Gerschgorin).

A partire da Eulero esplicito ed Eulero implicito si definiscono i cosidetti θ−metodi in cui

v

n+1

= v

n

+ (1 − θ)h

t

(Λv

n

+ g(t

n

)) + θh

t

(Λv

n+1

+ g(t

n+1

)) con v

0

assegnato.

Si osservi che:

• θ = 0 corrisponde al metodo di Eulero esplicito;

• θ = 1 corrisponde al metodo di Eulero implicito.

(3)

0 0.2

0.4 0.6

0.8 1

0 1 2 3 4 5 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Figura 1: Grafico della soluzione dell’equazione del calore (9).

Esempio 1.1. Studiamo numericamente l’equazione del calore

∂u

∂t

=

∂x2u2

+ G, 0 < x < 1, t > 0 u(0, t) = d

0

(t), u(1, t) = d

1

(t), t ≥ 0 u(x, 0) = f (x), 0 ≤ x ≤ 1

(9)

per

G(x, t) = (−0.1 + π

2

) (exp(−0.1 · t) sin(π x)) d

0

(t) = 0, d

1

(t) = 0

f (x) = sin(π x)

(10)

avente quale soluzione

u(x, t) = exp(−0.1 · t) sin(π x).

Definiamo il termine noto in g.m

function gt=g(t,x,hx,d0,d1,G)

% Valuta:

% g(t)=(1/hxˆ2)*(d0(t),0,...,0,d1(t))+[G(x1,t),...,G(x_(m-1),t)].

gt=feval(G,x,t);

gt(1)=gt(1)+(1/hxˆ2)*feval(d0,t);

gt(length(gt))=gt(length(gt))+(1/hxˆ2)*feval(d1,t);

e implementiamo il metodo in metodolinee.m

function [V_hist,x_in,t_in,hx,ht]=metodolinee(theta,tfin,m,f,d0,d1,G,sigma)

% INPUT.

% theta : PARAMETRO DEL THETA METODO in [0,1].

% tfin : ISTANTE FINALE.

% m : DETERMINA IL PASSO SPAZIALE CON PASSO h_x=1/m.

% f : u(x,0)=f(x)

% d0, d1 : u(0,t)=d0(t), u(1,t)=d1(t).

% G : (D_t)u=(Dˆ2_x)u+G.

% sigma: IL PASSO TEMPORALE E’ sigma*(hxˆ2)/2.

(4)

% OUTPUT.

% V_hist : SOLUZIONE ISTANTE PER ISTANTE. RIGHE INIZIALI -> BASSO t.

% x_in : PUNTI INTERNI NELLA VARIABILE x.

% t_in : PUNTI INTERNI NELLA VARIABILE t.

% hx : PASSO SPAZIALE.

% ht : PASSO TEMPORALE.

hx=1/m; ht=sigma*(hxˆ2)/2; % PASSI SPAZIALI E TEMPORALI.

x=(0:hx:1)’; x_in=x(2:end-1,:);% PUNTI INTERNI.

u0=feval(f,x_in); % VETTORE SOLUZIONE AL TEMPO "0".

t=(0:ht:tfin)’; t_in=t(2:end,1); % TEMPI DA ANALIZZARE.

Lambda=-(1/hxˆ2)*gallery(’tridiag’,m-1); % Lambda=full(Lambda);

iftheta < 1, gt_prev=g(0,x_in,hx,d0,d1,G); end

V_old=u0; V_hist=[V_old’]; err_hist=[]; % INIZIALIZZAZIONI.

for index=1:length(t_in) % STUDIO SOLUZIONE IN TEMPI FINO A tfin.

t_curr=t_in(index); gt_curr=g(t_curr,x_in,hx,d0,d1,G);

switch theta

case 0 % EULERO ESPLICITO.

V_new=V_old+ht*(Lambda*V_old+gt_prev);

gt_prev=gt_curr;

case 1 % EULERO IMPLICITO.

A=eye(size(Lambda))-ht*Lambda;

b=V_old+ht*gt_curr; V_new=A\b;

otherwise % THETA METODO.

A=eye(size(Lambda))-(ht*theta)*Lambda;

b=V_old+ht*(1-theta)*(Lambda*V_old+gt_prev)+ht*theta*gt_curr;

V_new=A\b; gt_prev=gt_curr;

end

V_hist=[V_hist; V_new’]; V_old=V_new;

end

1. Il parametro m determina il passo spaziale h

x

= 1/m;

2. se theta=0 allora si utilizza il metodo di Eulero esplicito, mentre se theta=1 Eulero implicito;

3. la variabile tfin determina l’ultimo istante possibile da analizzare;

4. il parametro sigma determina il passo temporale a partire da quello spaziale ovvero h

t

= sigma · h

2x

/2 dove h

x

= 1/m.

Salviamo in demo calore.m

function demo_calore(theta,sigma) if nargin < 2,sigma=1;end

mV=[2 4 8 16]; tfin=5; % SETTINGS.

% ESEMPIO.

G=@(x,t) (-0.1+piˆ2)*(exp((-0.1)*t).*sin(pi*x));

d0=@(t) zeros(size(t));

d1=@(t) exp((-0.1)*t).*sin(pi);

f=@(x) sin(pi*x);

solution=@(x,t) exp((-0.1)*t).*sin(pi*x);

err_hist=[];

for k=1:length(mV)

m=mV(k); % ANALISI SUDD. m PUNTI SPAZIALI.

[V_hist,x_mid,t_mid,hx,ht]=metodolinee(theta,tfin,m,f,d0,d1,G,sigma);

(5)

U=feval(solution,x_mid,t_mid(end));

err=norm(U’-V_hist(end,:),inf); % ERRORE METODO.

err_hist=[err_hist;err];

fprintf(’\n \t [m]: %3.0f [ERROR]: %2.2e [hx]: %2.2e [ht]: %2.2e’,...

m,err,hx,ht);

end

Per motivi di stabilit`a tipici di Eulero esplicito, necessita che h

t

≤ h

2x

/2.

Vediamo su vari esempi cosa succede numericamente. Dopo aver settato in demo calore il parametro theta=0, proprio di Eulero Esplicito, scegliamo per esempio sigma=1.5.

Quindi dalla shell digitiamo quanto segue:

>> demo_calore(0,1.5)

[THETA]:0.000 [TFIN]:5.000 [SIGMA]:1.5e+00

[m]: 2 [ERROR]: 1.45e-01 [hx]: 5.00e-01 [ht]: 1.88e-01 [m]: 4 [ERROR]: 1.40e+04 [hx]: 2.50e-01 [ht]: 4.69e-02 [m]: 8 [ERROR]: 7.32e+100 [hx]: 1.25e-01 [ht]: 1.17e-02 [m]: 16 [ERROR]: NaN [hx]: 6.25e-02 [ht]: 2.93e-03

>>

Segliamo un parametro sigma pi`u piccolo, sigma=1.1.

>> demo_calore(0,1.1)

[THETA]:0.000 [TFIN]:5.000 [SIGMA]:1.1e+00

[m]: 2 [ERROR]: 1.44e-01 [hx]: 5.00e-01 [ht]: 1.38e-01 [m]: 4 [ERROR]: 3.25e-02 [hx]: 2.50e-01 [ht]: 3.44e-02 [m]: 8 [ERROR]: 2.89e+11 [hx]: 1.25e-01 [ht]: 8.59e-03 [m]: 16 [ERROR]: 3.77e+149 [hx]: 6.25e-02 [ht]: 2.15e-03

>>

Il metodo non fornisce evidentemente risultati apprezzabili. Scegliamo ora sigma=1.0:

il metodo di Eulero esplicito finalmente converge.

>> demo_calore(0,1)

[THETA]:0.000 [TFIN]:5.000 [SIGMA]:1.0e+00

[m]: 2 [ERROR]: 1.43e-01 [hx]: 5.00e-01 [ht]: 1.25e-01 [m]: 4 [ERROR]: 3.25e-02 [hx]: 2.50e-01 [ht]: 3.12e-02 [m]: 8 [ERROR]: 7.93e-03 [hx]: 1.25e-01 [ht]: 7.81e-03 [m]: 16 [ERROR]: 1.97e-03 [hx]: 6.25e-02 [ht]: 1.95e-03

>>

In definitiva affinch`e il metodo di Eulero esplicito converga, il passo temporale dev’es- sere scelto dell’ordine di h

2x

/2, che in molti casi risulta essere troppo piccolo e rende il metodo non competitivo dal punto di vista computazionale.

Analizziamo ora il comportamento di Eulero implicito (cio`e theta=1).

Tale metodo richiede la risoluzione di sistemi lineari tridiagonali, ma ci`o non `e un problema dal punto di vista computazionale (per ogni t

i

il costo e’ O(m)).

Proviamo il comportamento per sigma=1.5,

>> demo_calore(1,1.5)

[THETA]:1.000 [TFIN]:5.000 [SIGMA]:1.5e+00

[m]: 2 [ERROR]: 1.45e-01 [hx]: 5.00e-01 [ht]: 1.88e-01 [m]: 4 [ERROR]: 3.26e-02 [hx]: 2.50e-01 [ht]: 4.69e-02 [m]: 8 [ERROR]: 7.95e-03 [hx]: 1.25e-01 [ht]: 1.17e-02

(6)

[m]: 16 [ERROR]: 1.97e-03 [hx]: 6.25e-02 [ht]: 2.93e-03

>>

Per curiosit`a proviamo per sigma=10,

>> demo_calore(1,10)

[THETA]:1.000 [TFIN]:5.000 [SIGMA]:1.0e+01

[m]: 2 [ERROR]: 1.44e-01 [hx]: 5.00e-01 [ht]: 1.25e+00 [m]: 4 [ERROR]: 3.26e-02 [hx]: 2.50e-01 [ht]: 3.12e-01 [m]: 8 [ERROR]: 7.96e-03 [hx]: 1.25e-01 [ht]: 7.81e-02 [m]: 16 [ERROR]: 1.98e-03 [hx]: 6.25e-02 [ht]: 1.95e-02

>>

Esercizio 1.1 (Facoltativo). Eseguire gli stessi test eseguiti per Eulero esplicito col θ-metodo, per

• θ = 0.25,

• θ = 0.5,

• θ = 0.75.

Com’e’ il comportamento del metodo? Simile ad Eulero esplicito o ad Eulero implici-

to?

Riferimenti

Documenti correlati

It was proved in [16] that there exist infinitely many different triples of different knots coming from locally unknotted theta-curves such that the three knots of any triple have

Dal punto di vista dell'algebra lineare il passaggio dal sistema di riferimento fisso xyz a quello ruotato XYZ equivale ad operare un cambiamento di base, ovvero passare da una base

Ovviamente un algoritmo “ingenuo” di fattorizzazione consiste (come nel test ingenuo di primalità) nel testare, per ogni naturale a in [2, n ], se a è divisore di n, e in

Il raggio di curvatura di una sezione piana obliqua la cui normale formi con la normale alla superficie un angolo θ è pari al raggio di curvatura della sezione normale avente

Due classici metodi per risolvere il problema differenziale (1.2) sono il metodo di Eulero esplicito ed il metodo di Eulero implicito.. Denotiamo con I(x, x) il pi`u piccolo

• il metodo di Eulero esplicito, avendo ordine di consistenza 1, `e convergente con ordine di convergenza 1;.. • il metodo di Eulero implicito, avendo ordine di consistenza 1,

Steward, Numerical Solution of Ordinary Differential Equations, programs for the book , John Wiley and Sons,

Il numero totale di passi temporali è NT, divisi in NT0 gruppi di Temp passi.. DENSITA’ INVARIANTE,