1 / 88
Outline
1
Lindice di Kroneker
Un esempio semplice
2 / 88
T (q, q)
: energia cinetica.
L(q, q)
= T (q, q)
V(q): Lagrangiana.
d L(q, q)
L(q, q)
(q, t) T
+
= Qex (q)
dt
q
q
q
(*)
3 / 88
T (q, q)
=
1 T
q M(q) q
2
M(q) q +
!T
= Qex +
M(q)
q = Q(q, q)
(q, t) = 0
che e` composto parte da equazione differenziale e parte da vincolo
algebrico (cioe` e un DAE=Differential Algebraic Equation)
4 / 88
(q, t) = 0
(DAE.1)
(DAE.2)
q(t
+ t ) = q(t)
+ q(t)t
+ O t 2
1
2
q(t + t ) = q(t) + q(t)t
+ q(t)t
+ O t 3
2
trascurando i termini O t 2 e O t 3 posso costruire il seguente
schema numerico
qk+1 = qk + q k t
1
qk+1 = qk + qk t + q k t 2
2
per poterlo definire devo in qualche modo calcolare q k .
Approssimazione Numerica delle DAE
5 / 88
h
i
q = M(q)1 Q(q, q)
q (q, t)T
6 / 88
k (q(t), t) k (q(t), t)
d
k (q(t), t) =
+
q(t)
dt
t
q
e derivando una seconda volta otteniamo
d2
2 k (q(t), t)
2 k (q(t), t)
q(t)
k (q(t), t) =
+2
2
2
t q
dt
t
+ q(t)
T
2 k (q(t), t)
k (q(t), t)
q(t)
+
q(t)
q
q2
0 = tt + 2tq q + qq q q + q q
(DAE.2)
dove ( qq q q)
k = qT (k ) qq q.
Approssimazione Numerica delle DAE
7 / 88
q (q, t) q = c(q, q,
t)
(DAE.1)
(DAE.2)
dove
ck (q, q,
t) = (k )tt 2(k )tq q qT (k ) qq q
Questo puo` essere riscritto in forma matriciale come segue
q (q, t)
0
c(q, q,
t)
Se la matrice (n + m) (n + m) e` invertibile allora possiamo determinare
q e e chiudere lalgoritmo.
Approssimazione Numerica delle DAE
8 / 88
Algoritmo di integrazione
Mettendo tutto assieme otteniamo:
Dato iniziale t0 = 0, q0 = q(0), q 0 = q(0)
.
Per k = 0, 1, . . .
Risolvo il sistema lineare per ricavare q k e k
M(qk )
q (qk , tk )T q k Q(qk , qk )
q (qk , tk )
0
k
c(qk , qk , tk )
Aggiorno le approssimazioni qk+1 e q k+1
qk+1 = qk + q k t
qk+1 = qk + qk t +
1
q k t 2
2
9 / 88
(1/2)
(q,
t) = (q, t) + a0 + a1 t
e la sostituisco al posto di (q, t) ottengo lo stesso sistema
(DAE.1)(DAE.2).
I vettori costanti a0 e a1 sono determinati dalle condizioni iniziali
(q(0),
0) = (q(0), 0) + a0 + a1 0 = 0
d
d
(q(0), 0) =
(q(0), 0) + a1 = 0
dt
dt
Approssimazione Numerica delle DAE
10 / 88
(2/2)
11 / 88
(1/6)
Energia cinetica:
1
T (t) = m(x0 (t)2 + y0 (t)2 )
2
Energia potenziale
V(t) = mgy(t)
Vincolo
(x, y) = x2 + y2 1
12 / 88
(2/6)
Sistema di equazioni
0
0
2x(t) x00 (t)
mg
m
2y(t) y00 (t) =
0
2
0
2
2x (t) 2y (t)
(t)
2x(t) 2y(t)
0
13 / 88
(3/6)
0
0 2xk xk00
00
mg
y
0
m
2y
=
k
k
2(xk0 )2 2(y0k )2
2xk 2yk 0 k
e risolvendo il sistema lineare
xk00 =
xk (gyk sk )
rk
y00
k =
gxk2 + yk sk
rk
k =
m (gyk sk )
2rk
14 / 88
(4/6)
xk (gyk sk )
,
rk
y00k =
gxk2 + yk sk
,
rk
rk = xk2 + y2k
sk = (xk0 )2 + (y0k )2
15 / 88
(5/6)
h = 0,01
h = 0,05
16 / 88
(6/6)
h = 0,05
17 / 88
(1/5)
(q,
t) = (q, t) + a0 + a1 t
non cambia nulla nella parte numerica. Consideriamo quindi la seguente
equazione differenziale
!
!
q
q
z0 (0) + z(0)
2
2
sinh t 1 et
z(t) = z(0) cosh t 1 +
p
2 1
18 / 88
(2/5)
z(t) = z(0) + t z0 (0)(1 + ) et
e se 2 = 1 2 abbiamo
"
#
sin(t)
z(t) = z0 (0) + z(0)
+ z(0) cos(t) et
19 / 88
(3/5)
1
0, 75
0, 75
0, 5
0, 5
0, 25
0, 25
= 0.5,
= 0.5,
= 0.5,
=1
=2
=5
0
0
20 / 88
(4/5)
=2
=2
=2
0, 75
0, 75
0, 5
0, 5
0, 25
0, 25
= 0.1,
= 0.5,
= 0.9,
=1
=1
=1
0
0
21 / 88
(5/5)
d2
(q(t), t) = 0
dt2
con la seguente
d2
d
(q(t), t) + 2 (q(t), t) + 2 (q(t), t) = 0
dt
dt2
i parametri e dovranno essere scelti in modo da rendere il
decadimento della soluzione il piu` rapido possibile compatibilmente
la stabilita` numerica del metodo.
In generale va scelto in [0, 1] piccolo ma non troppo (ad esempio
0.1) in modo da rendere labbattimento dellerrore il piu` rapido
possibile.
22 / 88
(1/5)
x0 (t) = u(t)
y0 (t) = v(t)
mu0 (t) + 2x(t)(t) = 0
mv0 (t) + 2y(t)(t) = mg
x(t)2 + y(t)2 = 1
Derivando due volte il vincolo:
2x(t)u(t) + 2y(t)v(t) = 0
2x(t)u0 (t) + 2y(t)v0 (t) + 2u(t)2 + 2v(t)2 = 0
Equazione del vincolo stabilizzata (omettiamo dipendenza da t)
23 / 88
(2/5)
k =
xk+1 = xk + t uk
yk+1 = yk + t vk
uk+1 = uk 2t m1 xk k
vk+1 = vk 2t m1 yk k t g
Approssimazione Numerica delle DAE
24 / 88
(3/5)
= 1, = 1
T =5
= 1, = 0,5
25 / 88
(4/5)
=1
= 1,
T = 25
= 0,5
26 / 88
(5/5)
violation
violation
x0 = 1
0,2
T = 30
= 1, = 0,5
0
0,2
0,2
10
15
= 1,
20
25
30
25
30
=1
0
0,2
10
15
20
27 / 88
Lindice di Kroneker
q = p
M(q) p + q (q, t)T = Q(q, p)
(q, t) = 0
che possiamo riscrivere come (DAE semi esplicita di indice 3)
x = g(x, y, t)
y = f (x, y, , t)
0 = h(x, t)
dove g(x, y, t) = y, h(x, t) = (x, t) e
h
i
f (x, y, , t) = M(x)1 Q(x, y) q (x, t)T
28 / 88
Lindice di Kroneker
DAE Lineari
29 / 88
Lindice di Kroneker
Se ad esempio
!
1 0
F=
,
0 0
0 1
G=
0 0
x0 (t) = y(t)
che come soluzione
Z
x(t) =
t
0
g(z) dz,
y(t) = g(t)
30 / 88
Lindice di Kroneker
Definizione
La coppia di matrici ( A, B) sono un Pencil Regolare se esiste un
tale che
det (A + B) , 0
Teorema (Kroneker)
Se (A, B) sono un Pencil Regolare allora esistono due matrici U e V non
U AV =
I 0
0 N
!
UBV =
!
C 0
0 I
31 / 88
Lindice di Kroneker
J 1
N =
..
J d1
0
J 1
C =
..
J k =
1
..
.
0
J d2
0 1
. . 1
J k =
Osservazione
Per come e` definita si ha sempre p 2.
Approssimazione Numerica delle DAE
32 / 88
Lindice di Kroneker
!
!
!
!
!
C 0 u(t)
a(t)
I 0 u0 (t)
+
=
0 N v0 (t)
0 I v(t)
b(t)
o meglio
33 / 88
Lindice di Kroneker
u(t) = exp Ct u(0) +
Z
0
exp C(s t) a(s)ds
dove
exp A = I + A +
1 2 1 3
1
A + A + + Ak +
2
6
k!
34 / 88
Lindice di Kroneker
d
(b(t) Nv0 (t)) = b(t) Nb0 (t) + N2 v00 (t)
dt
..
.
=
n1
X
k=0
35 / 88
Lindice di Kroneker
v(t) =
q1
X
(1)k Nk b(k) (t)
k=0
v (t) = f (t) =
q
X
k=1
36 / 88
Lindice di Kroneker
Soluzione generale
Ricordando che x(t) = V(u(t); v(t)) otteniamo e` ancora una DAE ma la
matrice N e` nilpotente, possiamo allora considerare le sue derivate
Rt
exp Ct u(0) + 0 exp C(s t) a(s)ds
d1
x(t) = V
k k (k)
(1)
N
b
(t)
k=0
v(0) =
d1
X
(1)k Nk b(k) (0)
k=0
questo implica a sua volta che non posso fissare x(0) liberamente.
Approssimazione Numerica delle DAE
37 / 88
0=
d
f
f
f 0
f (x0 (t), x(t), t) = 0 x00 (t) +
x (t) +
dt
x
x
t
0=
d2
f (x0 (t), x(t), t)
dt2
..
.
0=
dq
f (x0 (t), x(t), t)
dtq
38 / 88
x(t) = sin(t)
x0 (t) + y(t) = 0
una prima derivata
x0 (t) = cos(t)
x00 (t) + y0 (t) = 0
permette di ricavare y0 (t) = x00 (t). Una seconda derivata
39 / 88
d
f (x0 (t), x(t), t) = 0
dt
d2
f (x0 (t), x(t), t) = 0
dt2
..
.
dq
f (x0 (t), x(t), t) = 0
dtq
e` il piu` piccolo sistema che permette di ricavare x0 (t) in funzione di x(t) e
t.
Approssimazione Numerica delle DAE
40 / 88
f (x0 , x, t) = 0
dove
f (x0 , x, t)
= A(x0 , x, t)
x0
e` matrice singolare. Conviene considerare pero` delle classi di DAE in
una forma meno generale ma utile nelle applicazioni. Ad esempio
41 / 88
Una DAE di indice 0 per definizione e` una ODE, una DAE di indice 1 in
forma semi esplicita e` la seguente
x0 = f (x, y, t)
n,
0 = g(x, y, t)
m,
dove x(t)
y(t)
f C1(
Inoltre g deve essere regolare cioe`
g y (x, y, t) =
g(x, y, t)
y
42 / 88
(x0 , y0 ) A;
f (x0 , y0 ) = 0;
f (x0 ,y0 )
non singolare.
y
Rn e V Rm e una funzione : U 7 V
y0 = (x0 );
f (x, y) = 0 e solo se y = (x) (per x U e y V );
C 1 (U, V) e vale
f (x, (x))
(x)
=
x
y
Approssimazione Numerica delle DAE
!1
f (x, (x))
x
43 / 88
(1/3)
x0 = f (x, y, t)
0 = g(x, t)
dove x(t)
Inoltre
x
y
44 / 88
(2/3)
g(x(t), t)
dg(x(t), t) g(x(t), t) 0
=
x (t) +
=0
dt
x
t
e da questo otteniamo il nuovo vincolo (nascosto)
h(x, y, t) = 0
dove
h(x, y, t) =
g(x, t)
g(x, t)
f (x, y, t) +
x
t
x0 = f (x, y, t)
0 = h(x, y, t)
Approssimazione Numerica delle DAE
45 / 88
(3/3)
x0 = f (x, y, t)
0 = h(x, y, t)
per verificarlo deve essere
y
x
y
non singolare
46 / 88
(1/3)
x0 = f (x, y, z, t)
y0 = g(x, y, t)
0 = h(y, t)
dove
Rn
f C 1 (Rn+m+p+1 , Rn )
x(t)
Rm z(t) R p
g C 1 (Rn+m+1 , Rm ) h C 1 (Rm+1 , Rn )
y(t)
47 / 88
(2/3)
h(y(t), t)
dh(y(t), t) h(y(t), t) 0
=
y (t) +
=0
dt
y
t
e da questo otteniamo il nuovo vincolo (nascosto)
a(x, y, t) = 0
dove
a(x, y, t) =
h(y, t)
h(y, t)
g(x, y, t) +
y
t
x0 = f (x, y, z, t)
y0 = g(x, y, t)
0 = a(x, y, t)
Approssimazione Numerica delle DAE
48 / 88
La DAE
(3/3)
!
!
f (x, y, z, t)
x0
=
y0
g(x, y, t)
0 = a(x, y, t)
e` di indice 2 se
x
z
y
z
e` non singolare, cioe`
y
x
z
e` non singolare.
Approssimazione Numerica delle DAE
49 / 88
La DAE
x01 = f1 (x1 , x2 , . . . , x , t)
x02 = f2 (x1 , x2 , . . . , x1 , t)
..
.
x0k = fk (xk1 , xk , . . . , x1 , t)
k = 3, . . . , 1
..
.
0 = f (x1 , t)
dove se
f1
f
f2
f1
x1
x2
x1
x
e` non singolare allora la DAE ha indice .
Approssimazione Numerica delle DAE
50 / 88
Un esempio semplice
Un esempio semplice
x(t) = sin(t)
x0 (t) + y(t) = 0
Che ha come unica soluzione
x(t) = sin(t)
y(t) = cos(t)
51 / 88
Un esempio semplice
!
!
!
!
!
0 0 x0 (t)
1 0 x(t)
sin(t)
+
=
1 0 y0 (t)
0 1 y(t)
0
Usando
0 1
U=V=
1 0
!
ed
0 1
N=
0 0
!
!
!
y0 (t)
y(t)
0
N 0
+I
=
x (t)
x(t)
sin(t)
poiche N2 = 0 abbiamo che una DAE di indice 2. Notiamo inoltre che
non bisogna specificare il dato iniziale perche nella forma normale il
blocco C e` assente.
Approssimazione Numerica delle DAE
52 / 88
Un esempio semplice
x(t) = sin(t)
x0 (t) + y(t) = 0
I valori x0 e y0 sono valori iniziali consistenti se soddisfano il vincolo
x(t) = sin(t)
ed il vincolo nascosto ottenuto derivando il vincolo precedente
x0 = sin(0)
y0 = cos(0)
Approssimazione Numerica delle DAE
53 / 88
Un esempio semplice
xk+1 = xk + h f (xk , tk )
Applicato alla DAE risulta in (tk = kh)
0 = h(sin(tk ) xk )
xk+1 = xk hyk
Non e` un metodo applicabile, non si ottiene yk+1 .
54 / 88
Un esempio semplice
h(sin(tk+1 ) xk+1 ) = 0
xk+1 + hyk+1 = xk
Da cui segue
xk+1 = sin(tk+1 )
yk+1 = (xk sin(tk+1 )/h
= (sin(tk ) sin(tk+1 ))/h = cos(tk+1 ) + O(h)
55 / 88
Un esempio semplice
Metodo di Crank-Nicolson
f (xk+1 , tk+1 ) + f (xk , tk )
xk+1 xk
=
h
2
Applicato alla DAE risulta in
xk = sin(tk ) + (1)k x0
Approssimazione Numerica delle DAE
56 / 88
Un esempio semplice
h = 0.25
h=1
57 / 88
Un esempio semplice
h = 0.25
h=1
58 / 88
Un esempio semplice
Metodo di CrankNicolson x0 = 0, y0 = 1
h = 0.25
h=1
59 / 88
Un esempio semplice
x
y
h=1
h = 0.25
60 / 88
Un esempio semplice
Un esempio semplice
Stabilizzazione alla Baumgarten
Ri-consideriamo la DAE
x(t) = sin(t)
x0 (t) + y(t) = 0
e stabilizziamo il vincolo x(t) sin(t) = 0 alla Baumgarten
Osservazione
Lequazione z0 (t) + z(t) = 0 ha come soluzione
t
z(t) = z(0) exp
e limt z(t) = 0
Approssimazione Numerica delle DAE
61 / 88
Un esempio semplice
Un esempio semplice
Stabilizzazione alla Baumgarten
xk+1 =
2 h
xk sin(tk ) + sin(tk+1 )
2 + h
yk+1 =
62 / 88
Un esempio semplice
(1/2)
= 10, h = 0.25
= 10, h = 1
63 / 88
Un esempio semplice
(2/2)
= 2, h = 0.25
= 2, h = 1
64 / 88
Un esempio semplice
Commenti
65 / 88
Il pendolo semplice
Le equazioni
L(x, y, x, y ) =
m 2
( x + y 2 ) mgy
2
(x, y) = x2 + y2 r2
e le equazioni del moto diventano
m x + 2x = 0
my + 2y + mg = 0
x2 + y2 = r2
66 / 88
Calcolo dellindice
(1/2)
x = x
y = y g
x 2 + y2 = r 2
ponendo u = x e v = y trasformiamo il sistema del secondo ordine in un
sistema del primo ordine
u = x
v = y g
x = u
y = v
x 2 + y2 = r 2
Approssimazione Numerica delle DAE
67 / 88
Calcolo dellindice
(2/2)
2x x + 2yy = 0
xu + yv = 0
xu + yv + xu + y v = 0
(x2 + y2 ) gy + (u2 + v2 ) = 0
= r2 gy + (u2 + v2 ) = 0
r2 gv + 2(uu + vv) = 0
r2 3gv = 0
la DAE ha indice 3
Approssimazione Numerica delle DAE
68 / 88
u = x
v = y g
x = u
y = v
x 2 + y2 = r 2
Vincoli nascosti
xu + yv = 0
r2 gy + (u2 + v2 ) = 0
Equazione differenziale associata al vincolo
r2 3gv = 0
Approssimazione Numerica delle DAE
69 / 88
alle differenze
u = x
uk+1 uk
= k+1 xk+1
h
v = y g
vk+1 vk
= k+1 yk+1 g
h
x = u
y = v
= 3gv/r2
Integrando ad esempio con Eulero
Implicito otteniamo le seguenti equazioni
xk+1 xk
= uk+1
h
yk+1 yk
= vk+1
h
k+1 k
3gvk+1
=
h
r2
70 / 88
ck+1 = 1 h2 k+1
xk+1 = (xk + huk )/ck+1
yk+1 = (yk + hvk gh2 )/ck+1
uk+1 = (uk + hk+1 xk )/ck+1
vk+1 = (vk + hk+1 yk gh)/ck+1
e sostituendo nella equazione del moltiplicatore e ponendo = k+1 k
otteniamo una equazione quadratica in da risolvere:
71 / 88
u = x
v = y g
x = u
y = v
x2 + y2 = r2
Integrando ad esempio con Eulero
Implicito otteniamo le seguenti equazioni
alle differenze
uk+1 uk
= k+1 xk+1
h
vk+1 vk
= k+1 yk+1 g
h
xk+1 xk
= uk+1
h
yk+1 yk
= vk+1
h
2
xk+1
+ y2k+1 = r2
72 / 88
ck+1 = 1 h2 k+1
xk+1 = (xk + huk )/ck+1
yk+1 = (yk + hvk gh2 )/ck+1
uk+1 = (uk + hk+1 xk )/ck+1
vk+1 = (vk + hk+1 yk gh)/ck+1
e sostituendo nella equazione del vincolo una equazione quadratica in
k+1 da risolvere:
73 / 88
2 4
r r2 + A
k+1 =
h2 r
A = g2 h4 + 2h(xk uk + yk vk ) 2gh2 (yk hvk ) + h2 (u2k + v2k )
Approssimazione Numerica delle DAE
74 / 88
A/r2
A
=
p
h2 (r2 + r r2 + A) h2 (1 + 1 + A/r2 )
75 / 88
x
y
76 / 88
1, 5
0, 5
1
0, 5
0
0, 5
Approssimazione Numerica delle DAE
10 15 20
t
0
0, 5
5 10 15 20
t
1, 5
77 / 88
Un esempio complicato
Stabilizzazione alla Baumgarten
d2 V(x, y)
dV(x, y)
d3 V(x, y)
+a
+b
+ cV(x, y) = 0
3
dt
dt
dt2
dove V(x, y) = x2 + y2 r2 . Dove a, b, c sono scelti in modo che
78 / 88
c = 1000.
y
y
5
0
x2 + y 2 r 2
xu + yv
5
0
10
r 2 gy + u2 + v 2
10
79 / 88
Coordinate Partitioning
Esempio con le equazioni del pendolo: Passo 1 scelta delle coordinate indipendenti
u = x
v = y g
x = u
y = v
x 2 + y2 = r 2
Possiamo usare il vincolo per determinare ad esempio y in funzione di x
come segue
p
y(x) = r2 x2
80 / 88
Coordinate Partitioning
u = x
v = y(x) g
x = u
y = v
p
y(x) = r2 x2
Derivando lequazione del vincolo posso derivare una equazione per y (x)
x x + yy = 0
y = x x/y
e quindi ottenere
y = v(x, u) =
Approssimazione Numerica delle DAE
v = xu/y
xu
y(x)
81 / 88
Coordinate Partitioning
u = x
v = y(x) g
x = u
xu
y(x)
p
y(x) = r2 x2
v(x, u) =
82 / 88
Coordinate Partitioning
xu + yv + xu + y v = 0
(x2 + y2 ) gy + (u2 + v2 ) = 0
da qui posso ricavare come funzione di x ed u
(x, u) =
83 / 88
Coordinate Partitioning
Sostituisco = (x, u)
u = (x, u)x
x = u
gy(x) (u2 + v(x, u)2 )
r2
xu
v(x, u) =
y(x)
p
y(x) = r2 x2
(x, u) =
84 / 88
Collatz e RK4
85 / 88
Collatz e RK4
O il classico Runge-Kutta del quarto ordine
K1 = huk
L1 = h(xk , uk )
K2 = h(uk + L1 /2)
L2 = h(xk + K1 /2, uk + L1 /2)(xk + K1 /2)
K3 = h(uk + L2 /2)
L3 = h(xk + K2 /2, uk + L2 /2)(xk + K2 /2)
K4 = h(uk + L3 )
L4 = h(xk + K3 , uk + L3 ) (xk + K3 )
xk+1 = xk + (K1 + 2K2 + 2K3 + K4 )/6
uk+1 = uk + (L1 + 2L2 + 2L3 + L4 )/6
Approssimazione Numerica delle DAE
86 / 88
y
y
5
0
x2 + y 2 r 2
xu + yv
5
0
12
16
r 2 gy + u2 + v 2
12
16
87 / 88
y
y
5
0
x2 + y 2 r 2
xu + yv
5
0
12
16
r 2 gy + u2 + v 2
12
16
88 / 88