Uszczegółowienie instrukcji laboratoryjnych na czas zarazy

Uwaga: Informacje w tym rozdziale będą na bieżąco uzupełniane!

Wprowadzenie

Po pierwsze, nie da się literalnie zrealizować wszystkich instrukcji laboratoryjnych znajdujących się na stronach zajęć.

Po drugie, instrukcji laboratoryjnych jest 7, a zajęć mamy tylko 5. Trzeba coś wybrać.

Każde zajęcia składać się będą z trzech części:

  1. Prezentacja wybranych problemów (ok 45 minut).
  2. Dyskusja problemów.
  3. Praca własna i przygotowanie sprawozdania.

Przez cały czas zajęć jestem dostępny (e-mail, w miarę potrzeby Zoom). W razie jakichkolwiek wątpliwości można się kontaktować w dowolnym terminie (ale wówczas nie można liczyć na bardzo szybką reakcję).

Umawiamy się, że sprawozdania dostarczone powinny być (via e-mail) do następnych zajęć (nie dotyczy to pierwszych zajęć w tygodniu parzystym, które odbyły się 9 października), nie później jednak niż do końca jedenastego tygodnia semestru (zaliczenia, prace dyplomowe, etc)1.

Cały czas podczas trwania zajęć pozostaję do dyspozycji (e-mail, zoom).

Laboratorium 1

Ze względu na brak oprogramowania2 do zrealizowania jest wersja minimalistyczne, sprowadzająca się do tego:

  1. wybieramy interesujący3 nas zbiór danych;
  2. 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.

Laboratorium 2

Laboratorium dotyczy generalnie interpolacji danych. W trakcie zajęć zostaną przedstawione prezentacje pokazujące możliwość:

  • Mathematici,
  • Notatników Pythona (jupyter notebook).

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

  1. Wybrać jakieś źródło danych.
  2. Wyselekcjonować kilkanaście punktów z danych.
  3. Zaprezentować na tych punktach kilka rodzajów interpolacji (schodkowa, liniowa, kwadratowa,…, spline).
  4. Zdecydować, która z nich najlepiej opisuje „rzeczywistość”.
  5. 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

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

  1. Wybrać jakikolwiek zestaw danych, o którym można podejrzewać, że ma charakter „okresowy”7.
  2. Wyliczyć transformatę Fouriera danych.
  3. Pokazać „piki” związane z podejrzewanym okresem.
  4. Wyliczyć wartość okresu.
  5. 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:

  1. Aproksymacja (aka regresja)
  2. Błędy obliczeń
  3. Optymalizacja
  4. Sztuczna inteligencja

Błędy obliczeńSztuczna inteligencja mogą być trudne do realizacji w warunkach domowych (ale, oczywiście, są to tematy dosyć interesujące). Zamierzam te tematy zademonstrować na spotkaniach.

Aproksymacja

Instrukcja Laboratoryjna 3.

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

 

gdzie 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 punktów to wielomian stopnia będzie funkcją interpolacyjną (przechodzącą przez wszystkie punkty).

Optymalizacja

Instrukcja Laboratoryjna 5.

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.

Zadania:

  1. 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ń.
  2. Poczytać o arytmetyce poczwórnej8 precyzji w języku C/C++ i zaimplementować jakiś obliczenia w przykładowym programie.
  3. Kolejnym nieśmiertelnym zadaniem jest problem

    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 (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.

Zadania: Prawdę mówiąc nie mam pomysłu co ciekawego można zrobić w warunkach domowych z zakresu uczenia maszynowego czy sztucznej inteligencji. Zaakceptuję wszystko.

 


1 Niespełnienie tego warunku wiązać się może z problemami formalnymi.
2 Nie mogę założyć, że macie dostęp do czegokolwiek.
3 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,…).
4 FFT to właśnie interpolacja trygonometryczna.
5 Ponieważ instrukcji laboratoryjnych jest więcej niż zajęć — studenci mają pewną dowolność w realizacji instrukcji laboratoryjnych. Natomiast zajęcia FFT są obowiązkowe.
6 Bo nigdy tego nie próbowałem robić…
7 Cokolwiek to znaczy.
8 Jak wszyscy(?) wiedzą liczby zmiennoprzecinkowe w języku C to: float, double, long double. Typ float to 32 bity, typ doubel to 64. Niestety typ long double to nie całkiem 128 bitów (tylko 80). Warto to wiedzieć i znaleźć jakieś informacje źródłowe na ten temat oraz zdobyć informację jak jest to realizowane w różnych kompilatorach.