SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
MODIFICA DEL DOMINIO E CREAZIONE DI
UNA MESH PERSONALIZZATA PER LA
RISOLUZIONE DI EQUAZIONI
DIFFERENZIALI ATTRAVERSO LA
COMMAND LINE DI PDE TOOL
A cura di:
Emanuele Zappia
Questa relazione ha come scopo quello di illustrare come utilizzare il pacchet-
to PDE Tool dalla command line, spiegando come usare alcune funzioni del PDE
Toolbox direttamente da essa, in quanto ogni operazione compiuta tramite GUI pu`o
essere effettuata anche dalla linea di comando.
In particolare si vuole affrontare la problematica del dominio personalizzato, cio`e
lavorare con PDE Tool, sempre senza intervenire tramite GUI, su domini dalle geo-
metrie personalizzate, avendo quindi la possibilit`a di realizzare anche domini pi`u
complessi di quelli ottenibili tramite interfaccia GUI.
A tale proposito verranno presentati i programmi Pde geometry.m e Geome-
try.m.
Inoltre verr`a illustrato il programma meshing.m, tale funzione, consideran-
do un domino semplice rettangolare, riesce ad attuare una suddivisione in mesh
triangolari di tale dominio, la cui uscita risulta essere perfettamente compatibile
con le funzioni del PDE Toolbox; comaptibilit`a verificata attraverso il programma
Pde meshing.m.
Pde geometry.m
• Mesh generation
• Condizioni a bordo
• Solving
• Plotting
1 %Fem2D con un problema dirichlet per l’equazione di Laplace.
2 %-DU(x,y)=0; x,y su Om
3 %condizioni di dirichlet U(x,y)=x.^2-y.^2 su dOm
4 %Sol esatta: U(x,y)=x.^2-y.^2;
5 %Il problema `e affrontato utilizzando pdetool dalla command line e
6 % considerando un dominio personalizzato , modificabile secondo le esigenze
7 %attraverso la funzione "Geometry.m".
8 function u = Pde_geometry
9
10
11 %{ Mesh generation}
12 global nl
13 nl=4; %Numero dei segmenti in cui divido il bordo del mio dominio
14
15 if nl <=1
16 error(’nl deve essere un numero intero positivio superiore a 2’)
17 end
18 [p,e,t]= initmesh(’Geometry ’);
19 %[p,e,t]= initmesh(’Geometry ’,’Hmax ’,1,’Hgrad ’ ,1.1 ,...
20 % ’Jiggle ’,’mean ’,’JiggleIter ’,5); %Opzioni di jiggle
21 %[p,e,t]= refinemesh(’Geometry ’,p,e,t,’regular ’);
1
22 %Rifinisce la mesh , possiamo fare un ciclo per rifinire pi`u volte la mesh
23 pdegplot(’Geometry ’); axis equal;
24 figure (2)
25 pdemesh(p,e,t), axis equal
26
27 %{ Condizioni a bordo}
28
29 %Andr`o a imporre le condizioni a bordo di tipo dirichlet U(x,y)=x.^2-y.^2
30 %generando la matrice ’C’ delle condizioni a bordo
31 %compatibile con il comando assempde
32 c=[1 1 1 1 1 9 48 48 49 120 46 94 50 45 121 46 94 50] ’;
33 %Linguaggio ascii negli ultimi elementi
34 n=numel(c);
35 C=zeros(n,nl);
36
37 for i=1:nl
38 C(:,i)=c;
39 end
40
41 %{ Solving}
42 u=assempde(C,p,e,t,1,0,0);
43
44
45 %{ Plotting}
46 figure (3)
47 pdeplot(p,e,t,’xydata ’,u,’zdata ’,u,’mesh ’,’on ’)
48
49
50 end
Il problema affrontato nei programmi esemplificativi Pde geometry.m e Geome-
try.m `e quello relativo alla risoluzione dell’equazione di Laplace con condizioni di
tipo Dirichlet; Pde Tool affronta la risoluzione di tale problema con il metodo FEM.
− U = 0 x, y ∈ Ω (1)
U(x, y) = x2
− y2
x, y ∈ δΩ (2)
U(x, y) = x2
− y2
(3)
L’equzione 1 `e l’equaizone di Laplace, nella 2 sono scritte le condizioni a con-
trono di tipo Dirichlet e nella 3 la soluzione esatta del problema. Il programma
Pde geometry.m `e quello principale, cio`e quello dal quale facciamo partire Pde Tool
dalla linea di comando ed in cui inizializziamo la mesh, impostiamo le condizioni a
contorno e risolviamo il problema; il programma Geometry.m `e relativo unicamente
alla definizione del dominio sul quale risolvere l’equazione, ricordiamo che invece
la suddivisione in mesh, per quanto richiamata attraverso la linea di comando, fa
sempre capo agli algoritmi utilizzati da Pde Tool.
2
Pde geometry.m si suddivide in quattro parti:
• Generazione della mesh
• Imposizione delle condizioni a bordo
• Risoluzione dell’equazione differenziale
• Rappresentazione grafica dei risultati ottenuti
Nella prima parte inizialmente definisco nl, che rappresenta il numero di segmen-
ti in cui suddivido il bordo del mio dominio, quale variabile globale; tale espediente
mi servir`a per poter avere una variabile comune sia in Pde geometry.m che in Geo-
metry.m e quindi la stessa suddivisione del bordo del mio dominio per entrambi i
programmi.
Successivamente richiamiamo la funzione initmesh, il cui argomento sar`a proprio
il nostro programma Geometry. Tale funzione inizializzer`a una mesh triangolare nel
domino definito dalla funzione Geometry; la triangolazione usata `e del tipo Delau-
nay e, se non aggiunte specifiche a tale comando, la grandezza della mesh dipender`a
unicamente dalla forma imposta in Geometry.
L’uscita di initmesh consta di tre matrici p, e e t.
La Point matrix p `e formata da due righe che contengono rispettivamente le ascisse
e le ordinate dei nodi della mesh. La Edge matrix e `e invece composta da sette
righe: la prima e la seconda contengono gli indici dei nodi iniziali e finali della mesh
presenti sul bordo del dominio nel verso indotto dalla parametrizzaizone del bordo,
la terza e la quarta riga sono composte dai valori parametrizzati dei nodi iniziali e
finali della mesh presenti sul bordo del dominio, la quinta riga contiene il numero
del segmento del bordo del dominio di riferimento (rispetto al numero nl di nume-
ro di segmenti in cui abbiamo suddiviso il nostro dominio), la sesta e settima riga
contengono il numero identificativo dei sottodomini rispettivamente alla sinistra e
alla destra del segmento del bordo di dominio di riferimento (questa indicazione ri-
sulta banale se si lavora con un unico dominio e non pi`u sottodomini). La Triangle
matrix t `e formata da quattro righe, le prime tre contengono gli indici assegnati ai
tre vertici dei triangoli che formano la mesh, assegnati in verso antiorario, infine la
quarta riga contiene il numero identificativo del sottodominio di appartenenza dei
vari triangoli.
Tali matrici sono necessarie per risolvere l’equazione differenziale attraverso il co-
mando assempde di PDE toolbox.
3
E’ possibile aggiungere opzioni al comando initmesh per incorporare specifiche ri-
guardo alla creazione della mesh, `e inoltre possibile rifinire la mesh attraverso il
comando refinemesh; tali informazioni aggiuntive sono a disposizione nell’help di
MATLAB.
Per l’imposizione delle condizioni a bordo abbiamo bisogno di costruire una ma-
trice, nel nostro caso C, in cui ogni colonna si riferir`a ad un segmento specifico del
bordo (alla stessa maniera in cui noi assegniamo tramite GUI le condizioni a bordo
su ogni frazione di bordo del nostro dominio).
In Pde geometry.m la costruzione di tale matrice `e condizionata dal numero di
segmenti in cui ho suddiviso il bordo del mio dominio nl (avremo quindi nl colonne)
e inoltre, come da problema, ho imposto le stesse condizioni su tutti i bordi.
Soffermiamo ora la nostra attenzione sulla costruzione di una colonna tipo di tale
matrice, considerando il seguente formalismo per le condizioni a contorno:
ˆn · (c u) + qu = g (4)
hu = r (5)
L’equazione 4 rappresenta una condizione di Neumann generalizzata mentre la
5 quella di Dirichlet. La prima riga contiene la dimensione del sistema di equazioni
differenziali che dobbiamo risolvere, la seconda il numero di condizioni Dirichlet, si
devono ora inserire dalla terza alla sesta riga il numero di caratteri che compon-
gono le espressioni rispettivamente del coefficiente q per la terza e del coefficiente
g per la quarta nel caso di condizione di tipo Neumann generalizzata facendo (si
fa riferimento all’equazione 4), per la quinta e sesta riga dobbiamo invece inserire
rispettivamente il numero di caratteri che compongono le espressioni di h ed r in
riferimento alla condizione di tipo Dirichlet, equazione 5 (anche in assenza di condi-
zioni di tipo Neumann o Dirichlet devo indicare che il numero di caratteri `e 1 al fine
di indicare successivamente che tali coefficienti saranno uguali a zero). Successiva-
mente, rispetto anche al numero di caratteri indicati nelle righe precedenti necessari
per descrivere i vari coefficienti, si inseriranno i valori ASCII che compongono le
espressioni di q,g,h ed r, includendo ovviamente anche tutti gli operatori secondo
tale standard.
Per quanto riguarda la risoluzione dell’equazione dobbiamo scegliere il solver a
seconda del tipo di equazione del problema.
Per equazioni di tipo ellittico sono a disposizione i solver assempde e adaptmesh, per
4
equazioni di tipo iperbolico c’`e il solver hyperbolic e per equazioni di tipo parabolico
il solver parabolic.
Nel caso in esame l’equazione da risolvere `e quella di Laplace, un caso particolare
di equazione ellittica, `e stato quindi utilizzato il solver assempde.
Facendo riferimento al seguente formalismo:
− · (c u) + au = f (6)
Bisogner`a inserire come argomenti di assempde per primo la matrice delle con-
dizioni a bordo(nel nostro caso C), poi le matrici p, e e t, ed infine i coefficienti
dell’equazione differenziale da risolvere c,a e f (in riferimento all’equazione 6).
La funzione assempde pu`o essere richiamata inoltre con sintassi diverse per ottenere
ulteriori informazioni sulla equazione differenziale in esame. La descrizione completa
di tutti i possibili modi di usare assempde esula dallo scopo di questa relazione, ma
tutte le informazioni sono disponibili sul manuale del Toolbox.
Infine, per stampare i risultati della soluzione, mi sono avvalso del comando pde-
plot.
E’ stato verificato che, utilizzando questi comandi, si otterr`a lo stesso risultato
utilizzando PDE Tool tramite GUI.
Ovviamente l’utilizzo della command line porta con se innumerevoli vantaggi apren-
do un pi`u vasto ventaglio di possibilit`a e offrendo un approccio pi`u rigoroso ai
problemi risolvibili mediante PDE Tool.
5
−1 −0.5 0 0.5 1
−1
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
Figura 1: Il bordo del dominio.
−1 −0.5 0 0.5 1
−1
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
Figura 2: Inizializzazione della mesh sul dominio definito in Geometry.m tramite il
comando initimesh.
6
−1
−0.5
0
0.5
1
−1−0.8−0.6−0.4−0.200.20.40.60.81
−1
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
−1
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
Figura 3: Soluzione ottenuta tramite l’utilizzo della command line di PDE Tool.
7
Geometry.m
1 %File che descrive la geometria del mio dominio secondo le specifiche
2 %adatte per inizializzare la mesh su tale dominio
3 %da pdetool con il comando"initmesh ".
4 %La variabile global nl , mi permette di suddividere
5 % arbitrariamente il bordo del mio dominio in nl segmenti.
6 %La versione in analisi di questo programma `e valida solo per
7 %bordi parametrizzabili secondo una circonferenza .
8 function [x,y]= Geometry(bs ,s)
9 global nl
10 nbs=nl; %Numero dei segmenti in cui divido il bordo del mio dominio
11
12 if nargin ==0
13 x=nbs;
14 return
15 end
16
17 dl=zeros (4,nbs);
18 h=linspace (0 ,2*pi ,nbs +1);
19
20 for i=1: nbs %Matrice dei "nbs" segmenti
21 dl(1,i)=h(1,i);
22 dl(2,i)=h(1,i+1);
23 end
24 dl(3 ,:)=ones(1,nbs);
25
26 %dl=[0 pi/2 pi 3/2* pi; pi/2 pi 3/2* pi 2*pi; 1 1 1 1; 0 0 0 0];
27 %Matrice dei "nbs" segmenti
28
29 if nargin ==1
30 x=dl(:,bs);
31 return
32 end
33
34 x=zeros(size(s));
35 y=zeros(size(s));
36 [m,n]= size(bs);
37 if m==1 & n==1,
38 bs=bs*ones(size(s)); % expand bs
39 elseif m~= size(s,1) | n~= size(s,2),
40 error(’bs must be scalar or of same size as s’);
41 end
42
43
44 n=100;
45 %Imposto il numero di punti sul mio bordo ,
46 %ossia quanto voglio discretizzare il mio bordo
47 t=linspace (0 ,2*pi ,n);
48 %r=2*(1+ cos(t)); %Cardioide
49 r=1; %Cerchio
50 %r=cos(t).^2+ sin(t/2); %" Pera in orizzontale"
51 %r=cos(t).^2-sin(t).^2+1; %" Orbitale"
52 xt=r.*cos(t);
53 yt=r.*sin(t);
8
54 t=pdearcl(t,[xt;yt],s,0 ,2*pi);
55 %r=2*(1+ cos(t)); %Cardioide
56 r=1; %Cerchio
57 %r=cos(t).^2+ sin(t/2); %Pera in orizzontale
58 %r=cos(t).^2-sin(t).^2+1; %Orbitale
59 x(:)=r.*cos(t);
60 y(:)=r.*sin(t);
61 end
Questa funzione descrive la geometria del mio dominio secondo le specifiche adat-
te per inizializzare la mesh dalla command line di PDE Tool attraverso il comando
initmesh.
Per costruire tale funzione ho seguito le istruzioni sulla composizione di pdegeom
presenti nell’help di MATLAB; per`o la versione qui presentata `e una variazione di
tale funzione.
Le caratteristiche principali di Geometry.m sono:
• La divisione del bordo del domino `e la stessa di Pde geometry.m
grazie alla variabile globale nl
• La costruzione della matrice dl `e impostata per ’forme circolari’, va
modificata se si hanno esigenze diverse riguardo la forma del domino
• La geometria del dominio proposta `e quella di un cerchio di raggio
r, come commenti sono proposte anche forme pi`u complesse
Alla variabile nbs all’inizio del programma va assegnato il numero di segmenti
di bordo, bisogna poi costruire la matrice dl ed effettuare in maniera corretta la
parametrizzazione del bordo.
Ogni colonna di dl si riferisce a un segmento del bordo del dominio (quindi nel nostro
caso avremo nl colonne), nella prima riga si mette il valore del parametro t da cui
inizia il segmento, nella seconda riga il valore di t che segna la fine del segmento.
Nella terza riga si deve mettere il numero della regione che si trova a sinistra del
segmento, percorrendolo nel verso indotto dalla parametrizzazione, nella quarta il
numero della regione che si trova a destra. In generale la matrice dl deve essere
costruita seguendo queste direttive.
Per quanto riguarda la parametrizzazione del dominio devo prima impostare il nu-
mero di punti n del mio bordo per indicare quanto vogliamo che sia fitta la di-
scretizzazione dello stesso. In t si memorizzano i valori dei nodi risultanti dalla
suddivisione, nelle due variabili di appoggio a e b si memorizzano i valori delle coor-
dinate della curva corrispondenti ai valori dei nodi memorizzati in t. Il comando
t=pdearcl(t,[xt;yt],s,0,2*pi) serve ad ottenere una suddivisione dell’intervallo che
non `e pi`u uniforme, ma dipende dal parametro s che viene passato alla funzione.
9
Anche questo comando `e necessario perch´e tutte le funzioni del Toolbox gestiscano
bene Geometry.m, in generale bisogner`a modificare gli ultimi due parametri passati
a pdearcl, che sono l’estremo sinistro e quello destro dell’intervallo su cui varia t.
Dopodich´e si ricalcolano a e b nei nodi cos`ı ottenuti, e si possono finalmente asse-
gnare tali valori ad x e ad y.
I ’:’ nei comandi x(:)=a y(:)=b, servono a mantenere per x ed y la stessa struttura
delle variabili a e b, questo `e un accorgimento essenziale perch´e il tutto funzioni
bene in quanto l’uscita [x,y] della funzione deve essere correttamente interpretata
da initmesh, in virt`u di ci`o il resto del codice che non `e stato commentato in questa
sede deve essere scritto nello stesso modo e deve essere necessariamente presente.
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
−1.5
−1
−0.5
0
0.5
1
1.5
Figura 4: Inizializzazione di una mesh tramite il comando initimesh su un dominio non
banale di forma ’orbitale’ definito in Geometry.m.
10
meshing.m e Pde meshing.m
meshing.m
• Inizializzazione
• Generazione della matrice t
• Generazione della matrice p
• Generazione della matrice e
1 function [p,e,t] = meshing(n,Lx ,Ly ,d)
2
3 %{ Inizializzazione }
4
5 %n=4; %n=parametro di infittimento e dal quale dipende la
6 %dimensione della matrice N (nxn) e il numero di nodi (n^2)
7 %Lx=1; Ly =1; d=1; %dimensioni del dominio e posizione nello
8 %spazio rispetto all ’origine
9 if any ([n-1 Lx Ly] <=0)
10 error(’Controllare i parametri del problema ’)
11 end
12
13 N=numgrid(’S’,n+2);
14 N=N(2:end -1 ,2:end -1);
15 %Devo farlo perch`e la matrice numgrid si genera con 0 sui bordi
16 h = Lx/(n-1);
17 k = Ly/(n-1);
18
19 %{ Generazione della matrice t}
20
21 t=ones (4 ,2*(n-1) ^2);
22 %Generazione dei triangoli up
23 count = 1;
24 for i = 1:n-1
25 for j = 1:n-1
26 t(1, count) = N(i,j);
27 t(2, count) = N(i+1,j);
28 t(3, count) = N(i,j+1);
29 count = count +1;
30 end
31 end
32 %Generazione dei triangoli down
33 for i = 2:n
34 for j = 1:n-1
35 t(1, count) = N(i,j);
36 t(2, count) = N(i,j+1);
37 t(3, count) = N(i-1,j+1);
38 count = count +1;
39 end
40 end
41
42 %{ Generazione della matrice p}
43
11
44 p=zeros (2,n^2);
45 for i =1:n
46 for j=1:n
47 p(1,N(i,j)) = h*(j -1)+d;
48 %Il numero di colonne di P corrisponde al valore del nodo in N,
49 %perch`e `e ordinato in ordine crescente columnwise
50 p(2,N(i,j)) = Ly - k*(i -1)+d;
51 %Ly - k perch´e `e decrescente column wise (vedi numgrid)
52 end
53 end
54
55 e=zeros (7 ,4*(n -1));
56
57 count =1;
58 for i =1:n-1
59 e(1, count) = N(i ,1);
60 e(2, count) = N(i+1 ,1);
61 e(5, count) = count;
62 count = count +1;
63 end
64
65 for j =1:n-1
66 e(1, count) = N(n,j);
67 e(2, count) = N(n,j+1);
68 e(5, count) = count;
69 count = count +1;
70 end
71
72 for i =n: -1:2 %dal basso verso l’alto per preservare l’ordine
73 e(1, count) = N(i,n);
74 e(2, count) = N(i-1,n);
75 e(5, count) = count;
76 count = count +1;
77 end
78
79 for j =n: -1:2
80 e(1, count) = N(1,j);
81 e(2, count) = N(1,j-1);
82 e(5, count) = count;
83 count = count +1;
84 end
85 s=1/(n -1); % parametrizzazione
86
87 r=zeros (1,n -1);
88 for i=0:n-2
89 r(1,i+1)=i*s;
90 end
91 e(3 ,:) =[r r r r];
92
93 v=zeros (1,n -1);
94 for i=1:n-1
95 v(1,i)=i*s;
96 end
97 e(4 ,:) =[v v v v];
98
99 l1=ones(1,n-1); l2 =2.* ones(1,n -1); l3 =3.* ones(1,n-1); l4 =4.* ones(1,n-1);
12
100 e(5 ,:)=[l1 l2 l3 l4]; %Lati del dominio rettangolare (1,2,3,4)
101 e(6 ,:) = 1;
102 %Quanti domini e sottodomini ho? (1) ,quindi 6a riga 1,
103 %7a riga 0( domino di dx e sx)
104
105 pdemesh(p,e,t)
106 end
Il programma meshing.m `e stato scritto in maniera tale da generare una suddi-
visione in mesh di un dominio rettangolare di dimensioni Lx ∗ Ly , su di una griglia
avente n nodi per lato e con la possibilit`a di traslare dall’origine tale dominio nello
spazio secondo un fattore d (opzione utile ad esempio per studiare il comportamento
di soluzioni di equazioni differenziali intorno o lontano da punti di criticit`a).
Le variabili in entrata sono quindi n,Lx,Ly e d ed in uscita abbiamo le tre matrici
p, e e t descritte nel paragrafo iniziale, l’uscita di questo programma `e quindi
perfettamente compatibile con i comandi di PDE Tool ma la suddivisione
in mesh `e affidata al programma stesso e non al comando initmesh.
Questo programma si suddivide in:
• Inizializzazione del dominio
• Generazione della matrice t
• Generazione della matrice p
• Generazione della matrice e
Per inizializzare il dominio dobbiamo definire o dare come variabili n,Lx,Ly e d.
Successivamente generer`o la matrice N di dimensioni [nxn], questa sar`a costruita
attraverso il comando numgrid(’S’,n+2) il quale dar`a come uscita una matrice qua-
drata (la specifica ’S’ sta per square) di dimensione[n+2xn+2] con prima e ultima
riga e prima e ultima colonna formate da zeri e gli n2
elementi disposti columnwise
(in ordine crescente dal primo all’ultimo elemento della colonna), dalla matrice cos`ı
siffatta prenderemo il minore escludendo gli zeri, quindi prima ed ultima colonna e
riga, cos`ı da ottenere una matrice con degli elementi numerati in maniera simmetri-
ca, ottima base di partenza per la generazione di una mesh triangolare.
Definiamo anche i valori h ed k quali distanze che intercorrono tra un nodo e l’altro
in direzione x e y.
La generazione della matrice t avviene costruendo prima i triangoli con l’ipote-
nusa rivolta verso l’alto (up) e successivamente costruendo i triangoli con l’ipotenusa
rivolta verso il basso (down), viene tenuto conto della numerazione dei nodi in senso
13
antiorario e della scrittura della quarta riga contenente il numero identificativo del
sottodominio di appartenenza dei vari triangoli.
La generazione della matrice p, che ricordiamo essere formata da due righe che
contengono rispettivamente le ascisse e le ordinate dei nodi, sfrutta il fatto che il
numero di colonne di questa matrice `e corrisponde al valore del nodo dell’elemento
N(i,j) proprio in virt`u della particolare simmetria di N.
La generazione della matrice e avviene per le prime due righe seguendo un pre-
ciso verso di parametrizzazione, cio`e, partendo dal primo elemento della matrice, in
senso antiorario.
Successivamente le altre righe vengono scritte impostando il coefficiente di parame-
trizzazione s = 1/(n − 1).
A fine programma viene anche visualizzata la mesh creata.
1 1.2 1.4 1.6 1.8 2
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
Figura 5: Mesh ottenuta attraverso il programma meshing.m.
14
Pde meshing.m
La funzione meshing.m viene richiamata in Pde meshing.m per produrre le matrici
p, e e t secondo le variabili n, Lx, Ly e d definite all’interno di Pde meshing.m.
Il continuo di tale programma `e analogo a Pde geometry.m ma qui non vi `e necessit`a
di richiamare initmesh in quanto abbiamo noi stessi effettuato la suddivisione del
dominio in mesh.
• Dominio
• Mesh generation
• Condizioni a bordo
• Solving
• Plotting
1 %Fem2D con un problema dirichlet per l’equazione di Laplace.
2 %-DU(x,y)=0; x,y su Om
3 % condizioni di dirichlet U(x,y)=x.^2-y.^2 su dOm
4 % Sol esatta: U(x,y)=x.^2-y.^2;
5 %Il problema `e affrontato utilizzando pdetool dalla command line e
6 %utilizzando un programma di generazione della mesh creato ad hoc "Meshing ".
7 function Pde_meshing
8
9 %{ Dominio}
10
11 Lx=1; Ly =1; d=1;
12
13 %{ Mesh generation}
14
15 n=10;
16 [p,e,t] = meshing(n,Lx ,Ly ,d);
17
18 %{ Condizioni a bordo}
19
20 %Andr`o a imporre le condizioni a bordo di tipo dirichlet U(x,y)=x.^2-y.^2
21 %generando la matrice delle condizioni a bordo che legge pdetool "C"
22 c=[1 1 1 1 1 9 48 48 49 120 46 94 50 45 121 46 94 50];
23 %Linguaggio ascii negli ultimi elementi
24 C=[c;c;c;c];
25 C=C’;
26
27 %{ Solving}
28
29 u=assempde(C,p,e,t,1,0,0);
30
31 %{ Plotting}
32
33 %figure (2) pdesurf(p,t,u)
34
35 figure (2)
36 pdeplot(p,e,t,’xydata ’,u,’zdata ’,u,’mesh ’,’on ’)
37
38 end
15
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
−3
−2
−1
0
1
2
3
−3
−2
−1
0
1
2
3
Figura 6: Soluzione ottenuta tramite Pde meshing.m sulla mesh definita in meshing.m.
16
Bibliografia
[1] B. D’Acunto (2012), Computational Partial Differential Equations for
Engineering Science, Nova Science Publishers, New York.
[2] L. Cerone (2006), Matlab PDE Toolbox - Risoluzione di equazioni alle derivate
parziali utilizzando Matlab, Tesi di laurea in Matematica, Universit`a di Roma La
Sapienza.
17

Weitere ähnliche Inhalte

Was ist angesagt?

Continuità e derivabilità di una funzione.
Continuità e derivabilità di una funzione.Continuità e derivabilità di una funzione.
Continuità e derivabilità di una funzione.Luigi Pasini
 
Disequazioni [teoria ed esericizi][santi caltabiano]
Disequazioni [teoria ed esericizi][santi caltabiano]Disequazioni [teoria ed esericizi][santi caltabiano]
Disequazioni [teoria ed esericizi][santi caltabiano]santi caltabiano
 
Unità_Problemi_Controllo_Ottimale_Funzioni_Continue
Unità_Problemi_Controllo_Ottimale_Funzioni_ContinueUnità_Problemi_Controllo_Ottimale_Funzioni_Continue
Unità_Problemi_Controllo_Ottimale_Funzioni_Continuefrancescazavatta
 
Parallel Sparse Matrix Vector Multiplication Using CSB
Parallel Sparse Matrix Vector Multiplication Using CSBParallel Sparse Matrix Vector Multiplication Using CSB
Parallel Sparse Matrix Vector Multiplication Using CSBDavid Santucci
 
Schema Risolutivo Delle Serie
Schema Risolutivo Delle SerieSchema Risolutivo Delle Serie
Schema Risolutivo Delle SerieDinoIT
 
Derivate - esercizi con soluzioni
Derivate - esercizi con soluzioniDerivate - esercizi con soluzioni
Derivate - esercizi con soluzioniCristina Scanu
 
Matlab: Introduzione e comandi base
Matlab: Introduzione e comandi baseMatlab: Introduzione e comandi base
Matlab: Introduzione e comandi baseMajong DevJfu
 
Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]
Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]
Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]santi caltabiano
 
La Retta nel piano cartesiano
La Retta nel piano cartesianoLa Retta nel piano cartesiano
La Retta nel piano cartesianoRosangela Mapelli
 
Continuità di una funzione
Continuità di una funzioneContinuità di una funzione
Continuità di una funzioneannacorsica
 
Appunti di Elaborazione automatica dei dati: il simplesso
Appunti di Elaborazione automatica dei dati: il simplessoAppunti di Elaborazione automatica dei dati: il simplesso
Appunti di Elaborazione automatica dei dati: il simplessoprofman
 

Was ist angesagt? (20)

Continuità e derivabilità di una funzione.
Continuità e derivabilità di una funzione.Continuità e derivabilità di una funzione.
Continuità e derivabilità di una funzione.
 
La Retta
La RettaLa Retta
La Retta
 
Derivate
DerivateDerivate
Derivate
 
Disequazioni [teoria ed esericizi][santi caltabiano]
Disequazioni [teoria ed esericizi][santi caltabiano]Disequazioni [teoria ed esericizi][santi caltabiano]
Disequazioni [teoria ed esericizi][santi caltabiano]
 
Piano cartesiano pdf
Piano cartesiano pdfPiano cartesiano pdf
Piano cartesiano pdf
 
Massimi e minimi
Massimi e minimiMassimi e minimi
Massimi e minimi
 
Unità_Problemi_Controllo_Ottimale_Funzioni_Continue
Unità_Problemi_Controllo_Ottimale_Funzioni_ContinueUnità_Problemi_Controllo_Ottimale_Funzioni_Continue
Unità_Problemi_Controllo_Ottimale_Funzioni_Continue
 
Limiti
LimitiLimiti
Limiti
 
Flessi
FlessiFlessi
Flessi
 
Parallel Sparse Matrix Vector Multiplication Using CSB
Parallel Sparse Matrix Vector Multiplication Using CSBParallel Sparse Matrix Vector Multiplication Using CSB
Parallel Sparse Matrix Vector Multiplication Using CSB
 
Limiti
LimitiLimiti
Limiti
 
Schema Risolutivo Delle Serie
Schema Risolutivo Delle SerieSchema Risolutivo Delle Serie
Schema Risolutivo Delle Serie
 
Derivate - esercizi con soluzioni
Derivate - esercizi con soluzioniDerivate - esercizi con soluzioni
Derivate - esercizi con soluzioni
 
Matlab: Introduzione e comandi base
Matlab: Introduzione e comandi baseMatlab: Introduzione e comandi base
Matlab: Introduzione e comandi base
 
Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]
Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]
Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]
 
La Retta nel piano cartesiano
La Retta nel piano cartesianoLa Retta nel piano cartesiano
La Retta nel piano cartesiano
 
Operazioni sui limiti e calcolo limiti notevoli
Operazioni sui limiti e calcolo limiti notevoliOperazioni sui limiti e calcolo limiti notevoli
Operazioni sui limiti e calcolo limiti notevoli
 
Continuità di una funzione
Continuità di una funzioneContinuità di una funzione
Continuità di una funzione
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Appunti di Elaborazione automatica dei dati: il simplesso
Appunti di Elaborazione automatica dei dati: il simplessoAppunti di Elaborazione automatica dei dati: il simplesso
Appunti di Elaborazione automatica dei dati: il simplesso
 

Andere mochten auch

профілактика туберкульозу зош і ііі. № 9
профілактика туберкульозу зош і ііі. № 9профілактика туберкульозу зош і ііі. № 9
профілактика туберкульозу зош і ііі. № 9jekah
 
презентация 1
презентация 1презентация 1
презентация 1nata086550
 
New microsoft power point presentation
New microsoft power point presentationNew microsoft power point presentation
New microsoft power point presentationNarar7
 
Cac mon sup danh cho be an dặm
Cac mon sup danh cho be an dặmCac mon sup danh cho be an dặm
Cac mon sup danh cho be an dặmafraidfuel3732
 
презентация1
презентация1презентация1
презентация1linka68
 
Las obejitas se multiplican
Las obejitas se multiplicanLas obejitas se multiplican
Las obejitas se multiplicanNombre Apellidos
 
Apa sih supervisi manajerial itu
Apa sih supervisi manajerial ituApa sih supervisi manajerial itu
Apa sih supervisi manajerial itusfiraru
 
14708251076_Arna Putri_Sensor Listrik
14708251076_Arna Putri_Sensor Listrik14708251076_Arna Putri_Sensor Listrik
14708251076_Arna Putri_Sensor ListrikIPA 2014
 

Andere mochten auch (20)

профілактика туберкульозу зош і ііі. № 9
профілактика туберкульозу зош і ііі. № 9профілактика туберкульозу зош і ііі. № 9
профілактика туберкульозу зош і ііі. № 9
 
Atest 17025
Atest 17025Atest 17025
Atest 17025
 
Zsh 2
Zsh 2Zsh 2
Zsh 2
 
презентация 1
презентация 1презентация 1
презентация 1
 
οδυ
οδυοδυ
οδυ
 
تقرير
تقريرتقرير
تقرير
 
esculturaimpresionista
esculturaimpresionistaesculturaimpresionista
esculturaimpresionista
 
New microsoft power point presentation
New microsoft power point presentationNew microsoft power point presentation
New microsoft power point presentation
 
Luxemburger wort Tendances
Luxemburger wort TendancesLuxemburger wort Tendances
Luxemburger wort Tendances
 
Cac mon sup danh cho be an dặm
Cac mon sup danh cho be an dặmCac mon sup danh cho be an dặm
Cac mon sup danh cho be an dặm
 
презентация1
презентация1презентация1
презентация1
 
T wletteratura sella-lab biella
T wletteratura   sella-lab biellaT wletteratura   sella-lab biella
T wletteratura sella-lab biella
 
Ángeles y Demonios
Ángeles y DemoniosÁngeles y Demonios
Ángeles y Demonios
 
Bine ati venit!!!
Bine ati venit!!!Bine ati venit!!!
Bine ati venit!!!
 
Las obejitas se multiplican
Las obejitas se multiplicanLas obejitas se multiplican
Las obejitas se multiplican
 
Carnevale 2015
Carnevale 2015Carnevale 2015
Carnevale 2015
 
Apa sih supervisi manajerial itu
Apa sih supervisi manajerial ituApa sih supervisi manajerial itu
Apa sih supervisi manajerial itu
 
14708251076_Arna Putri_Sensor Listrik
14708251076_Arna Putri_Sensor Listrik14708251076_Arna Putri_Sensor Listrik
14708251076_Arna Putri_Sensor Listrik
 
Ako efektívne googliť
Ako efektívne googliťAko efektívne googliť
Ako efektívne googliť
 
T4 alumnosprobabilidades
T4 alumnosprobabilidadesT4 alumnosprobabilidades
T4 alumnosprobabilidades
 

Ähnlich wie Domain changing and creation of a custom mesh for the resolution of partial differential equations through the command line of pde tool

Presentazione Tesi Laurea 2010
Presentazione Tesi Laurea 2010Presentazione Tesi Laurea 2010
Presentazione Tesi Laurea 2010Alessio Polidoro
 
Guida all'utilizzo di OpenFOAM su Windows10 (con Ubuntu LTS) - Capitolo 2
Guida all'utilizzo di OpenFOAM su Windows10 (con Ubuntu LTS) - Capitolo 2Guida all'utilizzo di OpenFOAM su Windows10 (con Ubuntu LTS) - Capitolo 2
Guida all'utilizzo di OpenFOAM su Windows10 (con Ubuntu LTS) - Capitolo 2Andrea Pisa
 
Algoritmi di ordinamento
Algoritmi di ordinamentoAlgoritmi di ordinamento
Algoritmi di ordinamentoMarco Liverani
 
Lez.5 - Corso di modelli e GIS per l'ambiente
Lez.5 - Corso di modelli e GIS per l'ambienteLez.5 - Corso di modelli e GIS per l'ambiente
Lez.5 - Corso di modelli e GIS per l'ambienteMargherita Di Leo
 
Minimax regret solution to linear programming problems with an interval obje...
Minimax regret solution to linear programming problems with  an interval obje...Minimax regret solution to linear programming problems with  an interval obje...
Minimax regret solution to linear programming problems with an interval obje...NicolasTortora
 
Ricostruzioni Lisce di Superfici da una Data Triangolazione
Ricostruzioni Lisce di Superfici da una Data TriangolazioneRicostruzioni Lisce di Superfici da una Data Triangolazione
Ricostruzioni Lisce di Superfici da una Data TriangolazioneMartinaBellettini
 
Ma che freddo fa..aspettando una nevicata frattale!
Ma che freddo fa..aspettando una nevicata frattale!Ma che freddo fa..aspettando una nevicata frattale!
Ma che freddo fa..aspettando una nevicata frattale!annalf
 
Problemi np con esempio
Problemi np con esempioProblemi np con esempio
Problemi np con esempioRice Cipriani
 
Algoritmi e complessità computazionale
Algoritmi e complessità computazionaleAlgoritmi e complessità computazionale
Algoritmi e complessità computazionaleMarco Liverani
 
Elliptic Curve Method di Lenstra
Elliptic Curve Method di LenstraElliptic Curve Method di Lenstra
Elliptic Curve Method di Lenstrapeppespe
 
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdfPasqualeRuocco5
 
Ecdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiEcdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiAngela Cristina
 
Syntactical errors detection 1
Syntactical errors detection 1Syntactical errors detection 1
Syntactical errors detection 1LucaPostiglione2
 
Complessita' computazionale
Complessita' computazionaleComplessita' computazionale
Complessita' computazionaleSaraDiLuzio2
 

Ähnlich wie Domain changing and creation of a custom mesh for the resolution of partial differential equations through the command line of pde tool (18)

Presentazione Tesi Laurea 2010
Presentazione Tesi Laurea 2010Presentazione Tesi Laurea 2010
Presentazione Tesi Laurea 2010
 
Lezione 3 metodo monte carlo
Lezione 3   metodo monte carloLezione 3   metodo monte carlo
Lezione 3 metodo monte carlo
 
Guida all'utilizzo di OpenFOAM su Windows10 (con Ubuntu LTS) - Capitolo 2
Guida all'utilizzo di OpenFOAM su Windows10 (con Ubuntu LTS) - Capitolo 2Guida all'utilizzo di OpenFOAM su Windows10 (con Ubuntu LTS) - Capitolo 2
Guida all'utilizzo di OpenFOAM su Windows10 (con Ubuntu LTS) - Capitolo 2
 
Algoritmi di ordinamento
Algoritmi di ordinamentoAlgoritmi di ordinamento
Algoritmi di ordinamento
 
Metodi numerici
Metodi numericiMetodi numerici
Metodi numerici
 
Lez.5 - Corso di modelli e GIS per l'ambiente
Lez.5 - Corso di modelli e GIS per l'ambienteLez.5 - Corso di modelli e GIS per l'ambiente
Lez.5 - Corso di modelli e GIS per l'ambiente
 
Minimax regret solution to linear programming problems with an interval obje...
Minimax regret solution to linear programming problems with  an interval obje...Minimax regret solution to linear programming problems with  an interval obje...
Minimax regret solution to linear programming problems with an interval obje...
 
Ricostruzioni Lisce di Superfici da una Data Triangolazione
Ricostruzioni Lisce di Superfici da una Data TriangolazioneRicostruzioni Lisce di Superfici da una Data Triangolazione
Ricostruzioni Lisce di Superfici da una Data Triangolazione
 
Ma che freddo fa..aspettando una nevicata frattale!
Ma che freddo fa..aspettando una nevicata frattale!Ma che freddo fa..aspettando una nevicata frattale!
Ma che freddo fa..aspettando una nevicata frattale!
 
Problemi np con esempio
Problemi np con esempioProblemi np con esempio
Problemi np con esempio
 
Algoritmi e complessità computazionale
Algoritmi e complessità computazionaleAlgoritmi e complessità computazionale
Algoritmi e complessità computazionale
 
Elliptic Curve Method di Lenstra
Elliptic Curve Method di LenstraElliptic Curve Method di Lenstra
Elliptic Curve Method di Lenstra
 
Calcolo Parallelo
Calcolo ParalleloCalcolo Parallelo
Calcolo Parallelo
 
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
 
Ecdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiEcdl modulo 1 -Fondamenti
Ecdl modulo 1 -Fondamenti
 
Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
 
Syntactical errors detection 1
Syntactical errors detection 1Syntactical errors detection 1
Syntactical errors detection 1
 
Complessita' computazionale
Complessita' computazionaleComplessita' computazionale
Complessita' computazionale
 

Kürzlich hochgeladen

GIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroGIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroServizi a rete
 
GIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoGIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoServizi a rete
 
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaGIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaServizi a rete
 
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoGIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoServizi a rete
 
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleGIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleServizi a rete
 
GIORNATA TECNICA 18/04 | DE LEO Antonio
GIORNATA TECNICA 18/04  | DE LEO AntonioGIORNATA TECNICA 18/04  | DE LEO Antonio
GIORNATA TECNICA 18/04 | DE LEO AntonioServizi a rete
 
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneGIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneServizi a rete
 
Presentzione Matematica similitudini circonferenze e omotetie.pptx
Presentzione  Matematica similitudini circonferenze e omotetie.pptxPresentzione  Matematica similitudini circonferenze e omotetie.pptx
Presentzione Matematica similitudini circonferenze e omotetie.pptxfilippoluciani9
 
Descrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxDescrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxtecongo2007
 

Kürzlich hochgeladen (9)

GIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroGIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI Alessandro
 
GIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoGIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA Roberto
 
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaGIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
 
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoGIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
 
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleGIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
 
GIORNATA TECNICA 18/04 | DE LEO Antonio
GIORNATA TECNICA 18/04  | DE LEO AntonioGIORNATA TECNICA 18/04  | DE LEO Antonio
GIORNATA TECNICA 18/04 | DE LEO Antonio
 
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneGIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
 
Presentzione Matematica similitudini circonferenze e omotetie.pptx
Presentzione  Matematica similitudini circonferenze e omotetie.pptxPresentzione  Matematica similitudini circonferenze e omotetie.pptx
Presentzione Matematica similitudini circonferenze e omotetie.pptx
 
Descrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxDescrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptx
 

Domain changing and creation of a custom mesh for the resolution of partial differential equations through the command line of pde tool

  • 1. MODIFICA DEL DOMINIO E CREAZIONE DI UNA MESH PERSONALIZZATA PER LA RISOLUZIONE DI EQUAZIONI DIFFERENZIALI ATTRAVERSO LA COMMAND LINE DI PDE TOOL A cura di: Emanuele Zappia
  • 2. Questa relazione ha come scopo quello di illustrare come utilizzare il pacchet- to PDE Tool dalla command line, spiegando come usare alcune funzioni del PDE Toolbox direttamente da essa, in quanto ogni operazione compiuta tramite GUI pu`o essere effettuata anche dalla linea di comando. In particolare si vuole affrontare la problematica del dominio personalizzato, cio`e lavorare con PDE Tool, sempre senza intervenire tramite GUI, su domini dalle geo- metrie personalizzate, avendo quindi la possibilit`a di realizzare anche domini pi`u complessi di quelli ottenibili tramite interfaccia GUI. A tale proposito verranno presentati i programmi Pde geometry.m e Geome- try.m. Inoltre verr`a illustrato il programma meshing.m, tale funzione, consideran- do un domino semplice rettangolare, riesce ad attuare una suddivisione in mesh triangolari di tale dominio, la cui uscita risulta essere perfettamente compatibile con le funzioni del PDE Toolbox; comaptibilit`a verificata attraverso il programma Pde meshing.m. Pde geometry.m • Mesh generation • Condizioni a bordo • Solving • Plotting 1 %Fem2D con un problema dirichlet per l’equazione di Laplace. 2 %-DU(x,y)=0; x,y su Om 3 %condizioni di dirichlet U(x,y)=x.^2-y.^2 su dOm 4 %Sol esatta: U(x,y)=x.^2-y.^2; 5 %Il problema `e affrontato utilizzando pdetool dalla command line e 6 % considerando un dominio personalizzato , modificabile secondo le esigenze 7 %attraverso la funzione "Geometry.m". 8 function u = Pde_geometry 9 10 11 %{ Mesh generation} 12 global nl 13 nl=4; %Numero dei segmenti in cui divido il bordo del mio dominio 14 15 if nl <=1 16 error(’nl deve essere un numero intero positivio superiore a 2’) 17 end 18 [p,e,t]= initmesh(’Geometry ’); 19 %[p,e,t]= initmesh(’Geometry ’,’Hmax ’,1,’Hgrad ’ ,1.1 ,... 20 % ’Jiggle ’,’mean ’,’JiggleIter ’,5); %Opzioni di jiggle 21 %[p,e,t]= refinemesh(’Geometry ’,p,e,t,’regular ’); 1
  • 3. 22 %Rifinisce la mesh , possiamo fare un ciclo per rifinire pi`u volte la mesh 23 pdegplot(’Geometry ’); axis equal; 24 figure (2) 25 pdemesh(p,e,t), axis equal 26 27 %{ Condizioni a bordo} 28 29 %Andr`o a imporre le condizioni a bordo di tipo dirichlet U(x,y)=x.^2-y.^2 30 %generando la matrice ’C’ delle condizioni a bordo 31 %compatibile con il comando assempde 32 c=[1 1 1 1 1 9 48 48 49 120 46 94 50 45 121 46 94 50] ’; 33 %Linguaggio ascii negli ultimi elementi 34 n=numel(c); 35 C=zeros(n,nl); 36 37 for i=1:nl 38 C(:,i)=c; 39 end 40 41 %{ Solving} 42 u=assempde(C,p,e,t,1,0,0); 43 44 45 %{ Plotting} 46 figure (3) 47 pdeplot(p,e,t,’xydata ’,u,’zdata ’,u,’mesh ’,’on ’) 48 49 50 end Il problema affrontato nei programmi esemplificativi Pde geometry.m e Geome- try.m `e quello relativo alla risoluzione dell’equazione di Laplace con condizioni di tipo Dirichlet; Pde Tool affronta la risoluzione di tale problema con il metodo FEM. − U = 0 x, y ∈ Ω (1) U(x, y) = x2 − y2 x, y ∈ δΩ (2) U(x, y) = x2 − y2 (3) L’equzione 1 `e l’equaizone di Laplace, nella 2 sono scritte le condizioni a con- trono di tipo Dirichlet e nella 3 la soluzione esatta del problema. Il programma Pde geometry.m `e quello principale, cio`e quello dal quale facciamo partire Pde Tool dalla linea di comando ed in cui inizializziamo la mesh, impostiamo le condizioni a contorno e risolviamo il problema; il programma Geometry.m `e relativo unicamente alla definizione del dominio sul quale risolvere l’equazione, ricordiamo che invece la suddivisione in mesh, per quanto richiamata attraverso la linea di comando, fa sempre capo agli algoritmi utilizzati da Pde Tool. 2
  • 4. Pde geometry.m si suddivide in quattro parti: • Generazione della mesh • Imposizione delle condizioni a bordo • Risoluzione dell’equazione differenziale • Rappresentazione grafica dei risultati ottenuti Nella prima parte inizialmente definisco nl, che rappresenta il numero di segmen- ti in cui suddivido il bordo del mio dominio, quale variabile globale; tale espediente mi servir`a per poter avere una variabile comune sia in Pde geometry.m che in Geo- metry.m e quindi la stessa suddivisione del bordo del mio dominio per entrambi i programmi. Successivamente richiamiamo la funzione initmesh, il cui argomento sar`a proprio il nostro programma Geometry. Tale funzione inizializzer`a una mesh triangolare nel domino definito dalla funzione Geometry; la triangolazione usata `e del tipo Delau- nay e, se non aggiunte specifiche a tale comando, la grandezza della mesh dipender`a unicamente dalla forma imposta in Geometry. L’uscita di initmesh consta di tre matrici p, e e t. La Point matrix p `e formata da due righe che contengono rispettivamente le ascisse e le ordinate dei nodi della mesh. La Edge matrix e `e invece composta da sette righe: la prima e la seconda contengono gli indici dei nodi iniziali e finali della mesh presenti sul bordo del dominio nel verso indotto dalla parametrizzaizone del bordo, la terza e la quarta riga sono composte dai valori parametrizzati dei nodi iniziali e finali della mesh presenti sul bordo del dominio, la quinta riga contiene il numero del segmento del bordo del dominio di riferimento (rispetto al numero nl di nume- ro di segmenti in cui abbiamo suddiviso il nostro dominio), la sesta e settima riga contengono il numero identificativo dei sottodomini rispettivamente alla sinistra e alla destra del segmento del bordo di dominio di riferimento (questa indicazione ri- sulta banale se si lavora con un unico dominio e non pi`u sottodomini). La Triangle matrix t `e formata da quattro righe, le prime tre contengono gli indici assegnati ai tre vertici dei triangoli che formano la mesh, assegnati in verso antiorario, infine la quarta riga contiene il numero identificativo del sottodominio di appartenenza dei vari triangoli. Tali matrici sono necessarie per risolvere l’equazione differenziale attraverso il co- mando assempde di PDE toolbox. 3
  • 5. E’ possibile aggiungere opzioni al comando initmesh per incorporare specifiche ri- guardo alla creazione della mesh, `e inoltre possibile rifinire la mesh attraverso il comando refinemesh; tali informazioni aggiuntive sono a disposizione nell’help di MATLAB. Per l’imposizione delle condizioni a bordo abbiamo bisogno di costruire una ma- trice, nel nostro caso C, in cui ogni colonna si riferir`a ad un segmento specifico del bordo (alla stessa maniera in cui noi assegniamo tramite GUI le condizioni a bordo su ogni frazione di bordo del nostro dominio). In Pde geometry.m la costruzione di tale matrice `e condizionata dal numero di segmenti in cui ho suddiviso il bordo del mio dominio nl (avremo quindi nl colonne) e inoltre, come da problema, ho imposto le stesse condizioni su tutti i bordi. Soffermiamo ora la nostra attenzione sulla costruzione di una colonna tipo di tale matrice, considerando il seguente formalismo per le condizioni a contorno: ˆn · (c u) + qu = g (4) hu = r (5) L’equazione 4 rappresenta una condizione di Neumann generalizzata mentre la 5 quella di Dirichlet. La prima riga contiene la dimensione del sistema di equazioni differenziali che dobbiamo risolvere, la seconda il numero di condizioni Dirichlet, si devono ora inserire dalla terza alla sesta riga il numero di caratteri che compon- gono le espressioni rispettivamente del coefficiente q per la terza e del coefficiente g per la quarta nel caso di condizione di tipo Neumann generalizzata facendo (si fa riferimento all’equazione 4), per la quinta e sesta riga dobbiamo invece inserire rispettivamente il numero di caratteri che compongono le espressioni di h ed r in riferimento alla condizione di tipo Dirichlet, equazione 5 (anche in assenza di condi- zioni di tipo Neumann o Dirichlet devo indicare che il numero di caratteri `e 1 al fine di indicare successivamente che tali coefficienti saranno uguali a zero). Successiva- mente, rispetto anche al numero di caratteri indicati nelle righe precedenti necessari per descrivere i vari coefficienti, si inseriranno i valori ASCII che compongono le espressioni di q,g,h ed r, includendo ovviamente anche tutti gli operatori secondo tale standard. Per quanto riguarda la risoluzione dell’equazione dobbiamo scegliere il solver a seconda del tipo di equazione del problema. Per equazioni di tipo ellittico sono a disposizione i solver assempde e adaptmesh, per 4
  • 6. equazioni di tipo iperbolico c’`e il solver hyperbolic e per equazioni di tipo parabolico il solver parabolic. Nel caso in esame l’equazione da risolvere `e quella di Laplace, un caso particolare di equazione ellittica, `e stato quindi utilizzato il solver assempde. Facendo riferimento al seguente formalismo: − · (c u) + au = f (6) Bisogner`a inserire come argomenti di assempde per primo la matrice delle con- dizioni a bordo(nel nostro caso C), poi le matrici p, e e t, ed infine i coefficienti dell’equazione differenziale da risolvere c,a e f (in riferimento all’equazione 6). La funzione assempde pu`o essere richiamata inoltre con sintassi diverse per ottenere ulteriori informazioni sulla equazione differenziale in esame. La descrizione completa di tutti i possibili modi di usare assempde esula dallo scopo di questa relazione, ma tutte le informazioni sono disponibili sul manuale del Toolbox. Infine, per stampare i risultati della soluzione, mi sono avvalso del comando pde- plot. E’ stato verificato che, utilizzando questi comandi, si otterr`a lo stesso risultato utilizzando PDE Tool tramite GUI. Ovviamente l’utilizzo della command line porta con se innumerevoli vantaggi apren- do un pi`u vasto ventaglio di possibilit`a e offrendo un approccio pi`u rigoroso ai problemi risolvibili mediante PDE Tool. 5
  • 7. −1 −0.5 0 0.5 1 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 Figura 1: Il bordo del dominio. −1 −0.5 0 0.5 1 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 Figura 2: Inizializzazione della mesh sul dominio definito in Geometry.m tramite il comando initimesh. 6
  • 9. Geometry.m 1 %File che descrive la geometria del mio dominio secondo le specifiche 2 %adatte per inizializzare la mesh su tale dominio 3 %da pdetool con il comando"initmesh ". 4 %La variabile global nl , mi permette di suddividere 5 % arbitrariamente il bordo del mio dominio in nl segmenti. 6 %La versione in analisi di questo programma `e valida solo per 7 %bordi parametrizzabili secondo una circonferenza . 8 function [x,y]= Geometry(bs ,s) 9 global nl 10 nbs=nl; %Numero dei segmenti in cui divido il bordo del mio dominio 11 12 if nargin ==0 13 x=nbs; 14 return 15 end 16 17 dl=zeros (4,nbs); 18 h=linspace (0 ,2*pi ,nbs +1); 19 20 for i=1: nbs %Matrice dei "nbs" segmenti 21 dl(1,i)=h(1,i); 22 dl(2,i)=h(1,i+1); 23 end 24 dl(3 ,:)=ones(1,nbs); 25 26 %dl=[0 pi/2 pi 3/2* pi; pi/2 pi 3/2* pi 2*pi; 1 1 1 1; 0 0 0 0]; 27 %Matrice dei "nbs" segmenti 28 29 if nargin ==1 30 x=dl(:,bs); 31 return 32 end 33 34 x=zeros(size(s)); 35 y=zeros(size(s)); 36 [m,n]= size(bs); 37 if m==1 & n==1, 38 bs=bs*ones(size(s)); % expand bs 39 elseif m~= size(s,1) | n~= size(s,2), 40 error(’bs must be scalar or of same size as s’); 41 end 42 43 44 n=100; 45 %Imposto il numero di punti sul mio bordo , 46 %ossia quanto voglio discretizzare il mio bordo 47 t=linspace (0 ,2*pi ,n); 48 %r=2*(1+ cos(t)); %Cardioide 49 r=1; %Cerchio 50 %r=cos(t).^2+ sin(t/2); %" Pera in orizzontale" 51 %r=cos(t).^2-sin(t).^2+1; %" Orbitale" 52 xt=r.*cos(t); 53 yt=r.*sin(t); 8
  • 10. 54 t=pdearcl(t,[xt;yt],s,0 ,2*pi); 55 %r=2*(1+ cos(t)); %Cardioide 56 r=1; %Cerchio 57 %r=cos(t).^2+ sin(t/2); %Pera in orizzontale 58 %r=cos(t).^2-sin(t).^2+1; %Orbitale 59 x(:)=r.*cos(t); 60 y(:)=r.*sin(t); 61 end Questa funzione descrive la geometria del mio dominio secondo le specifiche adat- te per inizializzare la mesh dalla command line di PDE Tool attraverso il comando initmesh. Per costruire tale funzione ho seguito le istruzioni sulla composizione di pdegeom presenti nell’help di MATLAB; per`o la versione qui presentata `e una variazione di tale funzione. Le caratteristiche principali di Geometry.m sono: • La divisione del bordo del domino `e la stessa di Pde geometry.m grazie alla variabile globale nl • La costruzione della matrice dl `e impostata per ’forme circolari’, va modificata se si hanno esigenze diverse riguardo la forma del domino • La geometria del dominio proposta `e quella di un cerchio di raggio r, come commenti sono proposte anche forme pi`u complesse Alla variabile nbs all’inizio del programma va assegnato il numero di segmenti di bordo, bisogna poi costruire la matrice dl ed effettuare in maniera corretta la parametrizzazione del bordo. Ogni colonna di dl si riferisce a un segmento del bordo del dominio (quindi nel nostro caso avremo nl colonne), nella prima riga si mette il valore del parametro t da cui inizia il segmento, nella seconda riga il valore di t che segna la fine del segmento. Nella terza riga si deve mettere il numero della regione che si trova a sinistra del segmento, percorrendolo nel verso indotto dalla parametrizzazione, nella quarta il numero della regione che si trova a destra. In generale la matrice dl deve essere costruita seguendo queste direttive. Per quanto riguarda la parametrizzazione del dominio devo prima impostare il nu- mero di punti n del mio bordo per indicare quanto vogliamo che sia fitta la di- scretizzazione dello stesso. In t si memorizzano i valori dei nodi risultanti dalla suddivisione, nelle due variabili di appoggio a e b si memorizzano i valori delle coor- dinate della curva corrispondenti ai valori dei nodi memorizzati in t. Il comando t=pdearcl(t,[xt;yt],s,0,2*pi) serve ad ottenere una suddivisione dell’intervallo che non `e pi`u uniforme, ma dipende dal parametro s che viene passato alla funzione. 9
  • 11. Anche questo comando `e necessario perch´e tutte le funzioni del Toolbox gestiscano bene Geometry.m, in generale bisogner`a modificare gli ultimi due parametri passati a pdearcl, che sono l’estremo sinistro e quello destro dell’intervallo su cui varia t. Dopodich´e si ricalcolano a e b nei nodi cos`ı ottenuti, e si possono finalmente asse- gnare tali valori ad x e ad y. I ’:’ nei comandi x(:)=a y(:)=b, servono a mantenere per x ed y la stessa struttura delle variabili a e b, questo `e un accorgimento essenziale perch´e il tutto funzioni bene in quanto l’uscita [x,y] della funzione deve essere correttamente interpretata da initmesh, in virt`u di ci`o il resto del codice che non `e stato commentato in questa sede deve essere scritto nello stesso modo e deve essere necessariamente presente. −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 −1.5 −1 −0.5 0 0.5 1 1.5 Figura 4: Inizializzazione di una mesh tramite il comando initimesh su un dominio non banale di forma ’orbitale’ definito in Geometry.m. 10
  • 12. meshing.m e Pde meshing.m meshing.m • Inizializzazione • Generazione della matrice t • Generazione della matrice p • Generazione della matrice e 1 function [p,e,t] = meshing(n,Lx ,Ly ,d) 2 3 %{ Inizializzazione } 4 5 %n=4; %n=parametro di infittimento e dal quale dipende la 6 %dimensione della matrice N (nxn) e il numero di nodi (n^2) 7 %Lx=1; Ly =1; d=1; %dimensioni del dominio e posizione nello 8 %spazio rispetto all ’origine 9 if any ([n-1 Lx Ly] <=0) 10 error(’Controllare i parametri del problema ’) 11 end 12 13 N=numgrid(’S’,n+2); 14 N=N(2:end -1 ,2:end -1); 15 %Devo farlo perch`e la matrice numgrid si genera con 0 sui bordi 16 h = Lx/(n-1); 17 k = Ly/(n-1); 18 19 %{ Generazione della matrice t} 20 21 t=ones (4 ,2*(n-1) ^2); 22 %Generazione dei triangoli up 23 count = 1; 24 for i = 1:n-1 25 for j = 1:n-1 26 t(1, count) = N(i,j); 27 t(2, count) = N(i+1,j); 28 t(3, count) = N(i,j+1); 29 count = count +1; 30 end 31 end 32 %Generazione dei triangoli down 33 for i = 2:n 34 for j = 1:n-1 35 t(1, count) = N(i,j); 36 t(2, count) = N(i,j+1); 37 t(3, count) = N(i-1,j+1); 38 count = count +1; 39 end 40 end 41 42 %{ Generazione della matrice p} 43 11
  • 13. 44 p=zeros (2,n^2); 45 for i =1:n 46 for j=1:n 47 p(1,N(i,j)) = h*(j -1)+d; 48 %Il numero di colonne di P corrisponde al valore del nodo in N, 49 %perch`e `e ordinato in ordine crescente columnwise 50 p(2,N(i,j)) = Ly - k*(i -1)+d; 51 %Ly - k perch´e `e decrescente column wise (vedi numgrid) 52 end 53 end 54 55 e=zeros (7 ,4*(n -1)); 56 57 count =1; 58 for i =1:n-1 59 e(1, count) = N(i ,1); 60 e(2, count) = N(i+1 ,1); 61 e(5, count) = count; 62 count = count +1; 63 end 64 65 for j =1:n-1 66 e(1, count) = N(n,j); 67 e(2, count) = N(n,j+1); 68 e(5, count) = count; 69 count = count +1; 70 end 71 72 for i =n: -1:2 %dal basso verso l’alto per preservare l’ordine 73 e(1, count) = N(i,n); 74 e(2, count) = N(i-1,n); 75 e(5, count) = count; 76 count = count +1; 77 end 78 79 for j =n: -1:2 80 e(1, count) = N(1,j); 81 e(2, count) = N(1,j-1); 82 e(5, count) = count; 83 count = count +1; 84 end 85 s=1/(n -1); % parametrizzazione 86 87 r=zeros (1,n -1); 88 for i=0:n-2 89 r(1,i+1)=i*s; 90 end 91 e(3 ,:) =[r r r r]; 92 93 v=zeros (1,n -1); 94 for i=1:n-1 95 v(1,i)=i*s; 96 end 97 e(4 ,:) =[v v v v]; 98 99 l1=ones(1,n-1); l2 =2.* ones(1,n -1); l3 =3.* ones(1,n-1); l4 =4.* ones(1,n-1); 12
  • 14. 100 e(5 ,:)=[l1 l2 l3 l4]; %Lati del dominio rettangolare (1,2,3,4) 101 e(6 ,:) = 1; 102 %Quanti domini e sottodomini ho? (1) ,quindi 6a riga 1, 103 %7a riga 0( domino di dx e sx) 104 105 pdemesh(p,e,t) 106 end Il programma meshing.m `e stato scritto in maniera tale da generare una suddi- visione in mesh di un dominio rettangolare di dimensioni Lx ∗ Ly , su di una griglia avente n nodi per lato e con la possibilit`a di traslare dall’origine tale dominio nello spazio secondo un fattore d (opzione utile ad esempio per studiare il comportamento di soluzioni di equazioni differenziali intorno o lontano da punti di criticit`a). Le variabili in entrata sono quindi n,Lx,Ly e d ed in uscita abbiamo le tre matrici p, e e t descritte nel paragrafo iniziale, l’uscita di questo programma `e quindi perfettamente compatibile con i comandi di PDE Tool ma la suddivisione in mesh `e affidata al programma stesso e non al comando initmesh. Questo programma si suddivide in: • Inizializzazione del dominio • Generazione della matrice t • Generazione della matrice p • Generazione della matrice e Per inizializzare il dominio dobbiamo definire o dare come variabili n,Lx,Ly e d. Successivamente generer`o la matrice N di dimensioni [nxn], questa sar`a costruita attraverso il comando numgrid(’S’,n+2) il quale dar`a come uscita una matrice qua- drata (la specifica ’S’ sta per square) di dimensione[n+2xn+2] con prima e ultima riga e prima e ultima colonna formate da zeri e gli n2 elementi disposti columnwise (in ordine crescente dal primo all’ultimo elemento della colonna), dalla matrice cos`ı siffatta prenderemo il minore escludendo gli zeri, quindi prima ed ultima colonna e riga, cos`ı da ottenere una matrice con degli elementi numerati in maniera simmetri- ca, ottima base di partenza per la generazione di una mesh triangolare. Definiamo anche i valori h ed k quali distanze che intercorrono tra un nodo e l’altro in direzione x e y. La generazione della matrice t avviene costruendo prima i triangoli con l’ipote- nusa rivolta verso l’alto (up) e successivamente costruendo i triangoli con l’ipotenusa rivolta verso il basso (down), viene tenuto conto della numerazione dei nodi in senso 13
  • 15. antiorario e della scrittura della quarta riga contenente il numero identificativo del sottodominio di appartenenza dei vari triangoli. La generazione della matrice p, che ricordiamo essere formata da due righe che contengono rispettivamente le ascisse e le ordinate dei nodi, sfrutta il fatto che il numero di colonne di questa matrice `e corrisponde al valore del nodo dell’elemento N(i,j) proprio in virt`u della particolare simmetria di N. La generazione della matrice e avviene per le prime due righe seguendo un pre- ciso verso di parametrizzazione, cio`e, partendo dal primo elemento della matrice, in senso antiorario. Successivamente le altre righe vengono scritte impostando il coefficiente di parame- trizzazione s = 1/(n − 1). A fine programma viene anche visualizzata la mesh creata. 1 1.2 1.4 1.6 1.8 2 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 Figura 5: Mesh ottenuta attraverso il programma meshing.m. 14
  • 16. Pde meshing.m La funzione meshing.m viene richiamata in Pde meshing.m per produrre le matrici p, e e t secondo le variabili n, Lx, Ly e d definite all’interno di Pde meshing.m. Il continuo di tale programma `e analogo a Pde geometry.m ma qui non vi `e necessit`a di richiamare initmesh in quanto abbiamo noi stessi effettuato la suddivisione del dominio in mesh. • Dominio • Mesh generation • Condizioni a bordo • Solving • Plotting 1 %Fem2D con un problema dirichlet per l’equazione di Laplace. 2 %-DU(x,y)=0; x,y su Om 3 % condizioni di dirichlet U(x,y)=x.^2-y.^2 su dOm 4 % Sol esatta: U(x,y)=x.^2-y.^2; 5 %Il problema `e affrontato utilizzando pdetool dalla command line e 6 %utilizzando un programma di generazione della mesh creato ad hoc "Meshing ". 7 function Pde_meshing 8 9 %{ Dominio} 10 11 Lx=1; Ly =1; d=1; 12 13 %{ Mesh generation} 14 15 n=10; 16 [p,e,t] = meshing(n,Lx ,Ly ,d); 17 18 %{ Condizioni a bordo} 19 20 %Andr`o a imporre le condizioni a bordo di tipo dirichlet U(x,y)=x.^2-y.^2 21 %generando la matrice delle condizioni a bordo che legge pdetool "C" 22 c=[1 1 1 1 1 9 48 48 49 120 46 94 50 45 121 46 94 50]; 23 %Linguaggio ascii negli ultimi elementi 24 C=[c;c;c;c]; 25 C=C’; 26 27 %{ Solving} 28 29 u=assempde(C,p,e,t,1,0,0); 30 31 %{ Plotting} 32 33 %figure (2) pdesurf(p,t,u) 34 35 figure (2) 36 pdeplot(p,e,t,’xydata ’,u,’zdata ’,u,’mesh ’,’on ’) 37 38 end 15
  • 18. Bibliografia [1] B. D’Acunto (2012), Computational Partial Differential Equations for Engineering Science, Nova Science Publishers, New York. [2] L. Cerone (2006), Matlab PDE Toolbox - Risoluzione di equazioni alle derivate parziali utilizzando Matlab, Tesi di laurea in Matematica, Universit`a di Roma La Sapienza. 17