Niestety musiałem zrestartować serwer jupyter – jest teraz dostępny tu
Category: ONA
Obliczenia naukowe
ONA 2 – Macierze i NumPy
Slajdy do wykładu – ONA2-Macierze
Jako interpretera pythona mogą Państwo użyć tego (Trochę porad jak używać tu )
Ćwiczenia:
- Stwórz macierze A i B o wymiarach 1000×1000 zawierające wartości A[i,j]==i*3-j*5 i B[i,j]==np.sqrt(A[i,j]) (Zauważ, że to wymaga wartości urojonych, a więc macierzy typu complex64 i wartość sqrt(-1) ->.j)
- Napisz funkcję poz(indeksy, shape), która dla zadanej krotki indeksów zwraca liniową pozycję elementu o zadanych indeksach w wielowymiarowaj macierzy o kształcie shape.
- Korzystając z broadcastingu i mnożenia macierzy zmień znak elementów w macierzy B, których suma indeksów jest nieparzysta
- korzystając z metody sort() , posortuj macierz 3-wymiarową wg. drugiej współrzędnej i obejrzyj wynik.
- Korzystając z funkcji frompyfunc() napisz funkcje wektorowe, które liczą a) sumę kwadratów dwóch macierzy (dwie macierze do jednej)
b) iloraz i resztę z dzielenia całkowitoliczbowego przez 17 (jedna macierz wejściowa i dwie macierze wyjściowe) - Korzystając z modułu time, porównaj prędkość funkcji liczących N potęg dwójki – na liście i w wektorze. Dla jakich wartości N warto używać macierzy?
ONA 1 – Arytmetyka komputerów
Slajdy do wykładu można znaleźć tu: ONA1-Arytmetyka
Uwaga nt. liczb całkowitych. Obecnie python3 ukrywa zupełnie przed nami fakt istnienia ograniczeń wielkości rejestrów przy operacjach na liczbach całkowitych. Aby zobaczyć jak to działa, warto uruchomić interpreter python2.7 i wykonać operacje na dużych liczbach.
Pracujemy w narzędziu python3 (nie w octave) i wykonujemy zadania inspirowane zadaniami z labu 3 do metod numerycznych. Zachęcam do użycia interpretera ipython3. Nieco więcej technicznych szczegółów jest też dostępne w materiałach do wykładu z metod numerycznych.
W szczególności:
Policz epsilon maszynowy (zarówno jako wartość dziesiętną ale też liczbe bitów cechy binarnej przy pomocy sprawdzania dla jakich n 1.0+2.0**(-n) >1.0. Co by się stało, gdybyśmy wykonali tę próbę w okolicy 0.0 zamiast 1.0. Czy taki epsilon maszynowy zależy od liczby bitów cechy, czy mantysy?
Zastanów się nad zadaniem z szeregami zbieżnymi (lub rozbieżnymi) numerycznie. Zaimplementuj liczenie sum S(n) w pythonie, dla dowolnego n i dla kilku szeregów podanych w rozwiązaniu. Które z nich można dokładnie policzyć pry użyciu modułu Fractions?
Policz wartości e(x) wg rozwinięcia wzoru Taylora dla zadanego maksymalnego stopnia. Porównaj różnicę wyniku jaki otrzymujesz dla x=-90 i x=2.
Policz sumy częściowe szeregu harmonicznego przy użyciu liczb zmiennoprzecinkowych i przy użyciu modułu Fractions. Porównaj wyniki.
ONA 13 – powtórka, przesunięcie terminu zadania 3.
Slajdy do dzisiejszego wykładu są tu: ONA13_powtorka
Przy okazji umówiliśmy się, że program nr 3 wyślą Państwo do poniedziałku 19. VI, do północy.
ONA 12 – Całkowanie Monte Carlo i miejsca zerowe funkcji nieliniowych
Dziś przede wszystkim zajmowaliśmy się zerami funkcji nieliniowych, ale zrobiliśmy też dygresję (w zasadzie uzupełnienie do wykładu o całkowaniu numerycznym) n.t. metod Monte Carlo. Notatki do równań nieliniowych znajdą Państwo tu. Opis całkowania metodą MC znajdą Państwo np. tu
Zadania na dziś:
1. Napisz program, który znajduje przybliżenie liczby Pi przy pomocy równania x**2+y**2<=1
2. Napisz program, który korzysta z metody bisekcji i oblicza wartość pierwiastka kwadratowego z 2. Jakiego równania zera szukamy? ile iteracji potrzeba?
3. Napisz program, który korzysta z metody stycznych, aby obliczyć tę samą wartość. O ile szybciej możemy znaleźć dokładną wartość?
4 (*). Zaimplementuj metodę iteracji prostej Banacha dla rozwiązania równania Keplera. Możesz posiłkować się tym artykułem
ONA 11 – Obliczenia symboliczne
Dzisiejszy wykład porównujący cechy różnych pakietów do obliczeń jest tu: ONA11-Pakiety-oprogramowania
Zadania na dziś są dość proste i dotyczą przede wszystkim obliczeń symbolicznych i pakietu sympy (można to robić w platfoermie jupyter gdzie jest też zakładka zawierająca przykłady z sympy)
- Przy użyciu pakietu sympy, zbadaj podstawowe możliwości obliczeń symbolicznych: stwórz zmienną sumboliczną x (Symbol(‘x’)), stwórz wyrażenie wielomianowe (np. x**2-2) oraz wyrażenie trygonometryczne (np. sin(x)) i policz dla nich pochodne, całki (oznaczone i nieoznaczone) oraz granice (w 0, z prawej i lewej strony oraz , granice 1/x w nieskonczonosci: sympy.oo,).
- Zobacz jak wyniki tego typu zadań wyglądają w Wolfram Alpha
- Zarejestruj się w systemie SageMath i tam spróbuj rozwiązać te same problemy
- (*) Spróbuj rozwiązać symbolicznie układ równań różniczkowych zwyczajnych z poprzednich zajęć (model Lotki-Volterry albo Zombie Invasion) w jednym z wymienionych wcześniej pakietów
ONA – Zadanie zaliczeniowe 3 – iteracyjna metoda estymacji ekspresji genów
Naszym zadaniem jest napisanie prostej metody iteracyjnej, która znajdzie lokalnie optymalne przypisanie poziomów ekspresji dla różnych transkryptów genów.
Przypomnijmy – geny u eukariontów podlegają splicingowi – procesowi wycinania intronów zanim dojdzie do translacji. Jeśli transkrypt posiada wiele intronów, możemy otrzymać wiele różnych transkryptów – niekiedy, jak w przypadku genu dSCAM, możeich być naprawdę bardzo wiele.
Mamy więc 3 poziomy organizacji transkrypcji: Geny, transkrypty i eksony. Każdy ekson może należeć do wielu transkryptów, ale każdy transkrypt należy do jednego genu.
Kiedy sekwerncjonujemy mRNA, możemy policzyć ile odczytów przypadło na każdy z eksonów. Przykładowy wynik takiej operacji znajdą Państwo w pliku Reads_on_exons. Opisuje on dla każdego z kilkuset tysięcy exonów liczbę odczytów przypadających na niego w jednym z eksperymentów badania ekspresji genów w ludzkim mózgu prowadzonym w mojej grupie.
Opis przynależnośći eksonów do genów w ludzkim genomie znajdą Państwo w pliku hg38_full.gtf Dla każdego eksonu będzie tam linia przypisująca go do określonego genu i transkryptu.
Naszym zadaniem jest obliczenie najbardziej prawdopodobnych poziomów ekspresji transkryptów zakładając, że ekspresja eksonów jest w przybliżeniu równa sumie ekspresji transkryptów zawierających dany ekson. Oczywiście musimy wziąć pod uwagę pewien błąd, który jest nieuchronnie związany z losowością próbki odczytów oraz z niedoskonałością opisu transkryptów.
Punktacja wygląda następująco:
– zaprojektowanie sensownych struktur danych do przechowywania informacji o genach, transkryptach i exonach – 7 punktów
– wczytanie danych z plików do tychże struktur – 7 punktów
– iterując po genach rozwiązujemy zadanie minimalizacji błędu najmniejszych kwadratów, gdzie dana jest ekspresja na egzonach i przypisanie egzonów do transkryptów i genów, a szukanymi jest ekspresja transkryptów. – 7 punktów
– wypisujemy wyniki do plików tekstowych (4 pkt)
a) eskpresję transkryptów w formacie: nazwa genu, nazwa transkryptu, wartość ekspresji, lista egzonów, zliczenia dla egzonów
b) błąd średniokwadratowy dla egzonów do pliku tekstowego w formacie: egzon, wartosc ekspresji, suma ekspresji transkryptow, blad, lista transkryptow
Ze względu na opóźnienie pojawienia się zadania – proponuję termin oddania projektu na 15 VI.
ONA – Różniczkowanie i całkowanie numeryczne
Dziś będziemy zajmować się różniczkowaniem i całkowaniem numerycznym. Slajdy są tu: ONA10-calkowanie
Przydatny będzie nam przede wszystkim pakiet scipy.integrate ale będziemy też korzystać z nowych funkcji pakietu matplotlib, takich jak wykresy strzałkowe
0. Na początek proponuje obejrzeć sobie program opisujący model Lotki-Volterry ( lotka_volterra ) i spróbować wykonać go po kawałku ze zrozumieniem. Jeśli są pytania, to proszę pytać
1. Naszym właściwym zadaniem jest budowa podobnego modelu dla problemu inwazji Zombie (opisanego w artykule naukowym ). Mamy tu 3 zmienne: ludzi niezarażonych (S), zombie (Z) oraz ofiary konfliktu (R). System jest dynamiczny, a jego zmiany opisują równania różniczkowe:
- dS/dt = P – B*S*Z -D*S,
- dZ/dt = B*S*Z +G*R – A*S*Z,
- dR/dt = D*S + A*S*Z – G*R,
gdzie
- P oznacza przyrost naturalny ludzi,
- B – współczynnik z którym zombie spotykając niezarażonego może go zarazić,
- D – współczynnik śmiertelności ludzi z przyczyn naturalnych,
- G – prawdopodobieństwo, że zombie powstanie z martwej ofiary,
- A – szansa na to, że w pojedynku człowieka z zombie, to zombie zostanie pokonane
Interesują nas następujące pytania:
a) Jak wygląda ewolucja systemu w czasie (w zakresie 0..5000), jeśli na początku jest tylko 1000 ludzi niezarażonych (nie ma zombie, ani ciał) i mamy następujące prametry:
- P=0.0001
- D=0.0001
- B=0.0095
- G=0.0001
- A=0.0001
Rozwiązanie przedstaw na wykresie 3 zmiennych (S,Z i R) od czasu
b) Czy zagładę populacji można zatrzymać poprzez zwiększanie współczynnika urodzin P? Rozwiązanie uzasadnij. Który ze współczynników musiałby wynosić 0, żeby populacja mogła poradzić sobie z zombie?
c) Zaprezentuj pole wektorowe populacji zombie i ludzi względem parametrów A i B?
d*) Zaprezentuj pole wektorowe 3d dla zmiennych S,Z,R
ONA – przed kolokwium
Przypominam, że za tydzień na wykładzie mamy kolokwium.
Zadania będą testowe, obejmują teorię z wykładów do dzisiejszego włącznie.
Dla przykładu można obejrzeć sobie egzamin poprawkowy z 2016 roku
ONA 2017 – Wartości i wektory własne
Dziś poznaliśmy numeryczne rozwiązania problemu znajdowania dominujacych wartości własnych metodą potęgową i wartości własnych bliskich zadanej wartości metodą odwrotną potęgową. Dużo więcej materiału można znaleźć na tej stronie
Jeśli chodzi o funkcje przydatne w pythonie, to przede wszystkim interesują nas funkcje:
oraz
Zadania na dziś:
1. Zaimplementuj metodę potęgową z wykładu i zastosuj ją dla rozważanej na wykładzie macierzy: M=array([[1,2.],[4,3]]). Czy Twoje rozwiązanie różni się od rozwiązania z funkcji eig? Jakie równanie spełniają wektory własne zwrócone przez tę funkcję?
2. Zaimplementuj metodę Rayleigha RQI (z wykładu ). zastosuje ją do znalezienia najmniejszej wartości własnej macierzy M z zad. 1.
3. Rozważ macierz A=array([[-1,2,2],[2,2,-1.],[2,-1,2]]). Spróbuj znaleźć jej wartości własne zaimplementowanymi przez siebie metodami. Skąd biorą się problemy? Czy podobne problemy spotkają nas dla macierzy rand(3,3)?
4. Rozważ macierz M=array([[a,1.],[0,b]]). Gdzie a i b są dodatnimi liczbami całkowitymi. Jak zmienią się wartości własne, gdy zamiast zera wstawimy do M[1,0] wartośći 1/k dla k rosnącego wykładniczo?