Wizualizacja 3D obiektów i systemów biomedycznych – Zestaw 2
Transkrypt
Wizualizacja 3D obiektów i systemów biomedycznych – Zestaw 2
Wizualizacja 3D obiektów i systemów biomedycznych Zestaw 2 – Matplotlib Termin 1 (za 100%): 20.12.2016 Termin 2 (za 50%): 30.12.2016 1. (1 pkt) Używajac ˛ biblioteki Matplotlib dla danych z pliku milk-tea-coffee.tsv sporzadzić ˛ wykresy przedstawiajace ˛ spożycie mleka, herbaty i kawy na przestrzeni lat. Ponadto na wykresach należy umieścić linie˛ wyznaczajac ˛ a˛ średnie spożycie we wszystkich latach. Mleko galon/osoba 40 30 20 10 galon/osoba 0 16 14 12 10 8 6 4 2 0 1920 1940 1920 1940 1920 1940 1960 1980 2000 1960 1980 2000 1960 1980 2000 Herbata Kawa 50 galon/osoba 40 30 20 10 0 2. (2 pkt) Napisać skrypt, który wyświetli histogram danych pochodzacych ˛ z: (a) obrazu Leny (plik lena.jpg), (b) pliku histogram.tsv. Każdy z histogramów należy wykonać na dwa sposoby. W pierwszym sposobie należy wyznaczyć czestotliwości ˛ wystepowania ˛ wartości samodzielnie i nanieść te dane na wykres słupkowy. W drugim sposobie należy wykorzystać odpowiednia˛ funkcje˛ z biblioteki Matplotlib służac ˛ a˛ do wyznaczania i rysowania histogramów. W przypadku obrazu Leny musimy być w stanie wczytać dane o odcieniach szarości. W tym celu można wykorzystać biblioteke˛ Python Image Library (PIL): 1 from PIL import Image lenasImage = Image.open( "lena.jpg" ) data = lenasImage.getdata() +LVWRJUDPREUD]XOHQDMSJEDU +LVWRJUDPREUD]XOHQDMSJKLVW OLF]EDSLNVHOL OLF]EDSLNVHOL RGFLH V]DUR FL RGFLH V]DUR FL +LVWRJUDPEDU OLF]EDZ\VW SLH +LVWRJUDPKLVWELQV OLF]EDZ\VW SLH OLF]EDZ\VW SLH ZDUWR +LVWRJUDPKLVWELQV ZDUWR +LVWRJUDPKLVWELQV OLF]EDZ\VW SLH ZDUWR ZDUWR 3. (2 pkt) Napisać funkcje, ˛ która znajduje wielomian interpolacyjny Lagrange’a: http://mathworld.wolfram.com/LagrangeInterpolatingPolynomial.html Nastepnie, ˛ korzystajac ˛ z tej funkcji narysować wykres wielomianu interpolacyjnego znalezionego dla punktów (0, 0), (30, 50), (60, 40), (100, −10). W bibliotece SciPy możemy znaleźć funkcje, ˛ która znajduje wielomian interpolacyjny Lagrange’a. Funkcja ta to lagrange. Przyjmuje ona dwa argumenty x i y czyli odpowiednio współrzedne ˛ x i y punktów interpolacyjnych, a zwraca wielomian w reprezentacji biblioteki NumPy. Do obliczenia wartości wielomianu można wykorzystać funkcje˛ z biblioteki NumPy o nazwie polyval, która przyjmuje jako pierwszy argument wielomian, a jako drugi punkt, w którym obliczyć wartość wielomianu. 2 import numpy as np from scipy.interpolate import lagrange x = [0, 30, 60, 100] y = [0, 50, 40, -10] polynomial = lagrange( x, y ) value = np.polyval( polynomial, 10 ) W skrypcie należy narysować dwa wykresy obok siebie. Na pierwszym wyrysowany ma być wykres wielomianu wyznaczonego własna˛ funkcja, ˛ a na drugim funkcja˛ lagrange z biblioteki SciPy. ,QWHUSRODFMD/DJUDQJH DZ DVQD ,QWHUSRODFMD/DJUDQJH DODJUDQJH 4. (2 pkt) Napisać funkcje, ˛ która znajduje wielomian aproksymujacy ˛ wyznaczony metoda˛ najmniejszych kwadratów: http://mathworld.wolfram.com/LeastSquaresFittingPolynomial.html Nastepnie, ˛ korzystajac ˛ z tej funkcji i danych z pliku approximation.tsv znaleźć wielomiany aproksymujace ˛ stopni: 2, 4 i 7. Wykresy znalezionych wielomianów przedstawić na wykresach. Przy pisaniu funkcji znajdujacej ˛ wielomian aproksymujacy ˛ przydatne moga˛ być funkcje z biblioteki NumPy: • vander – funkcja generuje macierz Vandermonde’a podanego ciagu ˛ liczb, np. vander([1, 2, 3, 5]) wygeneruje: 1 1 8 4 27 9 125 25 1 2 3 5 1 1 1 1 • fliplr – funkcja „przewraca” macierz w kierunku lewo-prawo; • flipud – funkcja „przewraca” macierz w kierunku góra-dół; 3 • array – funkcja tworzy tablice˛ biblioteki NumPy. W bibliotece NumPy możemy znaleźć funkcje, ˛ która znajduje wielomian aproksymacyjny wyznaczony metoda˛ najmniejszych kwadratów. Funkcja ta to polyfit. Przyjmuje ona trzy argumenty x, y i n czyli współrzedne ˛ x i y punktów, które chcemy aproksymować oraz stopień wielomianu aproksymujacego, ˛ a zwraca liste˛ współczynników wielomianu. W celu zamienienia listy współczynników na wielomian używany przez biblioteke˛ NumPy możemy wykorzystać funkcje˛ poly1d, która przyjmuje jako argument liste˛ współczynników i zwraca wielomian. import numpy as np x = [0, 30, 60, 100] y = [0, 50, 40, -10] polynomialCoeff = np.polyfit( x, y, 5 ) polynomial = np.poly1d( polynomialCoeff ) value = np.polyval( polynomial, x ) $SURNV\PDFMDVWZ DVQD $SURNV\PDFMDVWZ DVQD $SURNV\PDFMDVW1XPS\ $SURNV\PDFMDVW1XPS\ $SURNV\PDFMDVW1XPS\ $SURNV\PDFMDVWZ DVQD 5. (1 pkt) Jesteś snajperem i twoim zadaniem jest obserwowanie celu. Zapisujesz swoje obserwacje o położeniu celu w postaci par (r, θ ), gdzie r to odległość celu od twojej pozycji (w metrach), a θ to kat ˛ (w stopniach) pomiedzy ˛ kierunkiem wschodnim i półprosta˛ wyznaczona˛ przez pozycje˛ twoja˛ i celu. Twoje notatki znajduja˛ sie˛ w pliku target.txt. Sporzadź ˛ wykres przedstawiajacy ˛ droge˛ jaka˛ przebył cel. 4 SRF] WHN NRQL HF 5