Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Elementi di Informatica eElementi di Informatica eApplicazioni Numeriche TApplicazioni Numeriche T
Sistemi non Lineari(Approfondimento)
Sistemi non Lineari (Approfondimento)Sistemi non Lineari (Approfondimento)
Consideriamo il sistema non lineare:
2 =x2 ey
x + y + = 012
13 z2
z = sin(πx) + cos(πy)Come possiamo risolverlo?
Sistemi non Lineari (Approfondimento)Sistemi non Lineari (Approfondimento)
Consideriamo il sistema non lineare:
2 =x2 ey
x + y + = 012
13 z2
z = sin(πx) + cos(πy)■ Prima portiamo tutte le equazioni nella forma (x, y, z) = 0fi
(x, y, z)f1
(x, y, z)f2(x, y, z)f3
= 2 − = 0x2 ey
= x + y + = 012
13 z2
= z − sin(πx) − cos(πy) = 0
Sistemi non Lineari (Approfondimento)Sistemi non Lineari (Approfondimento)
Consideriamo il sistema non lineare:
2 =x2 ey
x + y + = 012
13 z2
z = sin(πx) + cos(πy)■ Poi vediamo il sistema come una equazione vettoriale:
F((x, y, z)) = = (0, 0, 0)⎛
⎝⎜⎜
(x, y, z)f1(x, y, z)f2(x, y, z)f3
⎞
⎠⎟⎟
■ E la risolviamo con il metodo di Newton!
Sistemi non Lineari (Approfondimento)Sistemi non Lineari (Approfondimento)
Una possibile soluzione (disponibile sul sito del corso)
clear all
function y = f(x) y(1) = 2.*x(1).^2 - e.^x(2); y(2) = 1./2 .* x(1) + 1./3 .* x(2) + x(3).^2; y(3) = sin(pi .* x(1)) + cos(pi .* x(2)) - x(3);end
x0 = [0, 0, 0][sol, fval, status] = fsolve(@f, x0)
■ Per dettagli si veda la registrazione della lezione
Attenzione alla convergenza!Attenzione alla convergenza!
Consideriamo una leggera variziona del sistema:
2 =x2 ey
x + y + z = 0 era: 12
13 z2
z = sin(πx) + cos(πy)■ Con la variazione indicata, il sistema è impossibile
In questo caso il metodo di Newton non converge
■ In senso stretto, non si annulla mai...■ ...Però le implementazioni al PC usano delle tolleranze
f ( )x(k)
Attenzione alla convergenza!Attenzione alla convergenza!
Per via delle tolleranze, possono succedere due cose:
■ I valori di e sono vicini, anche se ■ I valori di e sono vicini, anche se
x(k+1) x(k) f ( ) ≠ 0x(k+1)
f ( )x(k+1) f ( )x(k) f ( ) ≠ 0x(k+1)
In entrambi i casi la funzione fsolve di Octave termina:
■ Il valore del parametro di uscita INFO è rispettivamente 2 o 3■ Ma il problema non è risolto, infatti FVAL non è nullo
Come gestire il problema?
■ Controllate sempre il valore di FVAL!■ Se non è sufficientemente piccolo, non fidatevi del risultato
Elementi di Informatica eElementi di Informatica eApplicazioni Numeriche TApplicazioni Numeriche T
Minimini Quadratie Leggi di Potenze
Determinazione del Tipo di un FluidoDeterminazione del Tipo di un Fluido
In fluidodinamica si può distinguere la classe di un fluido
La distinzione viene fatta in base alla relazione tra:
■ La velocità di deformazione ■ E lo sforzo tangenziale
γτ
In particolare, consideriamo tre casi:
■ Fluido Newtoniano: relazione lineare ■ Fluido di Bingham: relazione affine ■ Fluido pseudoplastico: legge di potenze:
τ = αγτ = α + βγ
τ = αγβ
Determinazione del Tipo di un FluidoDeterminazione del Tipo di un Fluido
Su un piano cartesiano, i tre tipi di fluido si presentano così:
Determinazione del Tipo di un FluidoDeterminazione del Tipo di un Fluido
La determinazione viene effettuata in modo empirico:
■ Si effettua una serie di misurazioni di ■ Quindi si fa una ipotesi sul tipo di fluido e si stimano i parametri
τ, γ
In pratica, possiamo utilizzare il metodo dei minimi quadrati!
■ Possiamo eseguire il metodo per ognuno dei tre casi:
(a) τ = αγ (b) τ = α + βγ (c) τ = αγβ
■ Scegliamo il caso che minimizza la somma dei quadrati dei residui:
e = ( − ( )∑i=1
nτi fα,β γi )2
Un Esempio PraticoUn Esempio Pratico
Siano date le misurazioni di della figura seguente:τ, γ
Un Esempio PraticoUn Esempio Pratico
Si determini il tipo di fluido ed i parametri della relazione tra e τ γ
Un Esempio PraticoUn Esempio Pratico
Partiamo dal caso più semplice, ossia il fluido di Bingham
( ) = α + βfα,β γ γ
■ Ci basta fare una interpolazione con un polinomio di grado 1!
x = % misurazioni di gammay = % misurazioni di tau
% Minimi quadratip1 = polyfit(x, y, 1) % p1 = [1.07631, 0.82395]
% Funzione approssimantef1 = @(x) (polyval(p1, x))
Un Esempio PraticoUn Esempio Pratico
Vediamo su un grafico la qualità dell'approssimazione:
Un Esempio PraticoUn Esempio Pratico
In termini numerici, guardiamo alla somma dei quadrati dei residui:
e = ( − ( )∑i=1
nτi fα,β γi )2
In Octave:
E1 = sum((y - f1(x)).^2)
■ Il risultato in questo caso è ■ Una soluzione completa è disponibile sul sito del corso■ Per dettagli si veda la registrazione della lezione
1.2065
Un Esempio PraticoUn Esempio Pratico
Proviamo ipotizzare che il fluido sia Newtoniano, quindi:
( ) = αfα,β γ γ
■ Non possiamo usare polyfit: non garantirebbe di avere β = 0Però possiamo eseguire il metodo risolvendo un sistema lineare!
■ Dalla teoria classica abbiamo che i parametri sono dati da:β
β = ( Φ) yΦT ΦT
■ Dove la funzione approssimante è nella forma:
(x) = (x) + (x) + …fβ β1g1 β2g2
Un Esempio PraticoUn Esempio Pratico
Nel nostro caso, la funzione approssimante ha un solo componente:
(x) ↔g1 γ
■ Ed abbiamo un solo parametro, i.e. il coefficiente α
Quindi la matrice sara fatta come segue:Φ
Φ = =⎛
⎝⎜⎜⎜
( )g1 x1( )g2 x2
⋮
⎞
⎠⎟⎟⎟
⎛
⎝⎜⎜⎜
γ1γ2
⋮
⎞
⎠⎟⎟⎟
■ è semplicemente il vettore delle nostre misurazioni !Φ γ
Un Esempio PraticoUn Esempio Pratico
In Octave, assumendo di avere un fluido Newtoniano, otteniamo:
x = % colonna con le misurazioni di gammay = % colonna con la misurazioni di tau
Phi = xp2 = Phi \ y % p = alpha = 1.6901
f2 = @(x) (p2 .* x) % Funzione approssimante
E2 = sum((y - f2(x)).^2)
■ E2 vale ■ Molto peggio di prima: il fluido decisamente non è Newtoniano
15.990
Un Esempio PraticoUn Esempio Pratico
Rimane da considerare solo il caso del fluido pseudoplastico, con:
( ) = αfα,β γ γβ
Di nuovo non possiamo usare polyfit, ma per una ragione diversa:
■ Il problema è che la funzione è non lineare in ...■ ...Ma noi abbiamo visto solo il metodo lineare dei minimi quadrati!
β
Il metodo non si applica se dipende non linearmente dai parametrif
In realtà, c'è una soluzione semplice: possiamo "barare" ;-)
■ Possiamo cambiare la scala dei dati...■ ...in modo che la funzione diventi lineare!
Un Esempio PraticoUn Esempio Pratico
Guardiamo cosa succede considerando anziché :log( )fα,β fα,β
log ( ) = log (α ) = log α + β log xfα,β γ γβ
In altre parole:
■ Il logaritmo di ...■ ...dipende linearmente dal logaritmo di
( )fα,β γx
Quindi, utilizzare il metodo dei minimi quadrati, trasformiamo i dati:
⟶ logτi τi⟶ logγi γi
Un Esempio PraticoUn Esempio Pratico
Questi sono i dati trasformati su un grafico cartesiano:
Un Esempio PraticoUn Esempio Pratico
Sembra proprio una retta => è probabile che il fluido si pseudoplastico
Un Esempio PraticoUn Esempio Pratico
A questo punto possiamo approssimare i dati trasformati:
x = % misurazioni di gammay = % misurazioni di tau
xl = log(x) % trasformo gammayl = log(y) % trasformo tau
p3 = polyfit(xl, yl) % risultato: [0.49591, 0.68855]
Poiché abbiamo , allora:log ( ) = log α + β log xfα,β γ
■ p3(1) contiene ■ p3(2) contiene
βlog α
Un Esempio PraticoUn Esempio Pratico
A questo punto possiamo applicare ai parametri alla forma iniziale:
( ) = αfα,β γ xβ
In Octave, abbiamo:
% p3(1) = alpha = 0.49591% p3(2) = log(beta) = 0.68855% Quindi la funzione approssimante è:f3 = @(x) (e.^p3(2) .* x.^p3(1) )
E3 = sum((y - f3(x)).^2)
■ Il valore di E3 è , il migliore finora■ Il fluido è pseudoplastico con
0.58175α ≃ 0.49591, β ≃ e0.68855
Un Esempio PraticoUn Esempio Pratico
Vediamo la qualità dell'approssimazione su un grafico:
Elementi di Informatica eElementi di Informatica eApplicazioni Numeriche TApplicazioni Numeriche T
Lookup di FunzioniDefinite per Punti
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Consideriamo il nostro esempio delle BMW
Lo stato è descritto da e si evolve secondo l'EDO:(x, v)
= (F − ρ A)v 1m
12 v2CD
Dove abbiamo che:
■ , ■ (densità dell'aria)■ (superficie esposta)■ (resistenza aerodinamica)
F = 1000 N m = 161 Kgρ ≃ 1.25 Kg/m3
A = 1.2 m2
= 0.26CD
Domanda: quanto vale la velocità dopo secondi?40
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Il modo più semplice per rispondere è risolvere l'EDO fino a :t = 40function dx = f(x, t) ... % Definizione delle variabili % x(1) = posizione, x(2) = velocità dx(1) = x(2); dx(2) = 1./m .* (F - 0.5.*rho.* x(2).^2.*C_D.*A);endt = linspace(0, 40);x0 = [0, 0];sol = lsode(@f, x0, t)v = sol(:, 2)v40 = v(end) % Il risultato!
■ Alla fine il risultato è l'ultimo elemento nel vettore v
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Proviamo a complicare la cosa:
■ Determiniamo la velocità dopo 40 secondi...■ ...E la strada percorsa dopo 20 secondi
Soluzione banale:
■ Risolvere la EDO fino a per ottenere la velocità■ Risolvere la EDO (di nuovo) fino a per ottenere la strada
t = 40t = 20
Così facendo però ripetiamo i conti due volte
Vediamo un metodo alternativo
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
La soluzione della EDO è un vettore di valutazioni della funzione :v(t)
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Se ci interessa il valore di per un che è stato valutato:v( )t0 t0
■ Ci basta recuperare l'indice i0 di nel vettore t...■ Il risultato poi è dato da v(i0)
t0
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Se ci interessa per un che è non stato valutato:v( )t0 t0
■ Cerchiamo un indice i per cui t(i) >= t0 && t(i+1) <= t0■ Oppure: t(i) <= t0 && t(i+1) >= t0 (se t non è un "tempo")
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Se ci interessa per un che è non stato valutato:v( )t0 t0
■ Poi per esempio otteniamo v(i)
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Se ci interessa per un che è non stato valutato:v( )t0 t0
■ Poi per esempio otteniamo v(i)■ Oppure possiamo usare usare una approssimazione lineare
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
In sintesi, dati due vettori v e t:
■ Troviamo un indice i tale che t "attraversa" t0■ Poi otteniamo il valore di v (eventualmente interpolando)
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Equivale ad approssimare con una spezzata!y = f (x)
■ Punto sinistro = approssimazione a gradini
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Equivale ad approssimare con una spezzata!y = f (x)
■ Punto sinistro = approssimazione a gradini■ Interpolazione lineare = approssimazione lineare a tratti
Determinare lo Stato ad un Tempo DatoDeterminare lo Stato ad un Tempo Dato
Il codice in Octave:
function xx = lookup_interp(t, x, t0) for ii = 1:length(t)-1 if (t(ii) <= t0 && t(ii+1) >= t0) || ... (t(ii+1) <= t0 && t(ii) >= t0) % Coefficiente angolare m = (x(ii+1)-x(ii)) ./ (t(ii+1)-t(ii)); % Interpolazione lineare xx = x(ii) + m .* (t0 - t(ii)); break end endend
Utilizzi dell l'Interpolazione con SpezzateUtilizzi dell l'Interpolazione con Spezzate
Quanto tempo di vuole per arrivare a ?100 Km/h■ Ho una condizione su (anziché su )■ Mi interessa il valore di (anziché di )
v tt v
lookup_interp(v, t, 27.78) % 100 Km/h = 27.78 m/s
Quanto vale la velocità dopo ?100 m
■ Ho una condizione su ■ Mi interessa il valore di
xv
lookup_interp(x, v, 100)
Interpolazione con Spezzate: Interpolazione con Spezzate: interp1
In alternativa, potete usare la funzione predefinita:
function Y1 = interp1(X, Y, XI)
...Che restituisce il valore interpolato di Y quando X vale XI
■ Di default, interp1 utilizza una interpolazione lineare■ Si può modificarne il comportamento (vedere help)
Attenzione: interp1 richiede che X sia ordinato
■ Se X rappresenta il tempo, allora l'ordinamento è naturale■ Se X rappresenta qualcos'altro (e.g. strada) allora non è detto
Buone notizie: la nostra lookup_interp non ha questo problema!
Un Altro EsempioUn Altro Esempio
Consideriamo ancora le nostre montagne russe:
■ Dove: ■ Domanda: quanto vale la velocità nel punto ?
a = 15 m, b = 20 ma
Un Altro EsempioUn Altro Esempio
Vediamo le parti importanti della soluzione in Octave:
function y = f(x, t) % x(1) = pos., x(2) = vel. (vars: da definire) fp = (2.*b)./a.^2 .* x(1) + - (2.*b)./a; y(1) = x(2) .* (1 ./ sqrt(1 + fp.^2)); y(2) = -g .* (fp ./ sqrt(1 + fp.^2));end
t = linspace(0, 4); % In 4 secondi oltrepasso "a"x0 = [0, 0];sol = lsode(@f, x0, t);v = sol(:, 2)VA = lookup_interp(x, v, a); % Risultato: 1.6633
Elementi di Informatica eElementi di Informatica eApplicazioni Numeriche TApplicazioni Numeriche T
EDO e Stato Stazionario
Determinazione dello Stato StazionarioDeterminazione dello Stato Stazionario
Torniamo all'esempio delle BMW
Lo stato è descritto da e si evolve secondo l'EDO:(x, v)
= (F − ρ A)v 1m
12 v2CD
Abbiamo sempre che:
■ , ■ (densità dell'aria)■ (superficie esposta)■ (resistenza aerodinamica)
F = 1000 N m = 161 Kgρ ≃ 1.25 Kg/m3
A = 1.2 m2
= 0.26CD
Nuova Domanda: quanto vale la velocità massima?
Determinazione dello Stato StazionarioDeterminazione dello Stato Stazionario
In questo caso la velocità massima è la velocità "a regime"
Determinazione dello Stato StazionarioDeterminazione dello Stato Stazionario
Lo stato stazionario di viene raggiunto quando v = 0v
■ Risolviamo quindi la EDO fino ad un tempo sufficientemente grande:
t = linspace(0, 60);sol = lsode(@f, [0, 0], t);v = sol(:, 2)
■ Recuperiamo i valori di = = (F − ρ A)v v 1m
12 v2CD
dv = 1./m .* (F - 0.5 .* rho .* v.^2 .* C_D .* A)
■ Infine recuperiamo il valore di quando v = 0v% Uso una tolleranza: a +vmax = lookup_interp(dv, v, 1e-5)
= 0v ∞
Un Metodo AlternativoUn Metodo Alternativo
Consideriamo la formula fondamentale del metodo di Eulero:
x(t + δ) = x(t) + δ (x, t)f ′
È la descrizione di un sistema dinamico tempo-discreto
■ Quidi possiamo cercare lo stato stazionario con IPF■ In pratica, si tratta di eseguire il metodo di Eulero...■ ...Finché e non sono sufficientemente vicinix(t + δ) x(t)Rispetto al metodo precedente:
■ Più efficiente: ci fermiamo allo stato stazionario!■ Meno accurato: lsode usa delle approssimazioni molto migliori
Elementi di Informatica eElementi di Informatica eApplicazioni Numeriche TApplicazioni Numeriche T
Potenzialità del Problemaai Valori Iniziali
Problema ai Valori Iniziali?Problema ai Valori Iniziali?
Consideriamo ancora l'esempio delle montagne russe:
Domanda: quanto deve valere nel punto perché in sia ?v 0 a 20 m/s
Problema ai Valori Iniziali?Problema ai Valori Iniziali?
Proviamo a modellare il problema:
= vx 11 + (xϕ′ )2‾ ‾‾‾‾‾‾‾‾‾√
= −gv (x)ϕ′
1 + (xϕ′ )2‾ ‾‾‾‾‾‾‾‾‾√■ Dove (x) = 2 x − 2ϕ′ b/a2
b/aSappiamo che, per un qualche tempo deve valere:ff
x( ) = atf v( ) = 20tfPossiamo risolverlo con i metodi visti finora?
Problema ai Valori Iniziali!Problema ai Valori Iniziali!
Provate a pensare dal metodo di Eulero:
■ Se potessimo eseguirlo "a ritroso", partendo da e ...■ ...Dovremmo poter determinare la velocità quando vale
x = a v = 20x 0
Intuitivamente:
■ Se potessimo "invertire" la direzione del tempo...■ ...Ci ritroveremmo con un nuovo problema ai valori iniziali
(τ) = ?x′
(τ) = ?v′
(0) = ax′ (0) = 20v′
Dobbiamo solo determinare le funzioni per il calcolo di (τ), (τ)x′ v′
Inversione Temporale di una EDOInversione Temporale di una EDO
Per come l'abbiamo definita, la nuova variabile corrisponde a:τ
τ = g(t) = − ttfQuindi, se ci riferiamo con a , possiamo ottenere:(τ)x′ x(g(τ))
(τ) = (g(t)) (t) = −f (x(g(t), g(t)) = −f ( , − t)x′ x g′ x′ tf■ Dove è la funzione che definiva f (x, t) (t)x
Quindi possiamo ottenere la nuova EDO con:
= −f ( , − t)x′ x′ tf■ Ossia negando la funzione originaria■ E sostituendo ogni occorrenza di in con
f (x, t)t f (x, t) − ttf
Un Esempio PraticoUn Esempio Pratico
Nel nostro caso, il problema con il tempo invertito è dato da:
= −vx 11 + (xϕ′ )2‾ ‾‾‾‾‾‾‾‾‾√
= +gv (x)ϕ′
1 + (xϕ′ )2‾ ‾‾‾‾‾‾‾‾‾√x(0) = a, v(0) = 20
Per semplicità le variabili non sono state rinominate
■ Se la variabile fosse comparsa nella espressione di ...■ ...Avremmo dovuto sostituirla con
t ,x v− ttf
In questo caso, avremmo dovuto conoscere il valore di tf
Un Esempio PraticoUn Esempio Pratico
Vediamo la soluzione (disegnata con plotyy, se vi interessa)
Un Esempio PraticoUn Esempio Pratico
Per ottenere il valore di velocità richiesto:
xf = [a, 20]; % Condizioni al contornotau = linspace(0, 4); % Tempo invertitosol = lsode(@f, xf, tau);
% Ottengo i due vettori che compongono la soluzionex = sol(:, 1);v = sol(:, 2);
v0 = lookup_interp(x, v, 0) % velocità per x = 0
■ Il risultato è ■ Il codice è disponibile sul sito del corso■ Per dettagli si veda la registrazione della funzione
2.7558 m/s