Imagine: Ionut Stefan

Pentru a-l parafraza pe unul dintre foștii mei profesori de facultate, acest articol ar fi trebuit să se numească „ecuații diferențiale”, dar atunci niciunul dintre voi n-ar fi dat click pe el. Sper totuși că nu am menționat acest termen prea devreme și v-am speriat pe toți. La urma urmei, dacă tot ați făcut efortul să deschideți această pagină, de ce să nu citiți mai departe încă 30 de secunde?

Știu, sună înfricoșător. Dar promit că nu va fi unul dintre acele tutoriale super-abstracte și imposibil de înțeles, care presupun că deja știți exact lucrurile pe care ați venit aici să le învățați. Vom începe de la noțiuni foarte de bază și exemple cu adevărat simple. Dacă ești fizician, matematician sau, în general, cineva cu educație formală în acest domeniu, poate vrei să sari direct la final. Altfel, s-ar putea să te trezești strigând la ecran: „NU! NU! Absolut deloc! Nu e o formulă matematică ciudată, e o ecuație care relaționează una sau mai multe funcții necunoscute și derivatele lor! Toată lumea știe asta!” Înțeleg frustrarea, dar unii oameni trebuie să pornească din alt punct ca să ajungă acolo unde ești tu deja.

Ce sunt ecuațiile diferențiale?

Deci, ce este o ecuație diferențială? Ei bine, este o formulă matematică ciudată care ne permite să descriem o mulțime de fenomene. Astăzi ne interesează lucrurile care se schimbă în timp. În cazul neuronului nostru virtual, asta înseamnă evoluția potențialului său de membrană în timp. Dar pentru a putea simula asta, trebuie mai întâi să înțelegem câteva concepte de bază, așa că vom începe cu ceva mai simplu. Mult mai simplu.

Să presupunem că urmărim o pisică care se mișcă. Și pentru că nu avem absolut nimic mai bun de făcut în această lume imaginară, vrem să descriem distanța pe care o parcurge pisica într-un interval de 30 de secunde. La începutul acestui „experiment” trăsnit, adică la momentul t = 0, distanța parcursă este 0 centimetri, pentru că pisica doar stă tolănită.

Grafic care prezintă timpul t pe axa x (în secunde), cu ticuri ale axei de la 0 la 30 în trepte de 5, și distanța x pe axa y (în centimetri), cu ticuri ale axei de la 0 la 30 în trepte de 5. În poziția (0,0) există un emoji pisică roșie zâmbitoare.

Dar, observând că o privim insistent, probabil că începe să se simtă inconfortabil și începe să se îndepărteze încet. Minunat! Acum putem continua observațiile: după o secundă (t = 1), pisica a avansat cu 1 centimetru (notat ca x = 1), după 2 secunde – 2 centimetri și așa mai departe, până când, după 30 de secunde, s-a deplasat cu 30 de centimetri față de noi. Putem vizualiza asta mai jos.

Grafic care prezintă timpul t pe axa x (în secunde), cu ticuri ale axei de la 0 la 30 în trepte de 5, și distanța x pe axa y (în centimetri), cu ticuri ale axei de la 0 la 30 în trepte de 5. Pornind de la poziția (0,0), un emoji pisică roșie se deplasează liniar până la poziția (30,30), urmat de o linie roșie.

Formal, în matematică, am scrie această observație astfel: \displaystyle \begin{aligned} \frac{dx(t)}{dt} = 1\end{aligned}. De ce? Pentru că pentru fiecare unitate de timp t (adică fiecare secundă în acest caz), distanța x crește cu 1 centimetru. Cu alte cuvinte, schimbarea distanței (=dx) per unitatea de timp (=dt) este întotdeauna 1. Aceasta este ceea ce se numește rata de schimbare a lui x.

În timp ce încercam să înțelegem asta, pisica s-a speriat și mai tare și acum chiar încearcă să fugă de noi, accelerând pe măsură ce o privim. Și, așa cum am menționat, suntem extrem de plictisiți, așa că asta devine și mai interesant! Începem o nouă perioadă de observație. De data aceasta, pisica pornește din nou de la 0, dar după 1 secundă este la 1 centimetru distanță, după 2 secunde – la 4 centimetri, după 3 secunde – la 9 centimetri și tot așa, până când, la finalul celor 30 de secunde, ajunge la 900 de centimetri depărtare!

Grafic care prezintă timpul t pe axa x (în secunde), cu ticuri ale axei de la 0 la 30 în trepte de 5, și distanța x pe axa y (în centimetri), cu ticuri ale axei de la 0 la 30 în trepte de 5. Pornind de la poziția (0,0), un emoji pisică roșie se deplasează până la poziția (30, 900), viteza sa dublându-se la fiecare pas. Pisica este urmată de o linie roșie care îi descrie traiectoria.

Din nou, în matematică, tiparul pe care l-am observat poate fi scris astfel: x = t^2, iar ecuația diferențială corespunzătoare ar fi \displaystyle \frac{dx(t)}{dt} = 2t. Poate că acum te întrebi cum ar trebui să ghicești ecuațiile diferențiale ale funcțiilor. Ei bine, momentan… nu trebuie. Pentru funcțiile mai simple, poți găsi tabele online. De multe ori, poți folosi și WolframAlpha. Și, cu timpul, s-ar putea să deprinzi și alte trucuri.

Ecuația unei pisici oscilante

Revenind la pisică, se pare că bietul animal și-a dat seama că nu poate scăpa din acest iad imaginar, așa că acum se plimbă enervată înainte și înapoi prin cameră, urmând un model oscilant.

Grafic care prezintă timpul t pe axa x (în secunde), cu ticuri ale axei de la 0 la 30 în pași de 5, și poziția x pe axa y (fără unități), cu ticuri ale axei de la 0,4 la 1,2 în pași de 0,1. Pornind de la poziția (0, 0,5), un emoji pisică roșu începe o mișcare sinusoidală. O linie roșie este trasată pe măsură ce pisica se deplasează pentru a indica traiectoria sa. Pisica efectuează 3,5 oscilații, deplasându-se între 0,5 și aproximativ 1,15 pe axa y.

De data aceasta, nu ne mai uităm la distanța parcursă într-un anumit interval de timp, ci la poziția pisicii în cameră (pe care o notăm tot cu x). E drăguț, nu? Ei bine, ține-te bine, pentru că acum vine partea matematică: \displaystyle \frac{dx(t)}{dt} = \mu \cdot (1 - x(t)^2) \cdot x(t) - \omega \cdot x(t) + A \cdot sin(\nu t).

În acest moment, probabil că îți pui aceleași întrebări pe care mi le-am pus și eu când am început să învăț asta:

  • De unde naiba a apărut toată această monstruozitate? Chiar trebuie să mă uit la niște linii ciudate și… să scot astfel de formule din burtă?
  • \mu? \omega? Cine naiba sunt ăștia? Și cum se pronunță și ăsta: \nu? (Se citește „niu”)
  • hiperventilare în matematică
  • Vreau să știu cine este dx, dar ca să fac asta, trebuie să știu cine este x. DAR CINE ESTE x??
  • Vreau doar să-mi fac calculatorul să îmi arate acest grafic, cum se presupune că trebuie să trec de la limba elfilor la cod?

Te înțeleg. Respiră adânc. Dacă vrei să verși câteva lacrimi sau să rupi un pix, e și asta în regulă. După asta, ai puțină răbdare cu mine. Vom răspunde la toate aceste întrebări una câte una, așa că va trebui să mai zăbovim puțin în incertitudine. Să începem cu cea mai simplă parte: de unde a apărut această ecuație? Ei bine… de pe internet. Și nu, nu trebuie să le inventezi singur (cel puțin nu încă). Pe măsură ce înveți mai multe despre acest domeniu, vei vedea că există modele bine stabilite pentru neuroni, regiuni cerebrale, ba chiar pentru întregul creier. Desigur, dacă vrei să fii hardcore, ai putea, la un moment dat, să creezi propriul tău model sau măcar să modifici unul existent. Dar ajungem și acolo mai târziu.

Bine, dar cine sunt literele grecești? Și, dintr-un motiv oarecare, A? Știu că nu-ți va plăcea răspunsul, dar ele sunt… cam orice vrem noi să fie. „Dar cum le alegem???”, probabil că te întrebi, copleșit de greutatea acestei responsabilități. Ei bine, eu deja am ales niște valori care arată bine, dar adevărul este că, dacă n-aș fi făcut asta, tu n-ai avea nici cea mai vagă idee ce valori ar trebui să folosești. Așa că pur și simplu ar trebui să testezi mai multe până găsești ceva potrivit. De fapt, te încurajez să faci asta oricum. Este momentul să-ți dezvălui un secret: tot codul Python folosit pentru a genera figurile din acest articol poate fi găsit aici. Și este scris într-un mod prietenos pentru începători, așa că sper că toată lumea va putea să-l urmărească.

Este important de menționat că, pe măsură ce te aventurezi în construirea neuronilor virtuali, a creierului sau a oricărui altceva, vei da deseori peste astfel de parametri. În unele cazuri, vei ști ce valori să le atribui bazându-te pe măsurători experimentale, pe munca altora sau pe intuiție. Mai adesea, însă, va trebui să te bazezi pe clasica metodă a ghicitului (există și moduri de a face asta automat și sistematic, fără să trebuiască să modifici manual fiecare valoare, să te uiți la un grafic, să încerci alta etc., dar asta e o poveste pentru altă dată).

Soluție practică pentru ecuația pisicii

Rămâne întrebarea cea mai interesantă: cum rezolvăm ecuația asta? Cum trecem de la matematică la vizualizarea rezultatelor? Trebuie menționat că unele ecuații diferențiale au soluții analitice – adică le poți rezolva pe hârtie, exact cum ai rezolva o ecuație simplă ca x + 2 = 4. Dar, pe măsură ce ecuațiile devin mai complicate, soluțiile analitice sunt fie foarte dificile, fie imposibile. În acele cazuri, trebuie să apelăm la soluții numerice. Iată cum.

În primul rând, ca să fie clar: obiectivul nostru este să găsim valorile lui x pentru un interval de timp t. Așa cum am văzut mai sus, în „experimentele” noastre, t începe de la 0. Pentru a putea rezolva numeric ecuația noastră, trebuie să știm ce valoare are x la momentul t = 0 (aceasta este condiția noastră inițială). Cum o aflăm? Din nou, ghicim. Și aici, ne putem juca cu valorile. Vei observa că, în funcție de ecuație, diferite valori pot conduce la rezultate diferite. Există un motiv matematic pentru asta, care este un subiect în sine, dar doar pentru a-ți oferi un pic de intuiție: imaginează-ți un deal înconjurat de o vale în dreapta și un lac în stânga. Dacă plasezi o minge pe vârful dealului (condiția inițială), se va întâmpla unul din trei lucruri: va rămâne acolo dacă o plasezi exact în centru, se va rostogoli spre vale dacă o plasezi ușor spre dreapta și se va rostogoli spre lac dacă o plasezi spre stânga. Locurile în care mingea se oprește din mișcare se numesc puncte fixe, iar numărul lor poate fi diferit de 3, în funcție de sistemul pe care îl studiem.

Dar revenind la soluția noastră numerică. Avem acum o valoare pentru \displaystyle x(0). În ultimul nostru exemplu cu pisica, să spunem că am stabilit x(0) = 0,5. Pentru a găsi toate celelalte valori ale lui x, folosim o abordare iterativă. Deoarece știm x(0), putem calcula acum dx(0) prin simpla introducere a valorii sale, 0.5, în ecuația diferențială de mai sus (desigur, împreună cu valorile stabilite pentru parametrii \mu, \omega, \nu și A): dx(0) = 3 \cdot (1 - 0.5^2) \cdot 0,5 - 0,2 \cdot 0.5 + 1.5 \cdot sin(2 \cdot 0), care este aproximativ 1.03.

Acum, să facem un pas înapoi. Am spus la început că \displaystyle \frac{dx(t)}{dt} este rata de schimbare, cât de mult se schimbă x de la un moment la altul. Dacă știm că pisica se afla în poziția 25 la momentul t = 5 și în poziția 16 la momentul t = 4, atunci rata de schimbare este cât de mult și-a schimbat pisica poziția (25 – 16) împărțit la timpul în care și-a schimbat poziția (în acest caz, 5 – 4) sau \displaystyle \frac{dx(4)}{dt} = \frac{x(5) - x(4)}{t = 5 - t = 4}. Deoarece creștem întotdeauna t cu același interval de timp, putem numi acel interval de timp \Delta t. Într-o formă mai generală, putem apoi rescrie ecuația de mai devreme ca \displaystyle \frac{dx(t)}{dt} = \frac{x(t + \Delta t) - x(t)}{t + \Delta t - t}. Iar de aici, x(t + \Delta t) devine \displaystyle x(t) + \frac{dx(t)}{dt} \cdot \Delta t.

Înarmați cu asta, trebuie doar să alegem un \Delta t și apoi putem găsi x(t) pentru orice valoare a t, presupunând că știm (sau ghicim) x(0). Ca regulă generală, dorim să alegem \Delta t cât mai mic posibil (îți poți imagina că dacă ne-am uita la pisică acum și apoi 10 minute mai târziu, probabil că ar fi foarte departe de locul de unde a plecat, dar dacă ne-am uita după numai 0,1 milisecunde, nu ar exista aproape nicio schimbare). Pentru exemplul de mai sus, am setat \Delta t = 0.001. x(1) este atunci egal cu \displaystyle x(0) + \frac{dx(0)}{dt} \cdot \Delta t = 0.5 + 1.03 \cdot 0.001 = 0.50103. Aproape nicio schimbare, nu-i așa? Dar repetând același proces pentru mulți pași (10.000 de pași, ca să fim mai exacți) obținem graficul de mai sus. În practică, numărul de pași pe care vrei să îl simulezi depinde atât de ceea ce te intersează să observi, cât și de ceea ce poate suporta calculatorul tău.

Finalul primei părți & un mic exercițiu

Dacă ai ajuns până aici, felicitări! Ia-ți o gustare bine meritată și fă o pauză. Lasă creierul să proceseze toate informațiile până data viitoare, când vom aborda neuronul virtual. Și ca să te pregătești de lupta care ne așteaptă, poți încerca să implementezi o soluție numerică pentru ecuația de mai jos în limbajul tău de programare preferat. Și nu ezita să împărtășești rezultatele, fie în comentarii, fie pe platforma ta preferată de socializare.

\displaystyle \frac{dx(t)}{dt} = \mu (1 - x^2) x - \omega x + A \cdot sin(\nu t) + B \cdot cos(\eta t) x

Actualizare: partea a doua este acum disponibilă.

Cum ți s-a părut această postare? Scrie-ne în comentariile de mai jos. Și dacă vrei să ne susții, poți distribui articolul, ne poți cumpăra o cafea aici sau chiar ambele.

Abonează-te la fluxul RSS aici.

Ar putea să-ți placă și:

Un răspuns la „Construirea unui neuron virtual – partea 1”

  1. […] avut timp suplimentar pentru consolidarea amintirilor. Altfel, îți poți reîmprospăta memoria aici. Astăzi a venit în sfârșit momentul să abordăm neuronul virtual mult așteptat. Dar înainte […]

Lasă un răspuns

Descoperă mai multe la Neurofrontiers

Abonează-te acum ca să citești în continuare și să ai acces la întreaga arhivă.

Continuă lectura