Equazione diffusione Condizioni al limite matlab

mastro871
Salve a tutti,
scrivo perché ho un problema nella soluzione dell'equazione di diffusione 1D, con matlab
Il problema è il seguente, per $t>0$ e $x\in[0,1]$:
$\frac{\partial T}{\partial t}-\frac{\partial^2 T}{\partial x^2}=0$ con condizioni al limite $T(x=0,t)=T(x=1,t)=0$ e condizione iniziale $T(x,t=0)=\sin(\pix)$.
Ho risolto il problema con le eulero implicito per la parte temporale e derivata centrata per la derivata seconda.
Il problema che ritrovo è illustrato nelle immagini, per $\Delta t=0.1$
$\Deltax=0.005$

$\Deltax=0.01$

Quando scelgo un $\Delta x$ troppo alto, la soluzione non rispetta le condizioni al limite.
é normale o c'è qualche fenomeno che non prendo in considerazione ?
Grazie

Risposte
Raptorista1
Come imponi le condizioni al bordo?

mastro871
Salve, grazie per la risposta, ecco il codice completo.
Inserisco le condizioni al limite come un termine noto supplementare nella parte dove risolvo il sistema implicito
clear all
close all
clc
L=1;
Dt=0.01;
alpha=1;
Dx=0.05;
N=ceil(L/Dx)-1;
s=alpha*Dt/Dx^2;% numero di Courant
x=linspace(0,1,N);
% VALORI PER LE CL DI DIRICHLET
cl1=0;
cl2=0;
for i=1:N
    for j=1:N
        if i==j
        A(i,j)=1+2*s;                    
        elseif j==i+1 || j==i-1
        A(i,j)=-s;
        end
    end
end
%%CI
U(:,1)=sin(pi*x);
%CL
CL=[cl1*s;zeros(N-2,1);cl2*s];
for t=1:20
    U(:,t+1)=A\(U(:,t)+CL);
end

Raptorista1
Detta così non mi suona familiare... Tra l'altro il tuo vettore CL è tutto zeri, quindi in questo caso è come se tu non stessi facendo proprio niente.

Il modo più comune per imporre le condizioni di Dirichlet con le differenze finite è di imporre direttamente il valore nel nodo interessato: in questo modo la prima riga della tua matrice \(A\) diventerebbe \((1 \ 0 \dots 0)\) ed il primo elemento del termine noto diventerebbe \(cl_1 = 0\); similmente il nodo finale.
Conosci questo metodo?

mastro871
Grazie della risposta, mi hai risolto un grosso dubbio !!
Ne approfitto per farti un'altra domanda, sul metodo di Crank-Nicolson.
Se lo impiqgo per risolvere il problema della diffusione con condizioni iniziali costanti a tratti e condizioni al limite di dirichlet, ottengo questa soluzione artistica:

Il problema che risolvo è,
$A_i U^{n+1}=A_e U^n$, (so che non é il massimo della vita)
Immagino che il problema sia sempre legato all'imposizione delle condizioni al limite ?
Il codice
L=1;
Dt=0.01;
alpha=1;
Dx=0.001;
N=ceil(L/Dx)-1;
s=alpha*Dt/Dx^2;
x=linspace(0,1,N);
cl1=6;
cl2=3;
for i=1:N
    for j=1:N
        if i==j
        AI(i,j)=1+s;    
        AE(i,j)=1-s;   
        elseif j==i+1 || j==i-1
        AI(i,j)=-s/2;
        AE(i,j)=s/2;
        end
    end
end
% CI
ispa=mod(N,2);
if ispa==0
U(:,1)=[cl1*ones(N/2,1);cl2*ones(N/2,1)];
else
    U(:,1)=[cl1*ones(ceil(N/2),1);cl2*ones(floor(N/2),1)];
end
AI(1,:)=[1,zeros(1,N-1)];
AI(N,:)=[zeros(1,N-1),1];
AE(1,:)=[1,zeros(1,N-1)];
AE(N,:)=[zeros(1,N-1),1];

for t=1:20
    U(:,t+1)=AI\(AE*U(:,t));
end

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