Wprowadzenie do środowiska MATLAB z zastosowaniami w analizie danych EEG

Podobne dokumenty
Wprowadzenie do środowiska MATLAB z zastosowaniami w modelowaniu i analizie danych

Wprowadzenie do środowiska MATLAB z zastosowaniami w modelowaniu i analizie danych

Daniel Wójcik Wprowadzenie do Matlaba

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ć

MODELOWANIE RZECZYWISTOŚCI

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Metody numeryczne Laboratorium 2

do MATLABa programowanie WYKŁAD Piotr Ciskowski

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

Układy dynamiczne Chaos deterministyczny

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej.

Ćwiczenie 1. Wprowadzenie do programu Octave

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

1 Podstawy c++ w pigułce.

Matlab, zajęcia 3. Jeszcze jeden przykład metoda eliminacji Gaussa dla macierzy 3 na 3

Programowanie w Scilab

7. Pętle for. Przykłady

PHP w-3. Sterowanie w PHP

Liczby losowe i pętla while w języku Python

Podstawy Programowania C++

Matlab Składnia + podstawy programowania

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Przetwarzanie sygnałów

Matlab III Instrukcje, interpolacja, dopasowanie krzywych,

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

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

1 Podstawy c++ w pigułce.

Ćwiczenie 3. Iteracja, proste metody obliczeniowe

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

ŚRODOWISKO MATLAB cz.3 Implementowanie algorytmów w skryptach i funkcjach programu

Ćwiczenie 1. Wprowadzenie do programu Octave

SKRYPTY. Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego

Podstawy MATLABA, cd.

4. Funkcje. Przykłady

Wstęp do Programowania Lista 1

Matlab Składnia + podstawy programowania

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Dynamiczne przetwarzanie stron. dr Beata Kuźmińska-Sołśnia

WHILE (wyrażenie) instrukcja;

1 Programowanie w matlabie - skrypty i funkcje

WHILE (wyrażenie) instrukcja;

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

Optymalizacja systemów

Podręcznik. Model czy teoria

Modelowanie Systemów Dynamicznych Studia zaoczne, Automatyka i Robotyka, rok II. Podstawy MATLABA, cz2.

Programowanie - instrukcje sterujące

Metody Numeryczne. Laboratorium 1. Wstęp do programu Matlab

Optymalizacja systemów

MATLAB Podstawowe polecenia

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

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Wykresy i interfejsy użytkownika

Zapis algorytmów: schematy blokowe i pseudokod 1

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

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

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:

PHP: bloki kodu, tablice, obiekty i formularze

Scilab skrypty (programowanie)

Laboratorium Komputerowego Wspomagania Analizy i Projektowania

Wstęp do informatyki Ćwiczenia. Piotr Fulmański

MATLAB wprowadzenie śycie jest zbyt krótkie, aby tracić czas na pisanie pętli!

PRZYKŁADOWE SKRYPTY (PROGRAMY W MATLABIE Z ROZSZERZENIEM.m): 1) OBLICZANIE WYRAŻEŃ 1:

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

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

Język C część 2. Podejmowanie decyzji w programie. if else. switch

Przykład 1 -->s="hello World!" s = Hello World! -->disp(s) Hello World!

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Elementy Projektowania Inżynierskiego MATLAB Wprowadzenie.

Operacje logiczne i struktury sterujące.

Programowanie w języku Python. Grażyna Koba

Program szkoleniowy. 24 h dydaktycznych (18 h zegarowych) NAZWA SZCZEGÓŁY CZAS

Modelowanie rynków finansowych z wykorzystaniem pakietu R

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

Cw.12 JAVAScript w dokumentach HTML

Konstrukcje warunkowe Pętle

PODSTAWY INFORMATYKI 1 MATLAB CZ. 3

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie - wykład 4

Maxima i Visual Basic w Excelu

Podstawy programowania skrót z wykładów:

Wstęp do programowania. Różne różności

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

LibreOffice Calc VBA

Definicje wyższego poziomu

Algorytmy i struktury danych

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Bloki anonimowe w PL/SQL

Metody i analiza danych

do instrukcja while (wyrażenie);

Matlab MATrix LABoratory Mathworks Inc.

Języki skryptowe w programie Plans

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych


znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Warunki logiczne instrukcja if

Transkrypt:

Wprowadzenie do środowiska MATLAB z zastosowaniami w analizie danych EEG Daniel Wójcik Instytut Biologii Doświadczalnej PAN d.wojcik@nencki.gov.pl tel. 022 5892 424 http://www.neuroinf.pl/members/danek/swps/matlab_html

Programowanie Sterowanie programem Skrypty i funkcje

M-pliki mfile1.m Jeżeli wykonujemy skomplikowane zadanie, wymagające użycia wielu kom, wygodnie jest wpisać wszystkie komy do pliku, zwanego M- plikiem. Tworzymy w edytorze plik mfile1.m i wpisujemy zawartość prawej kolumny, a następnie po nagraniu pliku w linii kom piszemy mfile1 lub klikamy F9 w edytorze z = peaks; zplot = z; % Do the peaks: clf subplot(221) ind = find(z<0); zplot(ind) = zeros(size(ind)); mesh(zplot) axis tight % Do the valleys: subplot(222) ind = find(z>0); zplot = z; zplot(ind) = zeros(size(ind)); mesh(zplot) axis tight

M-pliki Linie zaczynające się od znaku % są komentarzami i są ignorowane. Zmienne utworzone danym skryptem pozostają w przestrzeni roboczej Matlaba: >> clear >> whos >> mfile1 >> whos Skrypty mogą też operować na zmiennych w przestrzeni roboczej Matlaba. Skrypty mogą uruchamiać inne skrypty Name ind z zplot Size Bytes Class 1544x1 12352 double array 49x49 19208 double array 49x49 19208 double array

Funkcje function x = kwadratowe(a,b,c) Funkcje to m-pliki, % KWADRATOWE Znajduje pierwiastki których można użyć do % rownania kwadratowego. rozszerzania języka % Matlaba. Mogą % X = KWADRATOWE(A,B,C) zwraca oba przyjmować argumenty % pierwiastki rownania kwadratowego wejściowe i wyjściowe. % y = A*x^2 + B*x + C. % Pierwiastki sa zwracane w macierzy % X = [X1 X2]. Wiele funkcji Matlaba jest implementowanych jako m-pliki. Napisz: type mean Funkcje używają zmiennych lokalnych, które nie pojawiają się w głównej przestrzeni roboczej Matlaba Plik kwadratowe.m % na podstawie skryptu A. Knighta, % kwiecien 2007 delta = 4*a*c; mian = 2*a; pierwyz = sqrt(b.^2 delta); % Pierwiastek wyznacznika x1 = ( b + pierwyz)./mian; x2 = ( b pierwyz)./mian; x = [x1 x2];

Funkcje m-pliki funkcji mają format function [output] = function_name(input) np. function x = kwadratowe(a,b,c) przykłady składni: function [xx,yy,zz] = kula(n) function fajnywykres function a = listy(x,y,z,t) Nazwa funkcji powinna być taka sama jak nazwa pliku, w którym jest zdefiniowana. Komentarze po słowie function są wyświetlane komą help. Np. help kwadratowe Komentarze i puste linie mogą pojawiać się gdziekolwiek w pliku.

Kontrola wykonania MATLAB ma 4 rodzaje wyrażeń służące do kontroli wykonania: if, else, elseif switch, case, otherwise while, for, wykonaj wyrażenia w oparciu o wynik testu logicznego wykonaj grupę wyrażeń w oparciu o wynik testu logicznego wykonaj wyrażenia nieokreśloną liczbę razy w oparciu o wynik testu logicznego wykonaj wyrażenia określoną liczbę razy

if, else, elseif Podstawowa forma wyrażenia if to: if test statements test jest wyrażeniem, które przyjmuje wartości albo 1 (prawda) albo 0 (fałsz). Wyrażenia pomiędzy wyrażeniami if oraz są wykonywane, jeżeli test jest prawdą. Jeżeli test jest fałszem, wyrażenia te będą zignorowane i program będzie wykonywany od pierwszej linijki następującej po wyrażeniu. Wyrażenie test może być wektorem albo macierzą. W tym wypadku wszystkie elementy muszą wynosić 1, żeby wyrażenia zostały wykonane. Dalsze testy można przeprowadzić korzystając z else, elseif if test statements1 elseif test2 statements2 else statements3

switch Podstawowa forma wyrażenia switch: switch test case result1 statements case result2 statements... otherwise statements Odpowiednie wyrażenia są wykonywane, jeżeli test jest równy odpowiedniemu wynikowi. Jeżeli żaden z podanych wyników nie ma miejsca, wykonywane są wyrażenia podane po otherwise. Jeżeli te same wyrażenia mają być wykonywane dla różnych wyników, należy użyć nawiasów klamrowych: switch x case 1 disp('x is 1') case {2,3,4} disp('x is 2, 3 or 4') case 5 disp('x is 5') otherwise disp('x is not 1, 2,... 3, 4 or 5')

Podstawowa forma pętli while: while test statements pętla while Wyrażenia są wykonywane wielokrotnie dopóki wartość testu wynosi 1. Na przykład żeby znaleźć pierwszą liczbę dla której 1+2+ +n jest większe od 1000 możemy napisać: n = 1; while sum(1:n)<=1000 n = n+1; Szybkim sposobem na wykomentowanie fragmentu kodu jest otoczenie go komami while 0 i. Tak otoczony fragment nigdy nie będzie wykonany.

clf; colormap(gray) plotnum = 1; z = peaks(20); for az = 0:10:350 subplot(6,6,plotnum) surfl(z),shading flat view(az,30) axis tight axis off plotnum = plotnum + 1; pętla for Podstawowa forma pętli for: for index = start:przyrost:stop statements Przyrost można ominąć, wtedy przyjmuje się 1. Przyrost może być dodatni lub ujemny. Przy pierwszym przebiegu przez pętlę indeks będzie miał wartość start. W każdym kolejnm przebiegu indeks będzie miał wartość zwiększoną o przyrost dopóki nie przekroczy wartości stop. Ten przykład generuje widoki funkcji peaks z różnych kątów:

pętla for Indeks pętli for może być wektorem albo macierzą. Jeżeli jest wektorem, pętla będzie wykonana tyle razy ile jest elementów w wektorze, przy czym w kolejnych przebiegach indeks przyjmuje kolejne wartości wektora. Jeżeli indeks jest macierzą pętla zostanie wykonana tyle razy ile jest kolumn macierzy, przy czym wartości indeksu w kolejnych przebiegach będą równe kolumnom macierzy. Na przykład: >> q = pascal(3) q= 1 1 1 1 2 3 1 3 6 >> for i = q,i, i= 1 1 1 i = 1 2 3 i = 1 3 6

Przykład: generacja filmu film 1: ewolucja rozkładu prawdopodobieństwa film 2: Obracający się wykres funkcji peaks

bias = 0.75; dane=rand(1,700); dane(find(dane < bias))= 0; dane(find(dane > 0))=1; n=length(dane); H = 0:0.01:1; E = exp(( (H 0.5).^2)/(0.1.^2)); aviobj = avifile('mymovie75.avi','fps',15); Film 1: i=0; while i < n if i < 50 i = i+1; else i=i+10; tencyjność monety w ujęciu bayesowskim r=length(find(dane(1:i) == 0)); wykres1 = (H.^r).*(1 H).^(i r); wykres2 = (H.^r).*(1 H).^(i r).*e; plot(h, wykres1 / max(wykres1)); hold on; plot(h, wykres2/ max(wykres2), 'r'); hold off; frame = getframe(gcf); aviobj = addframe(aviobj,frame); aviobj = close(aviobj);

clf; colormap(gray) plotnum = 1; z = peaks(20); aviobj = avifile('peaks.avi','fps',15); Film 2: Obracający się wykres funkcji peaks for az = 0:1:359 surfl(z),shading flat %interp view(az,30) axis tight axis off frame = getframe(gcf); aviobj = addframe(aviobj,frame); aviobj = close(aviobj);

Automaty komórkowe Ewolucja identycznych elementów: jak proste reguły prowadzą do złożonych zachowań

Rozważmy 1D automat komórkowy: Mamy świat składający się z L kolejnych komórek. Każda komórka (o numerze n) przyjmuje jeden z dwóch stanów, 0 lub 1. Wszystkie komórki zmieniają stan jednocześnie. Stan przyszły (w chwili t+1) komórki n zależy od stanu obecnego (w chwili t) tej komórki oraz jej dwóch sąsiadów: n-1 oraz n+1. Przyjmujemy okresowe warunki brzegowe, czyli komórka o numerze L jest lewym sąsiadem komórki o numerze 0.

Przykład reguła 30 128 64 32 16 8 4 2 1

Kodowanie reguły Każdemu układowi stanów komórki n i jej sąsiadów n+1 i n-1 w chwili t przypisujemy liczbę jak na rysunku obok Kodem reguły jest suma liczb kodujących te trójki stanów, po których w chwili t+1 stan komórki n ma być 1 reguła 30 128 64 32 16 8 4 2 1 0 0 0 1 1 1 1 0 kod reguły = 16+8+4+2 = 30

Przygotowanie Zacznijmy od stworzenia nowego skryptu: edit automaty

Tworzymy świat Nasz świat ma długość L, możemy więc myśleć o nim jako o wektorze. Ewolucja dodaje wymiar czasowy: w każdej chwili t mamy nowy stan układu. Możemy myśleć o tym jako o wielu wektorach, albo jako o 2D macierzy, w której jest jeden wymiar przestrzenny i jeden czasowy: universe = zeros(nr_of_cells+2,max_time); Dlaczego +2? Komórki o numerach 1 i L+2 pomogą nam poradzić sobie z warunkami brzegowymi.

Stan początkowy Wybierzmy losowy stan początkowy. universe(2:nr_of_cells+1,1) =... floor(2*rand(nr_of_cells,1)); Co robi ta koma? A ten trick? universe(1+find(rand(nr_of_cells,1)<0.3),... 1) = 1;

imagesc(universe) Program testowy nr_of_cells = 50; max_time = 100; prob = 0.9; universe = zeros(nr_of_cells+2,max_time); universe(2:nr_of_cells+1,1) =... floor(2*rand(nr_of_cells,1)); for time=2:max_time universe(1+find(rand(nr_of_cells,1)<prob),... time) = 1;

Jeżeli wiemy już jak działa ten program testowy, wróćmy do wersji nam potrzebnej: nr_of_cells = 50; max_time = 100; universe = zeros(nr_of_cells+2,max_time); universe(2:nr_of_cells+1,1) =... floor(2*rand(nr_of_cells,1)); for time=2:max_time % tu musimy wstawić reguły ewolucji imagesc(universe)

Musimy teraz zaprogramować ewolucję. Jest wiele sposobów. Oto jeden z prostszych: for n=2:nr_of_cells+1 if (universe(n-1,time-1) == 0 &... universe(n,time-1) == 0 &... universe(n+1,time-1) == 0 ) universe(n,time) = 0; if (universe(n-1,time-1) == 0 &... universe(n,time-1) == 0 &... universe(n+1,time-1) == 1 ) universe(n,time) = 1; %... % w sumie osiem, prawda?

O mało co nie zapomnieliśmy o warunkach brzegowych! for time=2:max_time % warunki brzegowe universe(1,time-1) =... universe(nr_of_cells+1,time-1); universe(nr_of_cells+2,time-1) =... universe(2,time-1); for n=2:nr_of_cells+1 %...

Mamy teraz uniwersalny symulator 1D automatów komórkowych. Możemy zmieniać: Rozmiar układu, Regułę ewolucji (jest ich 256) Stan początkowy, itd.

Przykładowe pomysły na eksperymenty Czy każda reguła zachowuje się tak samo? Opisz jakościowo zachowanie się różnych reguł, na przykład porównaj reguły 36, 38, 40 i 52. Czy wyniki są jakościowo podobne? Ile jest różnych stanów końcowych (cykli)? Jak długie są cykle? Jak zmieniają się te parametry, kiedy rośnie długość sieci? Automaty wielostanowe: - Modele ośrodków aktywnych (excitable media?) spirale - Modele dyfuzji Automaty w 2 i 3 wymiarach, np. life.

Ogólny automat komórkowy jednowymiarowy

function nextstep = rule(rulenumber,a1,a2,a3) bit = 4*a1+2*a2+a3; bits = dec2bin(rulenumber,8); nextstep = eval(bits(8 bit)); function A = ca(rule_nr,lat_length,time) A = zeros(time,lat_length); A(1,(lat_length+1)/2) = 1; for i = 1:(time 1) A(i+1,1) = rule(rule_nr,a(i,lat_length),a(i,1),a(i,2)); A(i+1,lat_length) = rule(rule_nr,a(i,lat_length 1),... A(i,lat_length),A(i,1)); for j = 2:(lat_length 1) A(i+1,j) = rule(rule_nr,a(i,j 1),A(i,j),A(i,j+1)); A = ca(30,101,200); colormap(gray); imagesc(1 A)

Prosta implementacja Life function A = ca2(lat_length, time, prob, init_type) % A naive implementation of "Life" %initial state A = zeros(time,lat_length,lat_length); if (init_type == 1) A(1,:,:)=(rand(lat_length,lat_length) < prob); elseif (init_type == 2) mid=floor((lat_length+1)/2); A(1, mid, mid ) = 1; A(1, mid, mid 1) = 1; A(1, mid+1, mid ) = 1; A(1, mid 1, mid ) = 1; A(1, mid+1, mid+1) = 1; A(1, mid 1, mid+1) = 1;

for i = 1:(time 1) % I do not touch the borders to keep % Dirichlet boundary conditions for j = 2:lat_length 1 for k = 2:lat_length 1 nbhd = squeeze(a(i,j 1:j+1,k 1:k+1)); howmanynbs = sum(sum(nbhd)); if (nbhd(2,2) == 0) % dead cell if (howmanynbs == 3) A(i+1, j, k) = 1; else A(i+1, j, k) = 0; else % alive cell, counted in howmanynbs if ((howmanynbs < 3) (howmanynbs >4)) A(i+1, j, k) = 0; else A(i+1, j, k) = 1;

% mylife lat_length = 31; time=100; prob=0.1; init_state = 2; B=ca2(lat_length,time,prob,init_state); Sterownik do ca2 clf; colormap(gray) %aviobj = avifile('my_life.avi','fps',10); for frm=1:time imagesc(1 squeeze(b(frm,:,:))) %frame = getframe(gcf); %aviobj = addframe(aviobj,frame); %aviobj = close(aviobj);

Ćwiczenia z mylife Zmień program mylife tak, żeby obrazek był wyświetlany po wyliczeniu każdej iteracji. W tym celu napisz funkcję ca2step, która będzie wyliczała stan układu w t+1 na podstawie stanu układu w t. Zmień warunki brzegowe na okresowe w przestrzeni.

Państwa zadaniem będzie teraz: Poeksperymentować z programem tak, żeby wszystkie jego elementy były dla Państwa zrozumiałe Napisać sprawozdanie z eksperymentów. Sprawozdanie powinno zawierać: - Przedstawienie problemu - Kod programu z opisem, co on robi - Opis przeprowadzonych eksperymentów z rysunkami przedstawiającymi wyniki - Podsumowanie zawierające wnioski z przeprowadzonych symulacji

exmedia.m a program to evolve a wave in excitable media