Laboratorium MATLA. Ćwiczenie 4. Debugowanie. Efektywności kodu. Wektoryzacja.

Podobne dokumenty
Laboratorium MATLA. Ćwiczenie 6 i 7. Mała aplikacja z GUI

Laboratorium MATLA. Ćwiczenie 3. Programowanie. Instrukcje sterujące. Typy danych.

Laboratorium MATLA. Ćwiczenie 2. Programowanie. Skrypty i funkcje. Instrukcje sterujące.

Laboratorium MATLA. Ćwiczenie 1

1 Programowanie w matlabie - skrypty i funkcje

Wstęp do Programowania Lista 1

Laboratorium Cyfrowego Przetwarzania Obrazów

Laboratorium Cyfrowego Przetwarzania Obrazów

Laboratorium Przetwarzania Sygnałów

do MATLABa programowanie WYKŁAD Piotr Ciskowski

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Laboratorium Cyfrowego Przetwarzania Obrazów

Obliczenia iteracyjne

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku

Podstawy OpenCL część 2

Matlab Składnia + podstawy programowania

SPRZĘTOWA REALIZACJA FILTRÓW CYFROWYCH TYPU SOI

Matlab Składnia + podstawy programowania

Laboratorium Przetwarzania Sygnałów

Wykład z Technologii Informacyjnych. Piotr Mika

Badanie widma fali akustycznej

Laboratorium Przetwarzania Sygnałów. Ćwiczenie 2. Analiza widmowa

Układy i Systemy Elektromedyczne

EGZAMIN MATURALNY W ROKU SZKOLNYM 2014/2015

Układy i Systemy Elektromedyczne

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

LABORATORIUM PROCESÓW STOCHASTYCZNYCH

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

KADD Metoda najmniejszych kwadratów funkcje nieliniowe

Cw.12 JAVAScript w dokumentach HTML

Temat: Zastosowanie multimetrów cyfrowych do pomiaru podstawowych wielkości elektrycznych

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Laboratorium Przetwarzania Sygnałów

Laboratorium Cyfrowego Przetwarzania Obrazów

Oprogramowanie Systemów Obrazowania SIECI NEURONOWE

EGZAMIN MATURALNY Z MATEMATYKI CZERWIEC 2012 POZIOM PODSTAWOWY. Czas pracy: 170 minut. Liczba punktów do uzyskania: 50 WPISUJE ZDAJĄCY

CYFROWE PRZTWARZANIE SYGNAŁÓW (Zastosowanie transformacji Fouriera)

Ćwiczenie 3. Iteracja, proste metody obliczeniowe

ARKUSZ KALKULACYJNY MICROSOFT EXCEL cz.1 Formuły, funkcje, typy adresowania komórek, proste obliczenia.

Algorytm grupowania danych typu kwantyzacji wektorów

Przykładowo, jeśli współrzędna x zmienia się od 0 do 8 co 1, a współrzędna y od 12 co 2 do 25, to punkty powinny wyglądać następująco:

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

1 Wprowadzenie do algorytmiki

Temat ćwiczenia. Analiza częstotliwościowa

do instrukcja while (wyrażenie);

KLUCZ PUNKTOWANIA ODPOWIEDZI

Metody eksploracji danych Laboratorium 2. Weka + Python + regresja

Imię i nazwisko (e mail) Grupa:

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Algorytmy i struktury danych

Warsztaty dla nauczycieli

Język C zajęcia nr 7. Uwagi dotyczące stylu programowania

3 1 + i 1 i i 1 2i 2. Wyznaczyć macierze spełniające własność komutacji: [A, X] = B

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

Dokąd on zmierza? Przemieszczenie i prędkość jako wektory

Konkursy w województwie podkarpackim w roku szkolnym 2013/2014

02. WYZNACZANIE WARTOŚCI PRZYSPIESZENIA W RUCHU JEDNOSTAJNIE PRZYSPIESZONYM ORAZ PRZYSPIESZENIA ZIEMSKIEGO Z WYKORZYSTANIEM RÓWNI POCHYŁEJ

Metody systemowe i decyzyjne w informatyce

Metody numeryczne. Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski

Zapisywanie w wybranej notacji algorytmów z warunkami i iteracyjnych

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

Operacje logiczne i struktury sterujące.

7. Szybka transformata Fouriera fft

Politechnika Warszawska

PętlaforwOctave. Roman Putanowicz 13 kwietnia 2008

Projektowania Układów Elektronicznych CAD Laboratorium

LUBELSKA PRÓBA PRZED MATURĄ MATEMATYKA - poziom podstawowy

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Ćwiczenia Skopiować do swojego folderu plik cwiczenia-kl.ii.xls, a następnie zmienić jego nazwę na imię i nazwisko ucznia

Ćw. nr 31. Wahadło fizyczne o regulowanej płaszczyźnie drgań - w.2

Zad. 3: Układ równań liniowych

, h(x) = sin(2x) w przedziale [ 2π, 2π].

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

LABORATORIUM PODSTAW TELEKOMUNIKACJI

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Zad. 3: Rotacje 2D. Demonstracja przykładu problemu skończonej reprezentacji binarnej liczb

LUBELSKA PRÓBA PRZED MATURĄ 2015

Laboratorium nr 1. i 2.

Metody numeryczne Laboratorium 2

Ćw. nr 1. Wyznaczenie przyspieszenia ziemskiego za pomocą wahadła prostego

Lab 9 Podstawy Programowania

Języki programowania zasady ich tworzenia

MAJ Czas pracy: 170 minut. do uzyskania: Miejsce na naklejkę z kodem PESEL KOD. punktów. pióra z czarnym tuszem. liczby.

Instytut Politechniczny Państwowa Wyższa Szkoła Zawodowa. Diagnostyka i niezawodność robotów

CECHOWANIE TERMOELEMENTU Fe-Mo I WYZNACZANIE PUNKTU INWERSJI

FUNKCJA KWADRATOWA. Zad 1 Przedstaw funkcję kwadratową w postaci ogólnej. Postać ogólna funkcji kwadratowej to: y = ax + bx + c;(

Transkrypt:

Laboratorium MATLA Ćwiczenie 4. Debugowanie. Efektywności kodu. Wektoryzacja. Opracowali: - dr inż. Beata Leśniak-Plewińska Zakład Inżynierii Biomedycznej, Instytut Metrologii i Inżynierii Biomedycznej, Wydział Mechatroniki Politechniki Warszawskiej. Warszawa, 2017

Cel ćwiczenia Celem ćwiczenia jest nabycie przez studentów umiejętności w zakresie debuggowania kodu oraz poprawy jego efektywności poprzez wykorzystanie wektoryzacji. Referencje Andrew P. King Paul Aljabar MATLAB Programming for Biomedical Engineers and Scientists 1st Ed. Academic Press, 2017 Ćwiczenie 1 2/10

1. Przepisz poniższy kod i zapisz go w skrypcie zad41a.m. Zmodyfikuj zaznaczony ramką fragment poniższego kodu tak, aby uzyskać czas realizacji obliczeń (bez tworzenia wykresu) krótszy co najmniej o rząd wielkości. Nowy kod zapisz w skrypcie zad41b.m. N = 200; a = []; for j = 1:N a(j) = j * pi / N; end for k = 1:numel(a) b(k) = sin(a(k)); end for m = 1:numel(a) c(m) = b(m) / a(m); end plot(a,b,'r') hold on plot(a,c,'k') hold off legend('sin','sinc') Wyznacz współczynnik poprawy efektywności kodu jako stosunek czasu realizacji kodu w wersji oryginalnej do czasu realizacji kodu w wersji poprawionej. Zmodyfikowany fragment kodu, uzyskane wartości czasów realizacji obu wersji kodu oraz współczynnik poprawy efektywności kodu (stosunek czasu realizacji kodu poprawionego do czasu realizacji kodu oryginalnego) wpisz w odpowiednich rubrykach Sprawozdania. WSKAZÓWKA: W celu wyznaczenia czasu realizacji obliczeń, zależnie od sytuacji, możesz użyć funkcji timera. Zadbaj o zapewnienie odpowiednich warunków pomiaru czasu (np. w przypadku funkcji timera za wiarygodne przyjmuje się pomiary czasu realizacji kodu wynoszące min. 0.01 s). 2. Napisz skrypt realizujący następujące zadania a) Utworzenie macierzy A o rozmiarze 100 20 zawierającej losowe liczby rzeczywiste z przedziału <0, 1>. b) Utworzenie macierzy B jako kopii macierzy A. c) Zmiana wartości każdego elementu macierzy A, którego początkowa wartość była mniejsza niż 0.6 na 0 z użyciem pętli for (kod zapisz w pliku zad42abc.m). Zmodyfikuj kod zrealizowany w pp. c) tak aby zmiana wartości każdego elementu macierzy B, którego początkowa wartość była mniejsza niż 0.6 na 0 była realizowana za pomocą indeksowania logicznego (nie korzystaj z funkcji find oraz instrukcji sterujących); kod zapisz w pliku zad42log.m. Zastosuj wbudowane funkcje timera do oceny czasu realizacji kodu w pp. a,b,c) i a,b,d). Porównaj uzyskane wartości. Wyznacz współczynnik poprawy efektywności kodu jako stosunek czasu realizacji kodu w wersji oryginalnej do czasu realizacji kodu w wersji poprawionej. Obie wersje kodu oraz uzyskane wartości czasów realizacji obu wersji kodu wpisz w odpowiednich rubrykach Sprawozdania. Ćwiczenie 1 3/10

WSKAZÓWKA: W celu wyznaczenia czasu realizacji obliczeń, zależnie od sytuacji, możesz użyć funkcji timera. Zadbaj o zapewnienie odpowiednich warunków pomiaru czasu (np. w przypadku funkcji timera za wiarygodne przyjmuje się pomiary czasu realizacji kodu wynoszące min. 0.01 s). 3. Napisz funkcję MATLAB a, która będzie pobierać jeden parametr wejściowy wartość całkowitą N, i będzie zwracać macierz reprezentującą tabliczkę mnożenia dla liczb całkowitych z przedziału od 1 do N. Np. dla N=5 macierz powinna mieć postać W tym celu kolejno: 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 a) Użyj pętli for, skup się na napisaniu przejrzystego i zrozumiałego kodu, który będzie działać poprawnie; kod zapisz w pliku tabmnoz_a.m (PAMIĘTAJ, że nazwa funkcji musi być zgodna z nazwą m-pliku, w którym jest ona zapisana.). b) Napisz drugą implementacje tej funkcji, tym razem nie korzystaj z instrukcji sterujących; kod zapisz w pliku tabmnoz_b.m (PAMIĘTAJ, że nazwa funkcji musi być zgodna z nazwą m-pliku, w którym jest ona zapisana.). c) Uruchom obie implementacje dla N równego kolejno od 1 do 200 i wyznacz czasy realizacji obu implementacji dla każdej wartości N. d) Uruchom obie implementacje dla N równego kolejno od 1 do 200 i wyznacz sumaryczny czasy realizacji obu implementacji. Wyznacz współczynnik poprawy efektywności kodu jako stosunek czasu realizacji kodu uzyskany w pp. d) dal kodu w wersji oryginalnej do czasu realizacji kodu w wersji poprawionej. WSKAZÓWKA: W celu wyznaczenia czasu realizacji obliczeń, zależnie od sytuacji, możesz użyć funkcji timera czy funkcji timeit. W przypadku wykorzystania funkcji timera zadbaj o zapewnienie odpowiednich warunków pomiaru czasu (np. w przypadku funkcji timera za wiarygodne przyjmuje się pomiary czasu realizacji kodu wynoszące min. 0.01 s). Obie wersje kodu, wartości czasów uzyskanych w pp. d) oraz współczynnik poprawy efektywności kodu kodu wpisz w odpowiednich rubrykach Sprawozdania. 4. Funkcja prostokątna bipolarna o okresie T może być zdefiniowana jako: A dla t (n T, n T + τ) f A dla t (n T +τ, n T +T ) (t)={ 0 dla t=n T, n T+ τ Jeśli τ=t/2, mówimy wówczas o bipolarnej fali prostokątnej o wypełnieniu ½. Jej aproksymacja za pomocą szeregu Fouriera jest określona wzorem: S (t)= 4 A π k=0 1 2 k+1 sin ( 2 (2 k +1) π t T ) Stworzono funkcję szeregf([t1, t2], delta_t, n), która wyznacza aproksymację bipolarnej funkcji prostokątnej o wypełnieniu ½ jako skończoną sumę wyrazów szeregu Fouriera dla t z przedziału < t1, t2> i k zmieniającego się od 0 do n. Ćwiczenie 1 4/10

Następnie stworzono skrypt szereg.m. Jego zadaniem jest skorzystanie z funkcji szeregf w celu iteracyjnego wyznaczenia minimalnej liczby wyrazów szeregu Fouriera nmin niezbędnych do aproksymacji bipolarnej funkcji prostokątnej o następujących parametrach: A = 1, T = 1 wyznaczonej w przedziale czasu t = <-1,1 1,1>, dla której wartość błędu średniokwadratowego (MSE ang. Mean Square Error) nie będzie większą niż 0.02. Nawet jeśli kryterium wartości MSE nie zostanie osiągnięte, skrypt powinien przerwać swoje działanie po 100-ej iteracji. Ponadto, skrypt powinien przerwać swoje działanie wówczas gdyby miało dojść do sumowania wyrazu odpowiadającego składowej sinusoidalnej o częstotliwości niespełniającej kryterium Nyquista. Po wyznaczeniu wartości nmin skrypt tworzy animację, w której we wspólnym układzie współrzędnych nałożone będą na siebie: wykres funkcji prostokątnej w funkcji czasu oraz kolejne jej aproksymacje dla n zmieniającego się od 1 do wyznaczonej wartości minimalnej nmin. W celu realizacji obliczeń w skrypcie dodatkowo zdefiniowano dwie funkcje: prostsyg = prostokat([t1, t2], delta_t), która wyznacza wartości bipolarnej funkcji prostokątnej prostsyg o wypełnieniu ½ dla t z przedziału < t1, t2> z krokiem iteracji delta_t dla T=1 i A=1 (plik prostokat.m) mseerr = mseerror(wartosc, estymator), która wyznacza wartość błędu średniokwadratowego mseerr wartość oczekiwana kwadratu błędu czyli różnicy pomiędzy estymatorem (estymator), a wartością estymowaną (wartosc)(plik mseerror.m) określonego wzorem MSE (θ)=e((^θ θ) 2 ) gdzie ^θ - estymator, θ - wartość estymowana. Niestety kod skryptu szereg.m, w tym funkcji lokalnych, oraz kod funkcji szeregf zawierają błędy, w tym błędy uruchomieniowe, składniowe czy logiczne. Przeanalizuj kod zawarty w m-plikach szereg.m, prostokat.m, mseerror.m i szeregf.m. W skrypcie szereg.m wyodrębnij poszczególne bloki kodu odpowiedzialne za określone zadania i zaznacz je dodając odpowiednie komentarze. Następnie korzystając z analizatora kodu oraz debuggera (jeśli zachodzi taka potrzeba użyj brekpointów) usuń WSZYSTKIE zauważone błędy (w tym także stylu), a następnie uruchom skrypt. UWAGA. Nie nadpisuj kodu skryptu i funkcji. Kod skryptu i funkcji po zmianach zapisuj pod nowymi nazwami: szereg_new.m, prostokat_new.m, mseerror_new.m i szeregf_new.m. PAMIĘTAJ, że nazwa funkcji musi być zgodna z nazwą m-pliku, w którym jest ona zapisana. WSKAZÓWKA: Liczba rubryk do opisu błędów nie musi być zgodna z faktyczną liczbą błędów. WSKAZÓWKA: Fragment kodu służący do obsługi poprawności wartości wprowadzonych z klawiatury przez użytkownika za pomocą funkcji input nie zawiera błędów i służy ilustracji. WSKAZÓWKA: Dobrym obyczajem jest dodawanie w m-pliku adnotacji, które ułatwiają szybkie znajdowanie fragmentów kodu wymagającego poprawy, uzupełnienia lub zaktualizowania. Komentarz zawierający adnotację TODO jest zazwyczaj stosowany do zaznaczania tych miejsc w kodzie, które wymagają uzupełnienia. Więcej informacji na ten Ćwiczenie 1 5/10

temat znajduje się w dokumentacji MATLAB a, np. https://www.mathworks.com/help/matlab/matlab_prog/add-reminders-to-files.html czy https://blogs.mathworks.com/community/2008/03/17/whats-on-my-todo-list/. W Sprawozdaniu zanotuj wyznaczoną wartość nmin oraz wymień wszystkie zauważone błędy i podaj sposób ich naprawy. Zoptymalizuj kod funkcji szeregf_new, tak aby czas jej realizacji wyznaczony za pomocą funkcji timeit był o rząd wielkości mniejszy od czasu realizacji funkcji w pierwotnej postaci. Zoptymalizowana funkcję zapisz w pliku szeregf_opt.m. Wyznacz współczynnik poprawy efektywności kodu jako stosunek czasu realizacji kodu w wersji oryginalnej do czasu realizacji kodu w wersji poprawionej. WSKAZÓWKA. Uprość kod unikając obu pętli for. WSKAZÓWKA: W celu wyznaczenia czasu realizacji obliczeń, zależnie od sytuacji, możesz użyć funkcji timera czy funkcji timeit. W przypadku wykorzystania funkcji timera zadbaj o zapewnienie odpowiednich warunków pomiaru czasu (np. w przypadku funkcji timera za wiarygodne przyjmuje się pomiary czasu realizacji kodu wynoszące min. 0.01 s). Ćwiczenie 1 6/10

Sprawozdanie Ćwiczenie nr 1. Wektory, macierze, operatory i podstawowe funkcje. L.p. Imię i nazwisko Grupa Data Punkt cw./ L. punktów Realizacja/wynik Uwagi prowadzącego 1 / 1 zad41a.m Czas realizacji kodu zad41b.m Współczynnik poprawy efektywności kodu a). 2 / 1 b). Ćwiczenie 1 7/10

c). d) zad42abc.m Czas realizacji kodu zad42log.m Współczynnik poprawy efektywności kodu 3 / 1 a)....... b).... Ćwiczenie 1 8/10

tabmnoz_a.m Czas realizacji kodu tabmnoz_b.m Współczynnik poprawy efektywności kodu szereg.m Nr linii kodu z błędem Poprawny kod prostokat.m 4 / 2 mseerror.m szeregf.m Ćwiczenie 1 9/10

Wartość nmin Zoptymalizowany kod funkcji szeregf_new.m............................. szeregf.m Czas realizacji kodu szeregf_opt.m Współczynnik poprawy efektywności kodu Ćwiczenie 1 10/10