• Non ci sono risultati.

1. EQUAZIONE DEL CALORE

N/A
N/A
Protected

Academic year: 2021

Condividi "1. EQUAZIONE DEL CALORE"

Copied!
5
0
0

Testo completo

(1)

1. EQUAZIONE DEL CALORE

Il codice “temporizza” le immagini in modo da far vedere un

filmino. Il numero totale di passi temporali è NT, divisi in NT0 gruppi di Temp passi. Viene visualizzata un’immagine ogni Temp passi, ovvero alla fine di ogni gruppo.

Il numero di noti spaziali è Nx.

Invece che prefissare L, per tenere più sotto controllo il tempo di calcolo (che dipende da Nx), si prefissano Nx e dx, da cui si trova L.

Temp=50; NT0 = 500

NT= NT0*Temp; Nx=1000; dx=0.01; sig=1 L=dx*Nx/2

dt=dx^2/(2*sig^2) Nx.virt=Nx+1

u = matrix(nrow=Nx.virt, ncol=NT) X=seq(-L,L,dx)

eps=0.0001

u[,1]=(1/sqrt(2*pi*eps))*exp(-X^2/(2*eps)) for (t0 in 1:(NT0-1)) {

for (t1 in 1:Temp) { t=(t0-1)*Temp + t1 for (i in 2:Nx) {

u[i,t+1] = u[i,t] + (sig^2/2) * dt * ((u[i+1,t]-2*u[i,t]+u[i- 1,t])) / (dx^2)

}

u[1,t+1]=u[2,t+1]; u[Nx.virt,t+1]=u[Nx,t+1]

}

plot(c(-L,L),c(-0.5,5),type="n") lines(X,u[,t+1])

lines(c(-L,L),c(0,0)) }

Monte Carlo:

Temp=10; NT0 = 500

NT= NT0*Temp; N.part=10000; sig=1 dt=0.0005

u = matrix(nrow=N.part, ncol=NT) u[,1]=0

for (t0 in 1:(NT0-1)) { for (t1 in 1:Temp) {

(2)

t=(t0-1)*Temp + t1 for (i in 1:N.part) {

u[i,t+1] = u[i,t] + sig * sqrt(dt) * rnorm(1) }

}

hist(u[,t+1],50) }

2. EQUAZIONE LINEARE

Temp=10; NT0 = 500

NT= NT0*Temp; N.part=10000; sig=1 dt=0.0005; lambda=10

u = matrix(nrow=N.part, ncol=NT) u[,1]=1

for (t0 in 1:(NT0-1)) { for (t1 in 1:Temp) { t=(t0-1)*Temp + t1 for (i in 1:N.part) {

u[i,t+1] = u[i,t] - lambda* u[i,t]*dt+ sig * sqrt(dt) * rnorm(1) }

}

hist(u[,t+1],50) }

Temp=50; NT0 = 500

NT= NT0*Temp; Nx=1000; dx=0.01; sig=1; lambda=10 L=dx*Nx/2

dt=dx^2/(2*sig^2) Nx.virt=Nx+1

u = matrix(nrow=Nx.virt, ncol=NT) X=seq(-L,L,dx)

eps=0.0001

u[,1]=(1/sqrt(2*pi*eps))*exp(-(X-1)^2/(2*eps)) for (t0 in 1:(NT0-1)) {

for (t1 in 1:Temp) { t=(t0-1)*Temp + t1 for (i in 2:Nx) {

u[i,t+1] = u[i,t] + (sig^2/2) * dt * ((u[i+1,t]-2*u[i,t]+u[i- 1,t])) / (dx^2) + lambda*dt*(X[i+1]* u[i+1,t]- X[i]* u[i,t])/dx }

u[1,t+1]=u[2,t+1]; u[Nx.virt,t+1]=u[Nx,t+1]

(3)

}

plot(c(-L,L),c(-0.5,5),type="n") lines(X,u[,t+1])

lines(c(-L,L),c(0,0)) }

3. EQUAZIONE NON LINEARE

Qui acceleriamo un po’

Temp=10; NT0 = 500

NT= NT0*Temp; N.part=10000; sig=1 dt=0.01

u = matrix(nrow=N.part, ncol=NT) u[,1]=0.5

for (t0 in 1:(NT0-1)) { for (t1 in 1:Temp) { t=(t0-1)*Temp + t1 for (i in 1:N.part) {

u[i,t+1] = u[i,t] +dt* (u[i,t]- u[i,t]^3)+ sig * sqrt(dt) * rnorm(1)

} }

hist(u[,t+1],50) }

Temp=100; NT0 = 500

NT= NT0*Temp; Nx=200; dx=0.03; sig=1 L=dx*Nx/2

dt=dx^2/(2*sig^2) Nx.virt=Nx+1

u = matrix(nrow=Nx.virt, ncol=NT) X=seq(-L,L,dx)

eps=0.0001

u[,1]=(1/sqrt(2*pi*eps))*exp(-(X-0.5)^2/(2*eps)) for (t0 in 1:(NT0-1)) {

for (t1 in 1:Temp) { t=(t0-1)*Temp + t1 for (i in 2:Nx) {

(4)

u[i,t+1] = u[i,t] + (sig^2/2) * dt * ((u[i+1,t]-2*u[i,t]+u[i-

1,t])) / (dx^2) - dt*((X[i+1]-X[i+1]^3)* u[i+1,t]- (X[i]-X[i]^3)*

u[i,t])/dx }

u[1,t+1]=0; u[Nx.virt,t+1]=0 }

plot(c(-L,L),c(-0.5,1),type="n") lines(X,u[,t+1])

lines(c(-L,L),c(0,0)) }

Nota: sono state messe le condizioni al bordo nulle

4. DENSITA’ INVARIANTE, ESEMPIO LINEARE

Esempio lineare, sig=1, lambda=10. Non ci curiamo della scala giusta sull’asse delle ordinate e quindi prendiamo Z=1.

X= seq(-4,4, 0.01) Y=exp(-10*X^2)

plot(c(-4,4),c(-0.5,2),type="n") lines(X,Y)

lines(c(-4,4),c(0,0))

Temp=50; NT0 = 500

NT= NT0*Temp; Nx=1000; dx=0.01; sig=1; lambda=10 L=dx*Nx/2

dt=dx^2/(2*sig^2) Nx.virt=Nx+1

u = matrix(nrow=Nx.virt, ncol=NT) X=seq(-L,L,dx)

eps=0.0001

u[,1]=(1/sqrt(2*pi*eps))*exp(-(X-2)^2/(2*eps)) for (t0 in 1:(NT0-1)) {

for (t1 in 1:Temp) { t=(t0-1)*Temp + t1 for (i in 2:Nx) {

u[i,t+1] = u[i,t] + (sig^2/2) * dt * ((u[i+1,t]-2*u[i,t]+u[i- 1,t])) / (dx^2) + lambda*dt*(X[i+1]* u[i+1,t]- X[i]* u[i,t])/dx }

u[1,t+1]=u[2,t+1]; u[Nx.virt,t+1]=u[Nx,t+1]

}

plot(c(-L,L),c(-0.5,3),type="n")

(5)

lines(X,u[,t+1])

lines(c(-L,L),c(0,0)) }

5. DENSITA’ INVARIANTE, ESEMPIO NON LINEARE

Esempio non lineare, sig=1. Non ci curiamo della scala giusta sull’asse delle ordinate e quindi prendiamo Z=1.

X= seq(-3,3, 0.01) Y=exp(X^2-X^4/2)

plot(c(-3,3),c(-0.5,6),type="n") lines(X,Y)

lines(c(-4,4),c(0,0))

Temp=100; NT0 = 500

NT= NT0*Temp; Nx=200; dx=0.03; sig=1 L=dx*Nx/2

dt=dx^2/(2*sig^2) Nx.virt=Nx+1

u = matrix(nrow=Nx.virt, ncol=NT) X=seq(-L,L,dx)

eps=0.0001

u[,1]=(1/sqrt(2*pi*eps))*exp(-(X-0.5)^2/(2*eps)) for (t0 in 1:(NT0-1)) {

for (t1 in 1:Temp) { t=(t0-1)*Temp + t1 for (i in 2:Nx) {

u[i,t+1] = u[i,t] + (sig^2/2) * dt * ((u[i+1,t]-2*u[i,t]+u[i-

1,t])) / (dx^2) - dt*((X[i+1]-X[i+1]^3)* u[i+1,t]- (X[i]-X[i]^3)*

u[i,t])/dx }

u[1,t+1]=0; u[Nx.virt,t+1]=0 }

plot(c(-L,L),c(-0.5,1),type="n") lines(X,u[,t+1])

lines(c(-L,L),c(0,0)) }

Riferimenti

Documenti correlati

risulta essere troppo piccolo e rende il metodo non competitivo dal punto di vista computazionale... Esperimento numerico:

Si dimostra che le matrici dei sistemi lineari dei metodi di Eulero implicito e di Crank-Nicolson sono molto meglio condizionate della matrice A del sistema

In definitiva affinch` e il metodo di Eulero esplicito converga, il passo temporale dev’essere scelto dell’ordine di h 2 x /2, che in molti casi risulta essere troppo piccolo e rende

se theta=0 allora si utilizza il metodo di Eulero esplicito, mentre se theta=1 Eulero implicito;.. la variabile tfin determina l’ultimo istante possibile

Abbiamo visto infatti che per cattive scelte dello step temporale, il metodo di Eulero esplicito offre risultati non

Sei responsabile del materiale che alla mattina ti viene affidato dall’istruttore fino al rientro alla macchina…... Legatura ad una capo della corda di cordata

I L’uso di una macchina astratta (e della semantica come operazioni sul suo stato) consente di definire un linguaggio indipendentemente dalla pittaforma in uso.. I Per

Con la possibilità di fare un’ ESPE ESPE ESPE ESPERIENZA DI CONOSCENZA RIENZA DI CONOSCENZA RIENZA DI CONOSCENZA RIENZA DI CONOSCENZA E CONDIVISIONE DI GRUPPO E CONDIVISIONE