Uszczegółowienie instrukcji laboratoryjnych
Uwaga: Informacje w tym rozdziale mogą być na bieżąco uzupełniane!
Wprowadzenie
Po pierwsze, nie da się literalnie zrealizować wszystkich instrukcji laboratoryjnych znajdujących się na stronach zajęć. Po drugie nie trzeba tego robić.
Po trzecie, instrukcji laboratoryjnych jest 7, a zajęć mamy tylko 5. Trzeba coś wybrać. Zajęcia pierwsze przychodzą „z zaskoczenia” (to znaczy nikt nie jest przygotowany); zajęcia trzecie (interpolacja trygonometryczna) — są obowiązkowe; pozostałe tematy do wyboru.
Niezależnie od Państwa wyboru, każde zajęcia składać się będą z trzech części:
- Prezentacja wybranego (przeze mnie) problemu (ok 45 minut).
- Dyskusja.
- Praca własna i przygotowanie sprawozdania.
Umawiamy się, że sprawozdania dostarczone powinny być z wykorzystaniem e-portalu do następnych zajęć, nie później jednak niż do końca jedenastego tygodnia semestru (zaliczenia, prace dyplomowe, etc)1. Zachęcam do szybkiego oddawania prac — pod koniec semestru/roku będzie ciężko.
Laboratorium 1 (import danych)
Do zrealizowania jest wersja sprowadzająca się do tego:
- wybieramy interesujący2 nas zbiór danych;
- prezentujemy dane z tego zbioru korzystając z jakiegokolwiek dostępnego nam narzędzia (może to być nawet program typu arkusz kalkulacyjny).
Sprawozdanie (niezbyt długie) powinno zawierać uzyskane wyniki i zapowiedź (albo jakieś rozważania dotyczące) używanego podczas reszty zajęć narzędzia/pakietu oprogramowania.
Za ,,interesujące dane’’ można uznać, na przykład, porównanie przebiegu epidemii w jakimś kraju (Polsce) w tym samym okresie w roku 2020–2024. Dla Polski ciekawe daty, to od pierwszego3 września do końca roku.
Laboratorium 2 (interpolacja)
Laboratorium dotyczy generalnie interpolacji danych. W trakcie zajęć zostaną przedstawione prezentacje pokazujące możliwość:
- Mathematici,
- Notatników Pythona (jupyter notebook).
- Matlab posiada bogatą bibliotekę pozwalającą na interpolację danych.
Uwagi:
- Excel pozwala chyba na realizację interpolacji liniowej…
- Wydaje mi się, że cokolwiek bardziej skomplikowanego trzeba zaprogramować na podstawie wzorów (lub używając VB).
Zadania do wykonania
- Wybrać jakieś źródło danych.
- Wyselekcjonować kilkanaście punktów z danych.
- Zaprezentować na tych punktach kilka rodzajów interpolacji (schodkowa, liniowa, kwadratowa,…, spline).
- Zdecydować, która z nich najlepiej opisuje „rzeczywistość”.
- Napisać sprawozdanie (nieco dłuższe: dwie–trzy strony?). Powinno zaczynać się od wyjaśnienia (własnymi słowami) co to jest interpolacja.
Laboratorium 3 (interpolacja trygonometryczna)
Będą demonstracje w Jupyterze i Mathematici z objaśnieniami.
Podstawą zajęć jest instrukcja laboratoryjna 2A. Zajęcia poświęcone są FFT4 i są obowiązkowe5.
Sprawozdanie, w szczególności powinno zawierać (punkt 4 Zadań do wykonania):
Opisać od czego zależy rozdzielczość (zdolność do identyfikowania w przebiegu złożonym składowych o bardzo bliskich częstotliwościach) szybkiej transformaty Fouriera. Można posiłkować się notatnikiem Jupyter.
Dodatkowo powinny być opisane Wszystkie zależności między czasem próbkowania, liczbą próbek (częstością próbkowania), a rozdzielczością i zakresem rozpoznawanych przez FFT częstości (twierdzenie o próbkowaniu).
Problemy można zilustrować przykładami.
Laboratorium (teoretycznie6) można próbować zrealizować w Excelu. Potrzebny jest dodatkowy pakiet Analysis ToolPak.
Zadania do wykonania
- Wybrać jakikolwiek zestaw danych, o którym można podejrzewać, że ma charakter „okresowy”7.
- Wyliczyć transformatę Fouriera danych.
- Pokazać „piki” związane z podejrzewanym okresem.
- Wyliczyć wartość okresu.
- Dodatkowo należy opisać wszystko co wynika z twierdzenia Shannona-Kotielnikowa, oraz zależności między czasem próbkowania, okresem próbkowania a rozdzielczością FFT, zakresem częstotliwości i inne takie…
Hint:
- Można podejrzewać, że dane meteorologiczne (na przykład temperatura) zmieniają się w sposób okresowy (cieplej w południe, chłodniej w nocy).
- Bardzo często w czasie pełni księżyca jest wyż. Zbadanie tego wymagałoby znajomości zmian ciśnienia w ciągu roku. Nie wiem na ile trudno jest pozyskać takie dane. Ale patrz również tu:
Pozostałe laboratoria
Jeżeli chodzi o ostatnie dwa sprawozdania, sugeruję, że powinniście mieć Państwo możliwość wykazania się inwencją. W końcu powinienem jakoś wszystkich ocenić.
Pozostały wśród instrukcji laboratoryjnych następujące tematy:
- Aproksymacja (aka regresja)
- Błędy obliczeń
- Optymalizacja
- Sztuczna inteligencja
Aproksymacja
Tu zadanie może polegać na próbie aproksymacji dziennego przebiegu temperatury za pomocą jakiejś funkcji aproksymującej. Inaczej niż w przypadku interpolacji nie możemy tu liczyć na to, że funkcja aproksymacyjna przejdzie przez jakikolwiek z punktów pomiarowych. Chodzi jedynie o jak najlepsze „oddanie charakteru zmienności” przebiegu.
Stworzyłem notatnik jupytera pokazujący jak to może wyglądać.
Kolejny notatnik (generalnie poświęcony aproksymacji liniowej) pokazuje w jaki sposób można wykorzystać aproksymację liniową do wyznaczania parametrów funkcji aproksymującej o postaci $$ y = a_{0}+ \sum_{i=1}^{N} a_{i}f_{i}(x) $$ gdzie $f_{i}$ to zestaw zadanych funkcji, przez odpowiednie komponowanie „macierzy pomiarów”
Zadanie aproksymacji ma największy sens wtedy, gdy znamy (z teorii) opis jakiegoś zjawiska z dokładnością do kilku (kilkunastu) parametrów. Zadanie wówczas sprowadza się do takiego dobrania parametrów aby jak najlepiej przybliżyć opisywane zjawisko.
Oczywiście wielomian prawie nigdy nie opisuje żadnego rzeczywistego zjawiska. Ale używając wielomianu stosunkowo łatwo uzyskać żądaną dokładność (zwiększając jego stopień). Zwracam uwagę (przypominam), że jeżeli mamy $N$ punktów to wielomian stopnia $N-1$ będzie funkcją interpolacyjną (przechodzącą przez wszystkie punkty).
Optymalizacja
Tu, generalnie nie mam wiele do dodania. Przygotowałem dodatkowy tekst na temat optymalizacji. Zawiera on informacje ogólne oraz odsyłacze do szczegółowych notatników jupytera pozwalających „potrenować“ minimalizowanie funkcji liniowych (z ograniczeniami) oraz oraz coś na temat zadań optymalizacji gdzie żąda się aby zmienne decyzyjne przyjmowały wartości całkowite.
Kolejny notatnik jupytera pokazuje różne problemy związane z optymalizacją lokalną i globalną.
Sprawozdanie, w szczególności, może obejmować tylko porównanie naiwnej metody Monte-Carlo z metodą złotego podziału (zaprogramowanymi w dowolnym języku programowania).
Błędy, precyzja obliczeń
Przewiduję prezentację kwestii związanych z kumulacją błędów podczas obliczeń w notatniku Mathematici. Temat, generalnie, jest dosyć trudny i hermetyczny…
Zadania:
Nieśmiertelne zaprojektować i przeprowadzić eksperyment pozwalający stwierdzić z jaką precyzją (dwójkową: liczba bitów) wykonywane są obliczenia w Excelu/LibreOffice Calc/Arkuszach Google i jaki jest zakres wartości dostępnych do obliczeń.
Poczytać o arytmetyce poczwórnej8 precyzji w języku C/C++ i zaimplementować jakiś obliczenia w przykładowym programie.
Kolejnym nieśmiertelnym zadaniem jest problem
$$x_{k+1} = \alpha x_{k}(1-x_{k})\quad x_{0}=0.5\quad \alpha=3.7$$
który jest bardzo niestabilny numerycznie. Można spróbować użyć biblioteki
mpmath
w Pythonie i zasymulować te obliczenia z praktycznie dowolną precyzją dziesiętną, zebrać w tabelce i porównać wyniki dla rożnych $\alpha$ (3,7 jest złe, ale 3.2 jest OK) i różnych precyzji. Gotowy notatnik jupytera jest również dostępny.
Sztuczna inteligencja
Przewiduję prezentację funkcjonowania sztucznej inteligencji (uczenia maszynowego) w Matematici. Pewno powinniśmy poświęcić temu tematowi znacznie więcej uwagi, ale nie do końca czuję się kopetentny.
Zadania:
Wydaje się, że minimum to powtórzenie procedury opisanej w instrukcji dla innego zestawu autorów.
Prawdę mówiąc nie mam pomysłu co jeszcze ciekawego można zrobić z zakresu uczenia maszynowego czy sztucznej inteligencji. Ale trzeba pamiętać, że jest bardzo wiele przykładów takich zadań w Pythonie (Jupyter). Warto pamiętać, że również MATLAB pozwala na zabawy z uczeniem maszynowycm. Zaakceptuję wszystko.
Niespełnienie tego warunku wiązać się może z problemami formalnymi ↩︎
Instrukcja laboratoryjna numer 1 odsyła do dwu zestawów danych „meteorologicznych”. Można również poszukać jakiegoś innego zestawu danych (COVID, dane demograficzne, wyniki słuchalności stacji radiowych,…). ↩︎
Pierwszego września rozpoczął się rok szkolny. ↩︎
FFT to właśnie interpolacja trygonometryczna. ↩︎
Ponieważ instrukcji laboratoryjnych jest więcej niż zajęć — studenci mają pewną dowolność w realizacji instrukcji laboratoryjnych. Natomiast zajęcia FFT są obowiązkowe. ↩︎
Bo nigdy tego nie próbowałem robić… ↩︎
Cokolwiek to znaczy. ↩︎
Jak wszyscy(?) wiedzą typy zmiennoprzecinkowe w języku C to:
float
,double
,long double
. Typfloat
to 32 bity, typdoubel
to 64. Niestety typlong double
to nie całkiem 128 bitów (tylko 80), choć zajmuje w pamięci 16 bajtów!. Warto to wiedzieć i znaleźć jakieś informacje źródłowe na ten temat oraz zdobyć informację jak jest to realizowane w różnych kompilatorach. ↩︎