Adesso che ho un po' di tempo volevo proporre una NLODE, però mi sono reso conto che forse è meglio procedere con calma, cominciando con un esempio di una ODE a coefficienti non costanti.
Ho pensato di completare l'esempio precedente, cioè del gruppo RC lineare, estendendolo ad un caso non a coefficienti costanti.
E' interessante notare quanto si complichi l'equazione, sebbene io abbia cercato un esempio piuttosto semplice, cioè lineare, di primo ordine, anche se a coefficienti non costanti e non omogeneo (in generale).
Per far diventare l'equazione a coefficienti non costanti possiamo far variare la capacità con il tempo, per esempio.
Ho pensato di far variare C in questo modo: in t=0 la capacità è massima e vale Co, poi diminuisce nel tempo in modo esponenziale (ho fatto questa scelta per fare un esempio semplice).
Abbiamo quindi

Co è la capacità iniziale e Tc è la costante di tempo con la quale la capacità diminuisce nel tempo.
Questo andamento della capacità è ottenibile in molti modi, il più classico consiste nell'usare un sistema massa molla smorzatore opportuno, collegato alle piastre del condensatore, lasciato libero di evolvere alla chiusura dell'interruttore, ma si possono immaginare molti altri scenari, dall'attuatore piezoelettrico al diodo varicap pilotato con una tensione di controllo, data da un altro gruppo RC, con una tensione Vi molto piccola.
Usiamo quindi questa capacità per formare un gruppo RC alimentato con un gradino di tensione di ampiezza Vi, come nel caso precedente.
Come nel caso precedente, per la resistenza, vale l'equazione:

mentre per l'equazione relativa al condensatore bisogna fare un po' di attenzione.
Quando scriviamo la classica equazione:

facciamo riferimento, implicitamente, a questa catena di uguaglianze:

che, in questo caso, è vera fino all'ultimo segno di uguale.
Se il condensatore è una funzione del tempo bisogna scrivere:

da cui si ricava, nel caso specifico, che:

L'equazione complessiva è quindi:

Cominciamo a fare qualche considerazione, prima di partire a risolvere l'equazione a testa bassa.
La prima cosa che vedo è una brutta notizia.
Se Vi=0, l'equazione diventa omogenea:

che, oltre alla soluzione nulla ha ovviamente un qualche esponenziale che dipende dall'integrale di alfa su beta, che comprende anche un termine lineare. Lo vedete?

Se c'è anche Vi, l'esponenziale dovrà essere "corretto" con la funzione 1/t e integrato nuovamente.
Una funzione

non è integrabile elementarmente.
La soluzione non è esprimibile in termini di funzioni elementari, a meno che Vi non sia nulla.
Questo non vuol però dire che dobbiamo rinunciare a capire come sia fatta.
Vediamo, come prima cosa, cosa succede vicino a t=0.
Poniamo

. L'equazione diventa:

Noto subito che se la costante di tempo del gruppo RC è uguale alla costante di tempo di allontamento delle armarture del condensatore l'equazione diventa:

cioè

Questa è una retta la cui pendenza dipende esclusivamente da Vi.
Abbiamo ottenuto la prima informazione interessante.
Se Vi è positiva la tensione di uscita, in un intorno di t=0, crescerà, indipendentemente dalla tensione alla quale il condensatore era carico precedentemente.
Mi aspetto che il grafico sia qualcosa del tipo:
Al variare della tensione a cui era carico il condensatore in t=0+, con Vi che effettua un gradino positivo.
Mentre:
Se Vi è un gradino negativo (cioè

)
Questo vale per

, ma cosa succede se

oppure se

?
Guardiamo l'equazione:

Se

il termine

è positivo.
in un intorno di t=0 l'equazione è approssimabile a questa:

che significa che esiste una determinata combinazione fra Vi, R, C0, Tc e Vo(0) che rende il primo membro nullo e cioè Vo(t) costante (solo vicino a t=0, lo ricordo, poi le cose possono cambiare).
Se Vo(0) è più grande di quel valore particolare la tensione di uscita cresce (tanto di più quanto più grande è Vo(0) ), altrimenti decresce.
Vo(0) e Vi devono avere sempre segno discorde, per avere una tensione di uscita costante vicino a t=0.
Ecco il grafico di cosa mi aspetto, quindi:
Se

il termine

è negativo.
in un intorno di t=0 l'equazione è, come prima,

anche in questo caso esiste una determinata combinazione fra Vi, R, C0, Tc e Vo(0) che rende il primo membro nullo e cioè Vo(t) costante (solo vicino a t=0, lo ricordo, poi le cose possono cambiare).
Se Vo(0) è più grande di quel valore particolare la tensione di uscita decresce (tanto di più quanto più grande è Vo(0) ), altrimenti cresce.
Vo(0) e Vi devono avere sempre segno concorde, per avere una tensione di uscita costante vicino a t=0.
In pratica è la soluzione speculare rispetto a prima:
Adesso dobbiamo capire cosa capita alla fine, cioè per t che tende ad infinito.
Portiamo quindi al limite l'equazione originale:

ottenendo:



Cioè, indipendentemente dal percorso, alla fine il condensatore si porterà alla tensione di ingresso Vi.
Bisogna ancora chiarire come... raccordandosi in modo liscio? con un flesso? oscillando?
Escludo subito l'oscillazione perché l'equazione è di primo ordine.
Per il resto, è facile rispondere alla domanda facendo una semplice considerazione.
Se, alla fine, la tensione di uscita dovrà essere Vi, mi aspetto che, indipendentemente dal percorso, tutti i vari "rami" delle soluzioni confluiscano approssimativamente in un ramo, purchè abbastanza spesso
In pratica voglio dire che la funzione, prima o poi, dovrà essere asintotica alla retta Vo=Vi.
Questo implica che i termini


diventeranno approssimativamente costanti, nell'equazione generale:

Posso quindi porre

e fare finta che k sia costante e riscrivere l'equazione come se fosse a coefficienti costanti:

che ci riporta al caso di un gruppo RC classico, che riscrivo come:

L'autov... la costante di tempo vale quindi:

Se t è molto grande, l'esponenziale nella definizione di k è un numero molto piccolo, per cui si ha:

Quindi k o è o diventa rapidamente minore di uno, se mi sposto sufficientemente a destra nel grafico.
Se k è minore di uno, si ha che

è sempre minore di zero.

è positivo!
Ho un valore asintotico a cui tende la soluzione! (voglio dire che il sistema parte da una tensione iniziale ed evolve verso un valore finale. In pratica è un gruppo RC con il condensatore che arriva, dopo un transitorio, alla sua tensione finale. Se avessi ottenuto un

negativo l'esponenziale sarebbe andato a divergere, facendomi pensare di aver sbagliato qualcosa. Non perché con equazioni a coefficienti non costanti non sia possibile, ma piuttosto perché so che alla fine dovrò avere Vo=Vi, come ho dedotto prima.)
Adesso osserviamo il termine

. La Vi è "amplificata" di un fattore 1/(k-1) che risulta essere sempre maggiore di uno.
Se Vi è positiva abbiamo questo:
Altrimenti questo:
Non ci resta che mettere tutte le cose dedotte insieme.
Facciamo prima il caso più facile, cioè il primo che abbiamo visto:

, Vi positiva.
Ricordo che, essendo l'equazione del primo ordine, non si possono avere oscillazioni.
se Vi è negativa:
A questo punto (e solo ora!) possiamo verificare con il solutore numerico. Come sapete io uso Mathematica.
Risolviamo brutalmente l'equazione e definiamo una funzione che contenga la soluzione, con il comando:
- Codice: Seleziona tutto
Vo[Vi_, Viniz_, R_, Co_, Tc_, t_] =
Vout[t] /.
First@DSolve[{Vi + (R*Co/Tc*E^(-t/Tc) - 1) Vout[t] ==
R*Co*E^(-t/Tc)*Vout'[t] && Vout[0] == Viniz}, Vout, t] //
FullSimplify
Vo è la funzione di uscita
Vi è il gradino di ingresso, che vale 0 per t<0 e Vi (costante) per t>0
Viniz è la tensione a cui è carico il condensatore per t<0
R è la resistenza del gruppo RC a capacità non costante nel tempo
Co è la capacità iniziale
t è il tempo
Purtroppo mathematica risponde che la soluzione vale:

Dove Ei rappresenta la funzione esponenziale integrale (

)
Me lo aspettavo: la soluzione non è elementarmente integrabile.
Va beh, proviamo a porre

e Vi>0 e facciamo un grafico, col comando:
- Codice: Seleziona tutto
Plot[{Table[Vo[1, Vx, 1, 1, 1, t], {Vx, -10, 10, 1}], 1}, {t, 0, 4},
PlotRange -> {Automatic, {-10, 10.1}}, PlotStyle -> {Blue, Dashed},
AxesLabel -> {t, Vo}]
In modo da ottenere una famiglia di curve, al variare della tensione iniziale sul condensatore.
Ecco cosa otteniamo (vi assicuro che non l'ho fatto prima di fare i grafici in FidocadJ

)
La retta tratteggiata è Vi.
Come previsto la funzione inizia sempre a derivata positiva, per poi oltrepassare sempre Vi e infine tenderci "da sopra" esponenzialmente come un gruppo RC classico.
Vi<0
Comando:
- Codice: Seleziona tutto
Plot[{Table[Vo[-1, Vx, 1, 1, 1, t], {Vx, -10, 10, 1}], -1}, {t, 0, 4},
PlotRange -> {Automatic, {-10.1, 10}}, PlotStyle -> {Blue, Dashed},
AxesLabel -> {t, Vo}]
Risultato:
Come si vede all'inizio la derivata è sempre negativa e il valore asintotico viene raggiunto sempre "da sotto" (la retta tratteggiata è sempre sopra le curve blu).
Vediamo ora il caso

, Vi positiva.
Mettiamo insieme i grafici e raccordiamoli.
- Codice: Seleziona tutto
Plot[{Table[Vo[1, Vx, 3, 1, 1, t], {Vx, -10, 2, 1}], 1}, {t, 0, 6},
PlotRange -> {Automatic, {-5, 4}}, PlotStyle -> {Blue, Dashed},
AxesLabel -> {t, Vo}]
Vi<0
Come previsto la pendenza iniziale non varia solo con Vi ma anche con i valori delle varie costanti di tempo.
Il segno di Vi stabilisce la pendenza con la quale verrà raggiunto il valore asintotico.
Ultimo caso,

.
Cominciamo con Vi positiva.
- Codice: Seleziona tutto
Plot[{Table[Vo[1, Vx, 1, 1, 3, t], {Vx, -10, 10, 1}], 1}, {t, 0, 4},
PlotRange -> {Automatic, {-10, 10}}, PlotStyle -> {Blue, Dashed},
AxesLabel -> {t, Vo}]
Se Vi<0
- Codice: Seleziona tutto
Plot[{Table[Vo[-1, Vx, 1, 1, 3, t], {Vx, -10, 10, 1}], -1}, {t, 0, 4},
PlotRange -> {Automatic, {-10, 10}}, PlotStyle -> {Blue, Dashed},
AxesLabel -> {t, Vo}]
Si vede, anche in questo caso, che le costanti di tempo hanno influenza sulla pendenza iniziale della tensione di uscita, mentre Vi stabilisce il modo in cui questa tensione si raccorda con il proprio valore asintotico.
ConclusioneAbbiamo analizzato una equazione differenziale che rappresenta un circuito a coefficienti non costanti nel tempo. L'equazione è comunque lineare, ma non ammette già più una soluzione in termini di funzioni elementari.
Invece di buttare numeri a caso nel solutore numerico, abbiamo cercato di capire il senso dell'equazione, di esplorarne il contenuto, facendo attenzione al significato di molti dettagli che l'equazione voleva comunicarci.
Il risultato è stato quello di aver capito come i vari parametri dell'equazione influenzino il risultato.
Non l'abbiamo fatto per tutti i parametri, si potrebbe continuare, ma finirei forse per annoiare.
Quello che voglio che rimanga è che la storia che ci racconta questa equazione è enormemente più complessa rispetto alla storia che ci racconta un gruppo RC a coefficienti costanti.
E' la natura delle equazioni differenziali. I problemi si complicano molto passando da una tipologia di equazione ad un'altra, perché l'informazione contenuta aumenta di dimensione.
Notare che l'equazione è ancora lineare.
Se diventasse non lineare il problema si complicherebbe molto molto di più.
Poi potrebbe diventare non lineare a coefficienti non costanti, poi alle derivate parziali.
Quando i problemi diventano alle derivate parziali abbiamo un problema ordinario che deve essere risolto e congruente agli altri per ogni direzione in cui la derivata si muove. (!)
Poi questi problemi possono diventare a coefficienti non costanti e poi magari anche non lineari.
Non stupisce affatto che alcuni di questi problemi (per esempio l'equazione di Navier-Stokes, per citarne uno) non siano ancora stati non solo risolti, ma nemmeno ancora
capiti da nessuno.
E' infinitamente più importante avere idea di quello che si sta facendo, piuttosto che mettere dati nel simulatore.
Se non avessimo studiato l'equazione saremmo riusciti a capire come impostare i vari parametri nella soluzione per ottenere un cambio di comportamento?
E se li avessimo ottenuti per caso, saremmo riusciti a capire cosa stavamo ottenendo e perché quei parametri influenzavano il comportamento dell'equazione?
Ciao,
Pietro.
PS: se riuscite a risolvere Navier-Stokes vincete un premio pari ad un milione di dollari.
