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