Zagadnienia

5. Metody dla równań różniczkowych zwyczajnych - teoria zbieżności

W tym rozdziale przedstawimy teorię zbieżności schematów jednokrokowych i wielokrokowych. Rozpatrzymy tylko przypadek skalarny, ale teoria dla układów równań jest analogiczna. Wystarczy tylko moduł zastąpić przez jakąś normę w Rm np. normę euklidesową.

5.1. Teoria zbieżności schematów jednokrokowych

Teoria zbieżności schematów jednokrokowych jest teorią odrębną od teorii dla schematów wielokrokowych liniowych.

Okaże się, że kluczowym pojęciem jest tu zgodność schematu jednokrokowego - inaczej konsystentność, którą definiujemy następująco:

Definicja 5.1

Schemat jednokrokowy (4.10) jest zgodny (konsystentny), (ang. consistent) jeśli:

  • ϕ jest ciągłą ze względu na wszystkie zmienne

  • ϕ0,t,x,x=ft,x dla wszystkich t,x.

  • ϕ jest lipschitzowska ze względu na zmienne xn i xn+1 tzn. istnieje L>0 takie, że dla wszystkich x1,x2,y1,y2Ux0

    ϕh,t,x1,x2-ϕh,t,y1,y2Lk=12xk-yk.
Twierdzenie 5.1 (o zbieżności schematów jednokrokowych)

Jeśli rozwiązanie zagadnienia początkowego (3.1) xCp+1t0,T, schemat jednokrokowy jest zgodny i jest rzędu p1, to ten schemat jest zbieżny z rzędem p.

Dowód zostanie tutaj przedstawiony dla prostoty tylko dla schematów otwartych z rzędem p tj. ϕh,t,x,y=ϕh,t,x. Dowód w całej ogólności można znaleźć np. w [23].

Oznaczmy przez En=xn-xtn, czyli błąd pomiędzy obliczonym schematem przybliżeniem rozwiązania dla czasu tn, a dokładną wartością rozwiązania xtn. Niech τn=ehtn=xtn+1-xtn-hϕh,tn,xtn, czyli τn to lokalny błąd schematu dla czasu tn. Wtedy otrzymujemy, że

En=En-1+hϕh,tn-1,xn-1-ϕh,tn-1,xtn-1-τn-1,

a stąd, korzystając ze zgodności schematu, a dokładniej lipschitzowskości funkcji ϕ, por. Definicja 5.1, otrzymujemy

En1+h*LEn-1+τn-1.

Dalej, poprzez indukcję matematyczną otrzymujemy:

En1+h*LnE0+k=0n-11+h*Ln-k-1τk

Korzystając z tego, że (1+xex)

1+h*Lnen*h*LeL*T-t0

dla n takich, że h*nT-t0 widzimy, że

EneL*T-t0E0+k=0n-1τk

Zauważmy, że E0=0. Widzimy też, że

τneh.

Ponieważ schemat ma rząd p i xCp+1, to eh=Ohp+1 zatem

EneL*T-t0*n*eheL*T-t0T-t0hOhp+1=Ohp.

W szczególności zbieżność z rzędem p oznacza dla ustalonego tt0,T i n*h=t, że

xnh-xt=Ohp0h0n.
Przykład 5.1

Zgodność otwartego schematu Eulera. W zasadzie sprawdzenie konsystentności (zgodności) schematu jest w tym przypadku oczywiste, ponieważ funkcja Φh,t,x,y=ft,x, czyli spełnia założenia zgodności. Dodatkowo wiemy, że schemat ma rząd jeden, więc jeśli x rozwiązanie zadania początkowego (3.1) należy do C2, to xn-xt=Oh dla n*h=t-t0, co potwierdzają wyniki eksperymentów z tabeli 4.1 w przypadku skalarnym dla równania dxdt=x z x0=1.

5.2. Teoria zbieżności schematów liniowych wielokrokowych

Teoria zbieżności dla schematów wielokrokowych liniowych różni się od teorii zbieżności dla schematów jednokrokowych. Precyzyjniej pisząc - używamy tak samo jak w przypadku schematów jednokrokowych pojęcie rzędu schematu, ale równie ważne jest pojęcie stabilności schematu. Używając nieformalnego języka - stabilność schematu oznacza to, że błędy z poprzednich kroków się nie kumulują, a wręcz zanikają.

5.2.1. Stabilność, zgodność

Na początku rozważmy dowolny schemat liniowy wielokrokowy (4.8) zastosowany do równania z polem wektorowym równym zero tzn. do zagadnienia początkowego:

dxdt=0x0=1,

którego jedynym rozwiązaniem jest rozwiązania stałe xt=1. Nasz schemat staje się wtedy równaniem różnicowym liniowym jednorodnym o stałych współczynnikach:

αkxn+k+α0xn=0. (5.1)

Wprowadzając wielomian

ρλ=j=0kαjλj (5.2)

otrzymujemy, że jeśli ξ0 jest zerem (pierwiastkiem) wielomianu ρλ, to ciąg

xn=ξnn=0,1,2,,

jest rozwiązaniem równania różnicowego. Jeśli zero jest dwukrotne , to otrzymujemy nowe rozwiązanie związane z tym pierwiastkiem tzn.:

yn=n*ξn-1,n=0,1,2,,.

i tak dalej - jeśli zero jest trzykrotne, to kolejne rozwiązanie:

zn=n*n-1*ξn-2.

W każdym razie - co ważne - jeśli jakiś pierwiastek ρλ ma moduł ξ>1 lub ξ=1, ale krotność pierwiastka jest większa od jeden, to istnieją rozwiązania nieograniczone, a dokładnie, zachodzi dla pewnych rozwiązań:

xn+n.

Jeśli pierwiastek ξ<1 to zawsze wszystkie rozwiązania z nim związane spełniają

xn0n.

Podsumowując: jeśli jakiś pierwiastek ma moduł mniejszy od jeden, albo ma moduł jeden i krotność jeden, to rozwiązania z nim związane są ograniczone. Wydaje się, że wymaganie żeby wszystkie rozwiązania schematu zastosowanego do równania z prawą stroną równą zero były ograniczone jest jak najbardziej uzasadnione.

Dlatego w ten sposób definiujemy stabilność (ang. stability) schematu liniowego wielokrokowego (4.8):

Definicja 5.2

Schemat (4.8) jest stabilny, jeśli każdy pierwiastek ξ wielomianu ρλ=j=0kαjλj spełnia

ξ1,

a w przypadku jeśli ξ=1, to krotność pierwiastka ξ wynosi jeden.

Dodatkowo wprowadzamy pojęcie silnej stabilności schematu (ang. strong stability):

Definicja 5.3

Schemat (4.8) jest silnie stabilny, jeśli spełnia Definicję 5.2 stabilności, i jeśli ξ jest zerem wielomianu ρλ takim, że ξ=1, to ξ=1.

Pojęcie silnej stabilności nie wpływa na samą teorię zbieżności schematów, ale można się spodziewać, że schematy silnie stabilne zachowują się lepiej, por. rozdział 5.2.2.

W praktycznych obliczeniach wszystkie używane schematy liniowe wielokrokowe są silnie stabilne.

5.2.1.1. Zgodność schematu

Możemy oczekiwać, że jednym z rozwiązań naszego równania różnicowego (5.1) będzie rozwiązanie stałe: xn=1, czyli oczekujemy żeby ξ=1 było pierwiastkiem wielomianu ρλ, tzn. ρ1=0. Ten warunek nazwiemy prezgodnością (ang. preconsistency) schematu.

Dodatkowo rozpatrzmy drugie proste równanie z warunkiem początkowym:

dxdt=1x0=0,

którego rozwiązaniem jest xt=t. Jeśli zastosujemy schemat do tego równania (zawsze fn=1), to otrzymujemy następujące liniowe równanie różnicowe o stałych współczynnikach:

j=0kαjxn+jh-h*j=0kβj=0n0.

Dodatkowo wprowadzimy wielomian:

σλ=j=0kβjλj.

Zakładając, że schemat jest dokładny w tn=n*h dla tego zagadnienia początkowego tzn. wstawiając xn=xn*h=n*h otrzymujemy:

j=0kαjn+j-j=0kβj=nρ1+ρ1-σ1=0.

Jeśli założymy, że schemat jest prezgodny, to powyższe równanie daje nam:

ρ1=0ρ1-σ1=0. (5.3)

Wprowadzamy pojęcie zgodności (konsystentności) schematu liniowego wielokrokowego:

Definicja 5.4

Schemat liniowy wielokrokowy (4.8) jest zgodny (konsystentny), (ang.consistent) jeśli zachodzi (5.3).

Nie jest trudno pokazać, że ten warunek jest równoważny temu, że rząd schematu jest co najmniej jeden, tzn. prawdziwe jest następujące stwierdzenie:

Stwierdzenie 5.1

Schemat liniowy wielokrokowy (4.8) jest zgodny wtedy i tylko wtedy, gdy rząd schematu wynosi co najmniej jeden.

Dowód pozostawiamy jako zadanie, por. ćwiczenie 5.14.

5.2.1.2. Zbieżność

Twierdzenie 5.2 (o zbieżności schematów wielokrokowych)

Jeśli rozwiązanie zagadnienia początkowego xCp+1t0,T, schemat liniowy k-krokowy jest rzędu p dla p1 i jest stabilny, oraz wartości startowe xjh dla j=0,,k-1 spełniają nierówność:

maxj=0,,k-1xtjh-xjhChp

dla pewnej stałej nieujemnej C niezależnej od h, to ten schemat jest zbieżny z rzędem p.

Dowód twierdzenia można znaleźć w [5] lub [23].

Przykład 5.2

Zbieżność otwartego schematu Eulera jako schematu liniowego wielokrokowego. Wiemy już, że rząd otwartego schematu Eulera wynosi jeden. Wystarczy więc zbadać stabilność schematu. Wielomian ρλ=λ-1 zatem ma jeden pierwiastek λ1=1 więc schemat jest stabilny, a nawet silnie stabilny. Jeśli rozwiązanie jest klasy C2, to zbieżność zachodzi z rzędem jeden, co potwierdzają wyniki eksperymentów z tabeli 4.1 w przypadku skalarnym dla równania dxdt=x z x0=1.

5.2.2. Stabilność, a silna stabilność

Rozpatrzmy schemat kroku środkowego (4.3), który jest dwukrokowym schematem liniowym rzędu dwa (zadanie). Nietrudno sprawdzić, że jest to schemat stabilny, ale nie silnie stabilny.

\
Rys. 5.1. Schematy midpoint i Eulera otwarty na odcinku [0,1] dla dydx=-y;y0=1 z h=1e-1.

Rozpatrzmy nasze modelowe równanie liniowe:

dxdt=-xt>0,x0=1,

którego rozwiązanie xt jest równe exp-t. Zastosujmy schemat midpoint biorąc za x1 dokładną wartość rozwiązania x1h=exp-h. Narysujmy wykres rozwiązania przybliżonego otrzymanego tym schematem i schematem Eulera otwartym dla h=0.1 na odcinku 0,1, por. rysunek 5.1, i potem na 0,10, por. rysunek 5.2. W tym drugim przypadku rozwiązanie przybliżone otrzymane schematem midpoint od pewnego momentu przestaje zachowywać się jak rozwiązanie dokładne exp-t, tzn. widzimy coraz większe oscylacje.

\
Rys. 5.2. Schematy midpoint i Eulera otwarty na odcinku [0,10] dla dydx=-y;y0=1 z h=1e-1.
\
Rys. 5.3. Schematy midpoint i Eulera otwarty na odcinku [0,10] dla dydx=-y;y0=1 z h=1e-2.
\
Rys. 5.4. Schematy midpoint i Eulera otwarty na odcinku [0,20] dla dydx=-y;y0=1 z h=1e-2.

Weźmy mniejsze h=0.01. Wtedy na 0,10 wszystko jest w porządku, ale na odcinku 0,20 znów rozwiązanie otrzymane schematem midpoint zaczyna od pewnego momentu oscylować z coraz większą amplitudą, zamiast maleć do zera. Im h jest mniejsze, tym odcinek na którym rozwiązanie otrzymane schematem midpoint dobrze aproksymuje rozwiązanie równania wyjściowego jest większy, ale zawsze w pewnym momencie pojawi się zaburzenie numeryczne, por. rysunki 5.3 i 5.4.

Numeryczne zaburzenie wynika właśnie z tego, że schemat nie jest silnie stabilny. Można wypisać wzór na rozwiązania równania różnicowego zadanego przez schemat midpoint dla tego równania i wykazać, że po jakimś czasie zawsze pojawią się oscylacje.

Wyniki tu otrzymane nie stoją w jakiekolwiek sprzeczności z teorią zbieżności schematów liniowych wielokrokowych. Można sprawdzić, że schemat midpoint spełnia założenia tej teorii dla tego równania, i że na ustalonym odcinku 0,T zachodzi zbieżność z rzędem dwa. W praktyce nie należy stosować schematów, które nie są silnie stabilne, ponieważ zawsze mogą pojawić się oscylacje po a priori nie znanym czasie, szczególnie kiedy chcemy rozwiązać równanie na długim odcinku czasu.

5.3. Wartości startowe schematów wielokrokowych

W tym miejscu warto zwrócić uwagę, jak w praktycznych obliczeniach implementować schematy liniowe wielokrokowe. Aby przy pomocy danego schematu k-krokowego rzędu p obliczyć xn+k, należy znać poprzednie k przybliżenia xn+k-1,,xn. Czyli aby wystartować schemat musimy znaleźć odpowiednio dobre (tzn. takie, że Ej=Ohp, por. Twierdzenie 5.2) startowe przybliżenia x0,x1,,xk-1. Wartość x0 jest zadana jako warunek początkowy, tzn. możemy przyjąć dany warunek początkowy x0=xt0. Natomiast musimy wyliczyć x1,,xk-1. W praktyce do wyliczenia tych wartości możemy np. zastosować k-1 razy schemat jednokrokowy tego rzędu co najmniej p.

Dla schematu Adamsa-Bashfortha dwukrokowego rzędu dwa za x1 możemy przyjąć x1 obliczone jednym krokiem schematu Heuna. Tu warto zauważyć że musimy zastosować tylko jeden krok schematu Heuna. Uwzględniając to widzimy, że x1 można by też obliczyć stosując dowolny schemat jednokrokowy rzędu jeden np. otwarty schemat Eulera. Ogólniej do obliczenia startowych wartości x1,,xk-1 dla schematu k-krokowego rzędu p można zastosować schemat jednokrokowy rzędu p-1 lub większego.

5.4. Eksperymentalne badanie rzędu zbieżności schematów

hotwartyEuleren/en+1Heunen/en+1zmod.Euleren/en+12.5e-014.61e-020.001.90e-030.006.57e-030.001.1e-011.98e-022.333.51e-045.401.19e-035.535.3e-029.23e-032.147.63e-054.602.56e-044.642.6e-024.47e-032.071.78e-054.285.97e-054.291.3e-022.20e-032.034.32e-064.131.44e-054.146.3e-031.09e-032.021.06e-064.073.55e-064.073.1e-035.44e-042.012.63e-074.038.79e-074.031.6e-032.71e-042.006.55e-084.022.19e-074.02
Tabela 5.1. Eksperymentalne badanie rzędu zbieżności schematów: otwartego Eulera, Heuna i zmodyfikowanego schematu Eulera poprzez połowienie kroków dla równania dxdt=cos(x)2 z x0=0 dla t=1, którego rozwiązaniem jest arctanx. W kolumnach o indeksach parzystych jest podany błąd odpowiedniego schematu dla t=1, a w kolumnach 3, 5 i 7 są stosunki błędów dla kroku 2*h podzielone przez błędy dla kroku h dla odpowiednich schematów.
hHeunen/en+1rk4en/en+15.3e-015.96e+039.09e+012.6e-011.91e+033.126.41e+0014.181.3e-015.29e+023.614.24e-0115.126.3e-021.38e+023.832.73e-0215.563.1e-023.52e+013.921.73e-0315.781.6e-028.88e+003.961.09e-0415.897.8e-032.23e+003.986.81e-0615.953.9e-035.59e-013.994.27e-0715.972.0e-031.40e-014.002.66e-0816.02
Tabela 5.2. Eksperymentalne badanie rzędu zbieżności schematów: Heuna i Rungego Kutty rzędu cztery poprzez połowienie kroków dla równania dxdt=x z x0=1 dla t=10. W kolumnach indeksach parzystych jest podany błąd odpowiedniego schematu dla t=10, a w kolumnach 3, i 5 są stosunki błędów dla kroku 2*h podzielone przez błędy dla kroku h dla odpowiednich schematów.

Rząd zbieżności schematu dla czasu t można badać eksperymentalnie dla ustalonego zagadnienia początkowego dxdt=ft,x z warunkiem początkowym x0=x0 i ze znanym rozwiązaniem xt określonym na odcinku t0,T . Możemy wtedy przy pomocy naszego schematu, np. schematu Heuna, zmodyfikowanego schematu Eulera i otwartego schematu Eulera obliczać przybliżone wartości xnh dla ustalonego t=tnh=t0+n*h, z połowionym krokiem h: h0,h0/2,,2-kh0 dla ustalonego h0. Będziemy badać jak zmienia się błąd w kolejnych krokach, a dokładniej, jak zmienia się stosunek błędów dla kolejnych połowionych h.

Jeśli błąd dla ustalonego t zachowywałby się jak Ohp, a dokładniej, gdyby en=xnh-xt=c*hp+Ohp, to stosunek błędu powinien się zachowywać jak:

xn2h-xtx2nh-xt=c2php+Ohp+1chp+Ohp+12ph<1

dla dostatecznie małych h, czyli dla schematów Heuna i zmodyfikowanego schematu Eulera jak cztery, a dla otwartego schematu Eulera jak dwa, a dla schematu rzędu cztery jak 24 - czyli szesnaście.

W tabeli 5.1 widzimy wyniki eksperymentu dla t=1 dla schematów: otwartego schematu Eulera, Heuna i zmodyfikowanego schematu Eulera zastosowanych do zagadnienia początkowego dxdt=cos(x)2 z x0=0 , którego rozwiązaniem jest arctanx, czyli x1=arctan1.

W tabeli 5.2 przedstawiliśmy wyniki tego samego eksperymentu, ale dla schematu Rungego-Kutty rzędu cztery dla zadania początkowego dxdt=x z x0=1 i dla t=10, czyli z rozwiązaniem x10=exp10. Skoro schemat jest rzędu cztery, możemy oczekiwać, że błąd będzie jak Oh4 dla ustalonego t.

Wyniki uzyskane w tabeli 5.2 potwierdzają nasze przypuszczenie. Dla kroku o połowę mniejszego błąd maleje około 24=16 razy dla dostatecznie małych h (im h mniejsze, tym ten stosunek bliższy jest szesnastu). Przy okazji zauważmy, jak ogromna jest różnica w błędzie dla schematu rzędu cztery (Rungego-Kutty), a dla schematu Heuna rzędu dwa. W przypadku tego ostatniego - błąd bezwzględny dla h=2*10-3 jest rzędu 1/10, a dla tego pierwszego błąd jest rzędu 10-8. Z kolei patrząc na błędy względne, w przypadku schematu Heuna błąd jest na poziomie 10-5, a dla schematu Rungego 10-12, czyli poziom błędu w arytmetyce podwójnej precyzji praktycznie jest wystarczająco dokładny.

Błędem bezwzględnym nazywamy en, a względnym en/xtn. W przypadku gdy xtn jest bardzo duże lub bardzo małe należy rozpatrywać błąd względny choćby z powodu własności arytmetyki zmiennopozycyjnej.

5.5. Zadania

Ćwiczenie 5.1

Zbadaj rząd zbieżności zamkniętego schematu Eulera korzystając z teorii zbieżności dla schematów jednokrokowych.

Ćwiczenie 5.2

Zbadaj rząd zbieżności zamkniętego schematu Eulera korzystając z teorii zbieżności dla schematów wielokrokowych liniowych. Czy schemat jest silnie stabilny?

Ćwiczenie 5.3

Zbadaj rząd zbieżności schematu trapezów dany wzorem (4.7).

  1. korzystając z teorii zbieżności dla schematów jednokrokowych,

  2. korzystając z teorii zbieżności dla schematów wielokrokowych liniowych.

Czy schemat jest silnie stabilny?

Ćwiczenie 5.4

Zbadaj rząd zbieżności zmodyfikowanego Eulera i schematu Heuna.

Ćwiczenie 5.5

Zbadaj rząd zbieżności schematu punktu środkowego (ang. midpoint). Czy schemat jest silnie stabilny?

Ćwiczenie 5.6 (laboratoryjne)

Zaimplementuj schematy: otwarty i zamknięty Eulera w octave i przetestuj rzędy zbieżności eksperymentalnie metodą połowionego kroku, jak opisano w rozdziale 5.4 dla równania skalarnego dydx=y2;y0=1 oraz dla równania drugiego rzędu d2ydx2=-y z y0=0,dydx0=1.

Wskazówka: 

Do rozwiązywania nieliniowego równania przy implementacji schematu zamkniętego w każdym kroku możesz użyć funkcji fsolve().

Ćwiczenie 5.7 (laboratoryjne)

Zaimplementuj schemat trapezów, por. (4.7), w octave i przetestuj rząd zbieżności eksperymentalnie metodą połowionego kroku, jak opisano w rozdziale 5.4 dla równania skalarnego dydx=-y;y0=1 oraz dla równania drugiego rzędu d2ydx2=-y z y0=0,dydx0=1.

Wskazówka: 

Do rozwiązywania nieliniowego równania w każdym kroku możesz użyć funkcji fsolve().

Ćwiczenie 5.8 (laboratoryjne)

Zaimplementuj zmodyfikowany schemat Eulera oraz schemat Heuna w octave i przetestuj rzędy zbieżności eksperymentalnie metodą połowionego kroku, jak opisano w rozdziale 5.4.

Ćwiczenie 5.9 (laboratoryjne)

Zaimplementuj schemat Rungego rzędu cztery, dany wzorem (4.15) w octave i przetestuj rząd zbieżności schematu eksperymentalnie metodą połowionego kroku, jak opisano w rozdziale 5.4.

Ćwiczenie 5.10 (laboratoryjne)

Zaimplementuj schemat (ang. midpoint) w octave i przetestuj rząd zbieżności schematu eksperymentalnie metodą połowionego kroku, jak opisano w rozdziale 5.4, przyjmując, że x1=yt0+h, czyli jest równe dokładnemu rozwiązaniu. Dla równania dydx=-y z y0=1 zastosuj schemat na długim odcinku czasu dla ustalonego h. Czy rozwiązanie zachowuje się tak jak tego oczekujemy? Zmniejsz h i zobacz czy sytuacja się poprawia?

Ćwiczenie 5.11

Zbadaj rząd, stabilność i rząd zbieżności otwartego dwukrokowego schematu Adamsa, por. Ćwiczenie 4.7.

Ćwiczenie 5.12 (laboratoryjne)

Zaimplementuj w octave otwarty dwukrokowy schemat Adamsa, por. Ćwiczenie 4.7. Następnie przetestuj eksperymentalnie rząd zbieżności tego schematu metodą połowionego kroku, jak opisano w rozdziale 5.4 dla dydt=-y z y0=-1. Biorąc za x1:

  1. x1=yh=e-h czyli rozwiązanie dokładne dla t=h.

  2. x1 obliczone schematem Heuna czyli schematem Rungego-Kutty rzędu dwa.

  3. x1 obliczone schematem Eulera otwartym czyli schematem rzędu jeden.

Ćwiczenie 5.13

Znajdź dokładne rozwiązanie ykk=1 schematu różnicowego, który jest schematem punktu środkowego zastosowanym dla równania dydx=-y. Pokaż, że jeśli y0=1, a y1 różne od jednej konkretnej wartości (co np. odpowiada warunkom startowym y0=1,y1=exp-h), to limnyn=+, czyli pojawią się niepotrzebne kumulujące się zaburzenia numeryczne.

Ćwiczenie 5.14 (trudne)

Udowodnij stwierdzenie 5.1.

Wskazówka: 

Z tego, że rząd schematu jest co najmniej jeden, wynika od razu warunek zgodności schematu (wystarczy rozważyć oba równania dydx=0 z y0=1 i dydx=0 z y0=0). Natomiast aby pokazać, że ze zgodności schematu wynika to, że rząd schematu jest większy od jeden, należy zastosować wzór Taylora.

Ćwiczenie 5.15

Czy schemat Adamsa (por. rozdział 4.1.2) może nie być stabilny, ewentualnie nie być silnie stabilny? Uzasadnij podając ewentualnie kontrprzykład niestabilnego (czy nie będącego silnie stabilnym) schematu Adamsa.

Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.

Projekt współfinansowany przez Ministerstwo Nauki i Szkolnictwa Wyższego i przez Uniwersytet Warszawski.