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



Podobne dokumenty
Tomasz Mostowski 12.marca Gauss, zajęcia 3.

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

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Elementy metod numerycznych - zajęcia 9

do MATLABa programowanie WYKŁAD Piotr Ciskowski

Metody numeryczne Laboratorium 2

Podstawy Programowania C++

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

( x) Równanie regresji liniowej ma postać. By obliczyć współczynniki a i b należy posłużyć się następującymi wzorami 1 : Gdzie:

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:

2. Układy równań liniowych

MATLAB - laboratorium nr 1 wektory i macierze

Pętle. Dodał Administrator niedziela, 14 marzec :27

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

Ćwiczenie 1. Wprowadzenie do programu Octave

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

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

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

Ćwiczenie 3: Wprowadzenie do programu Matlab

7. Pętle for. Przykłady

Wprowadzenie do środowiska

Pakiety Matematyczne - R Zestaw 2.

1 Macierz odwrotna metoda operacji elementarnych

Pozyskiwanie wiedzy z danych

Ekonometria. Modele regresji wielorakiej - dobór zmiennych, szacowanie. Paweł Cibis pawel@cibis.pl. 1 kwietnia 2007

1. Indeksy/indeksowanie : Do elementów wektora, list, macierzy czy ramek, można się odwołać na kilka sposobów.

3. Macierze i Układy Równań Liniowych

Programowanie - wykład 4

Ćwiczenie 1. Wprowadzenie do programu Octave

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Laboratorium nr 1. i 2.

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

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Wprowadzenie do programu Mathcad 15 cz. 1

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

Ćwiczenie 3. Iteracja, proste metody obliczeniowe

Lista 6. Kamil Matuszewski 13 kwietnia D n =

[WYSYŁANIE MAILI Z PROGRAMU EXCEL]

I. Podstawy języka C powtórka

Metody i analiza danych

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

1 Podstawy c++ w pigułce.

Pętle iteracyjne i decyzyjne

1 Programowanie w matlabie - skrypty i funkcje

Cw.12 JAVAScript w dokumentach HTML

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski

lekcja 8a Gry komputerowe MasterMind

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

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

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

Przetwarzanie sygnałów

Obliczenia w programie MATLAB

Elementy projektowania inzynierskiego Przypomnienie systemu Mathcad

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wykresy i interfejsy użytkownika

Zanim zaczniemy GNU Octave

EXCEL Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Wstęp do Programowania Lista 1

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ć

Matlab, zajęcia 2. Dwukropek. Tomasz Mostowski 28.luty 2008

MATLAB tworzenie własnych funkcji

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

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Macierze. Rozdział Działania na macierzach

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Język C, instrukcje sterujące (laboratorium)

Ćwiczenie 3. MatLab: Algebra liniowa. Rozwiązywanie układów liniowych

Algorytm grupowania danych typu kwantyzacji wektorów

Stanisław Cichocki Natalia Nehrebecka. Zajęcia 11-12

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

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

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

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Podstawowe operacje na macierzach

Mikroekonometria 5. Mikołaj Czajkowski Wiktor Budziński

04 Układy równań i rozkłady macierzy - Ćwiczenia. Przykład 1 A =

2. Wprowadzenie do oprogramowania gretl. Podstawowe operacje na danych.

Laboratorium z Podstaw Programowania Zajęcia 1

INFORMATYKA W SELEKCJI

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

MATLAB Podstawowe polecenia

Wstęp do Informatyki dla bioinformatyków

MATLAB Z3. Rafał Woźniak. Warsaw, Faculty of Economic Sciences, University of Warsaw

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

II WYKŁAD STATYSTYKA. 12/03/2014 B8 sala 0.10B Godz. 15:15

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

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Treść wykładu. Układy równań i ich macierze. Rząd macierzy. Twierdzenie Kroneckera-Capellego.

Warsztat: Randomizacja w programie Excel

Wprowadzenie do analizy dyskryminacyjnej

III TUTORIAL Z METOD OBLICZENIOWYCH

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

Instrukcje sterujące. Programowanie Proceduralne 1

Inteligentna analiza danych

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

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

Laboratorium Cel ćwiczenia Ćwiczenie ma na celu praktyczne przedstawienie grafiki 3D.

Transkrypt:

Matlab, zajęcia 3. Pętle c.d. Przypomnijmy sobie jak działa pętla for Możemy podać normalnie w Matlabie t=cputime; for i=1:20 v(i)=i; e=cputime-t UWAGA: Taka operacja jest bardzo czasochłonna i nieoptymalna w Matlabie. W każdym kroku pętli zmienia się wielkość wektora v. Tutaj służy wyłącznie do zaprezentowania możliwości pętli. Jeśli znamy długość wektora już przed operacją lepiej jest zrobić clear v t=cputime; v=zeros(1,20); for i=1:20 v(i)=i; e=cputime-t Zajmuje to zdecydowanie mniej czasu. Między innymi do tego służą macierze specjalne (zeros, eye, ones). Proszę wykonać takie ćwiczenie dla macierzy o długości 500. Jeszcze jeden przykład metoda eliminacji Gaussa dla macierzy 3 na 3 B=[1 2 3; 4 10 12; 13 1 5] %eliminacja w pierwszej kolumnie for j=2:3; B(j,:)=B(j,:)-B(1,:)*B(j,1)/B(1,1); %eliminacja w drugiej kolumnie B(3,:)=B(3,:)-B(2,:)*B(3,2)/B(2,2); B Pętla While Pętla while jest wykonywana tak długo jak spełniony jest jakiś warunek. Jest ona przydatna szczególnie wtedy, kiedy nie wiemy jak długo będziemy wykonywać jakąś pętle. Popatrzmy na przykład obliczeniowy 1

Mamy macierz 1 1 1 1 e 0 0 0 A = 0 e 0 0 0 0 e 0 0 0 0 e Jeśli e=0, to macierz ma liniowo zależne kolumny i wtedy A A jest macierzą osobliwą. Jeśli e jest różne od zera macierz A A jest odwracalna, gdyż A ma liniowo niezależne kolumny. Przy obliczeniach numerycznych komputer dla małych e będzie zaokrąglał obliczenia tak mocno, że A A okaże się macierzą osobliwą. Pytanie: dla jak małego e da się jeszcze obliczyć inv(a A)? Odp. Pętelka while eps=1; while eps>1e-20 A=[ones(1,4);eps*eye(4)]; %stworzenie macierzy A poprzez połączenie dwóch eps %pokaż gdzie jesteśmy? d=det(a'*a) %Wypisz wyznacznik. czy jest różny od zera? eps=eps/10; %zmniejsz eps Można przejrzeć wyniki iż zobaczymy, że dla eps=1.0000e-008 wyznacznik już jest równy zero. Można jeszcze sprytniej. eps=1; while eps>1e-20 A=[ones(1,4);eps*eye(4)]; %stworzenie macierzy A poprzez połączenie dwóch eps; %pokaż gdzie jesteśmy? d=det(a'*a); %Wypisz wyznacznik. czy jest różny od zera? if d==0, break, eps=eps/10; %zmniejsz eps eps Proszę szczególnie zwrócić uwagę na linie (if d==0, break, ). Używamy tu opcji break, która kończy wykonanie pętli while. Tak samo opcją break można kończyć pętle for. W przypadku zagnieżdżonych pętli (pętli w pętli) break kończy tylko swoją pętle. switch-case-otherwise Jeżeli w zależności od wartości przyjmowanych przez jakąś zmienną program ma wykonać różne czynności można użyć opcji switch-case-otherwise 2

x=5; switch x case 4 a=2*x; case 5 a=3*x; case 6 a=0; otherwise a=1; a Jeśli chcemy wykonać w kilku przypadkach jakąś czynność x=6; switch x case {1,2,5} a=3*x; case {6,4} a=0; otherwise a=1; a Wczytywanie danych W pracy ekonomisty zazwyczaj korzystamy z zewnętrznych zbiorów danych. Popatrzmy jak można wczytać dane z plików excela. num1 = xlsread('eur.xls') Albo całą ścieżkę danych num = xlsread('c:\dane\eur.xls'); Matlab wczytuje dane ignorując pierwszy wiersz. Jeżeli chcemy dotrzeć do jakichś konkretnych informacji możemy po prostu wyciąć odpowiednią kolumnę close=num(:,4); Możemy wczytać też tylko jakiś zakres danych num = xlsread('eur.xls', 'C2:C100') Notacja jest taka jak w Excelu. 3

W ten łatwy sposób możemy wczytać dane liczbowe. Matlab ignoruje jednak dane tekstowe i nie interpretuje polskiej daty z Excela. Bardzo często potrzebujemy jednak datę. Jak ją wczytać? Należy otworzyć Excela i zmienić format daty na liczbowy. Następnie wczytać dane do Matlaba. Np. data = xlsread('eur.xls', 'B:B'); Kolejnym problemem jest inna interpretacja daty w Excelu i w Matlabie. Excel numeruje datę od 1.stycznia 1900, natomiast Matlab od 1.stycznia 0000. datestr(data(1)) Data jest wyświetlona jako 1.stycznia 0099. Aby data była poprawnie wyświetlana należy dodać datę. data=data+datenum('30dec1899'); Sprawdźmy datestr(data(1)) Teraz jest ok. Wczytywanie danych w formacie.csv Dane np. z portalu bossa.pl są zazwyczaj w formacie tekstowym oddzielonym przecinkiem, czyli formatem CSV. Matlab ma funkcję csvread, ale wczytuje ona tylko dane numeryczne. M = csvread('wig20.txt'); %błędne Musimy podać numer wiersza i numer kolumny od której Matlab ma zacząć (W CSV numeruje od zera). M = csvread('wig20.txt',1,1); Jak zwykle mamy problem z datą. data=m(:,1); datestr(data(1)) Nie wygląda to dobrze. Żeby wczytać datę trzeba się trochę namęczyć np. Najpierw zmieńmy liczbę na datę 4

datastr=num2str(data); rok=datastr(:,1:4); mies=datastr(:,5:6); dzien=datastr(:,7:8); Żeby zmienić teraz w format daty można np. tak sfdata=[mies(1,1:2),'/',dzien(1,1:2),'/',rok(1,1:4)] datestr(sfdata) Teraz jest odpowiednio. Jednym z zadań dzisiaj dla Państwa jest napisanie funkcji, która wczytuje odpowiednio dane z zadanego formatu. Można też inaczej dataok=datenum(num2str(data),'yyyymmdd'); %zmiana danych na format tekstowy, zmiana na numeryczny używając zadanego formatu. datestr(dataok(1)) Podstawy statystyki w Matlabie W Matlabie mamy wbudowaną większość podstawowych statystyk Popatrzmy na kilka podstawowych dotyczących np. zmiennej close close=m(2:,5); /*opóźniona zmienna close*/ dclose=m(1:-1,5); /*stopa zwrotu, jako różnica logarytmów*/ zwrot=log(close)-log(dclose); %średnia mean(zwrot) %wariancja var(zwrot) Dla zmiennej volume volume=m(:,6); 5

Odchylenie standardowe std(volume) %skośność skewness(volume) %kurtoza kurtosis(volume) skew = kurt = N 3 ( i ) / i= 1 3 x x N ˆ σ N 4 ( i ) / i= 1 4 x x N ˆ σ skewness(zwrot) %kurtoza kurtosis(zwrot) O ile wiem wydziałowa wersja Matlaba nie ma Toolboxa zawierającego komy takie jak quantile czyli kwantyl. Jak wiemy kwantyl rzędu p zmiennej losowej X to taka liczba k, że P(X<k)=p Np. median to kwantyl rzędu 0.5, czyli taka liczba med., że P(X<med)=0.5 Nie znając rozkładu możemy estymować kwantyle używając kwantyli empirycznych. Policzymy kwantyle dla dziennych stóp zwrotu. Dzienne stopy zwrotu obliczymy jako różnicę logarytmów pomiędzy dwoma dniami. Na początek kilka prostych obliczeń. [n m]=size(close) %stworzenie zmiennej dlclose=zeros(n,1); %uzupełnienie jej liczbami for i=2:n dlclose(i)=log(close(i))-log(close(i-1)); Żeby obliczyć kwantyle empiryczne najłatwiej jest najpierw posortować dane sr=sort(dlclose); q25=sr(floor((n-1)/4)) 6

%Wartość znajdującą się w ¼ obserwacji %3 kwartyl q75=sr(floor(3*(n-1)/4)) Widzimy, że odległość między kwartylowa wynosi [-0.0099; 0.0105]. 7

Zadania Zadanie 1. Na podstawie kodu poznanego na zajęciach proszę napisać funkcję robiącą eliminację Gaussa dla dowolnej macierzy kwadratowej (o dowolnych wymiarach). Zadanie 2. Napisać jeszcze jeden kod badający dla jak małego e macierz A A nie jest odwracalna. Użyj opcji while, ale uzależnij jej wykonywanie od wartości inv(a A), a nie od e. 1 1 1 1 e 0 0 0 A = 0 e 0 0 0 0 e 0 0 0 0 e Zadanie 3. Wczytać dane z pliku bos.xls do Matlaba i stworzyć wektor danych kursu zamknięcia. Zadanie 4. Napisać funkcję wczytującą do Matlaba dane z pliku csv. Zadanie 4a. Wczytać dane z pliku TUP.txt Zadanie 5. Jeśli nie ma na wydziałowej licencji nie ma statystyk obliczających skośność i kurtozę to stwórz funkcję obliczające je. Ogólny raczej nie działający kod h1=sum((ones(n,1)* mean(zmienna)-zmienna)^4)/n/std(zmienna)^4; Zadanie 6. Napisz funkcję obliczającą kwantyl dowolnego rzędu. Niech argumentami funkcji będzie zmienna i rząd kwantyla. Zadanie 7. Z pliku TUP.txt obliczyć dzienną stopę zwrotu (jako różnicę logaytmów kursu zamknięcia) i obliczyć jej średnią, wariancję, kurtozę, skośność, medianę, kwantyle rzędu 0.05, 0.1, 0.15, 0.25, 0.75, 0.85, 0.9, 0.95 8