Gauss, zajęcia 2. Dwukropek i kropka. Tomasz Mostowski 03.marca 2008

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

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

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

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

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

Wstęp do Programowania Lista 1

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

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Podstawy Programowania C++

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

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

Podstawy i języki programowania

Instrukcja warunkowa i złoŝona.

Matlab Składnia + podstawy programowania

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

4. Funkcje. Przykłady

Ćwiczenie 1. Wprowadzenie do programu Octave

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Algebra macierzy

3. Instrukcje warunkowe

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

1 Macierze i wyznaczniki

WEKTORY I MACIERZE. Strona 1 z 11. Lekcja 7.

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Elementy metod numerycznych - zajęcia 9

Laboratorium Komputerowego Wspomagania Analizy i Projektowania

a 11 a a 1n a 21 a a 2n... a m1 a m2... a mn x 1 x 2... x m ...

Laboratorium nr 1. i 2.

Algorytmy i struktury danych

Przetwarzanie sygnałów

Układy równań liniowych. Krzysztof Patan

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

Algorytmika i Programowanie VBA 1 - podstawy

Metody i analiza danych

Układy równań liniowych

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym

Matlab Składnia + podstawy programowania

dr Mariusz Grządziel 15,29 kwietnia 2014 Przestrzeń R k R k = R R... R k razy Elementy R k wektory;

MATEMATYKA I SEMESTR ALK (PwZ) 1. Sumy i sumy podwójne : Σ i ΣΣ

Programowanie - wykład 4

Konstrukcje warunkowe Pętle

Ćwiczenie 1. Wprowadzenie do programu Octave

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

Własności wyznacznika

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

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

Macierzowe algorytmy równoległe

Metody numeryczne Laboratorium 2

RACHUNEK MACIERZOWY. METODY OBLICZENIOWE Budownictwo, studia I stopnia, semestr 6. Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska

Cw.12 JAVAScript w dokumentach HTML

Definicje wyższego poziomu

2. Układy równań liniowych

Macierze. Rozdział Działania na macierzach

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

PODSTAWY AUTOMATYKI. MATLAB - komputerowe środowisko obliczeń naukowoinżynierskich - podstawowe operacje na liczbach i macierzach.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

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ć

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

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

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

5. Rozwiązywanie układów równań liniowych

PętlaforwOctave. Roman Putanowicz 13 kwietnia 2008

1 Macierz odwrotna metoda operacji elementarnych

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

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

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

A A A A A A A A A n n

Krótkie wprowadzenie do macierzy i wyznaczników

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

Testowanie i walidacja oprogramowania

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

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

Obliczenia w programie MATLAB

WHILE (wyrażenie) instrukcja;

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS

III TUTORIAL Z METOD OBLICZENIOWYCH

W jakim celu to robimy? Tablica Karnaugh. Minimalizacja

det[a 1,..., A i,..., A j,..., A n ] + det[a 1,..., ka j,..., A j,..., A n ] Dowód Udowodniliśmy, że: det[a 1,..., A i + ka j,..., A j,...

MATLAB - laboratorium nr 1 wektory i macierze

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS

Wykład 14. Elementy algebry macierzy

Zaawansowane metody numeryczne

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

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


Algebra liniowa z geometrią

1 Podstawy c++ w pigułce.

Wprowadzenie do Scilab: macierze

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

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

MATLAB tworzenie własnych funkcji

Podstawy programowania w języku C

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

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

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

Podstawowe operacje na macierzach

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

Przykłady zdań w matematyce. Jeśli a 2 + b 2 = c 2, to trójkąt o bokach długości a, b, c jest prostokątny (a, b, c oznaczają dane liczby dodatnie),

Kiedy i czy konieczne?

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

Transkrypt:

Gauss, zajęcia 2. Dwukropek i kropka Wybierając kawałek macierzy z jakiejś zadanej większej można posłużyć się kropką i dwukrokpiem. Kropka oznacza wszystko. Dwukropek oznacza obszar od-do. Popatrzmy na przykład A={1 2 3, 4 5 6, 7 8 9, 10 11 12}; print A; g=a[.,1:2]; print g; /*wszystkie wiersze i dwie pierwsze kolumny*/ g2=a[2,1:3]; print g2; /*Drugi wiersz i kolumny 1 do 3*/ g3=a[1:3,2:3]; print g3; Jeśli chcemy bardziej nietypowo możemy posłużyć się funkcją submat(x,r,c) r={1,3}; submat(a,r,2); /*macierz złożona z 2. kolumny oraz wierszy 1 i 3*/ r2={1,3,4}; c={1,3}; submat(a,r2,c); Możemy też definiować sekwencję a14 = seqa(1,1,3); /*Wektor o elementach od 1 do 3*/ print a14; a24=seqa(1,3,13); /*wektor o wyrazie początkowym 1, kroku 3 i długości 13*/ print a24; Krok możemy zrobić też ujemny a34=seqa(20,-0.5,30); print a34; Możemy wykorzystywać to do wstawiania danych w macierzach b=zeros(5,5); b[.,2]=seqa(1,1,5); b; /*Jeśli chcemy wstawić w wierszu, to*/ 1

b[3,.]=seqa(6,3,5)'; b; Można też sekwencje mnożenia seqm(1,4,5); b[.,4]=seqm(2,2,5); b; Z macierzy możemy też wycinać odpowiednie wiersze i kolumny poprzez opcję reshape c=reshape(b,4,4); c; /*macierz złożona z pierwszych czterech wierszy i czterech kolumn*/ /*Może dać też inny wynik*/ sek = {1 2 3 4,5 6 7 8}; sek_n = reshape(sek, 10, 4);/*Zwielokrotnienie macierzy sek w macierzy sek_n*/ sek_n; /*Przy czym nie musi być taka sama liczba kolumn*/ sek_n2 = reshape(sek, 10, 5); sek_n2; Jeżeli z macierzy chcemy usunąć jakiś konkretny wiersz bądź kolumnę, możemy użyć funkcji delif i selif. Jest to usuwanie warunkowe. Delif usuwa wiersze, gdzie warunek jest spełniony, a selif usuwa te gdzie warunek jest niespełniony. Jeśli chcemy dla wierszy musimy przetransponować macierz. /*chcemy usunąć z macierzy sek_n 4 wiersz*/ l=zeros(1,10); /*wektor zer*/ l[4]=1; /*zastąpienie czwartego elementu liczbą 1*/ delif(sek_n,l'); /*skorzystanie z funkcji delif*/ /*Można wynik przypisac*/ m=delif(sek_n,l'); m; Wyrażenia logiczne Programując bardzo często będziemy musieli posługiwać się wyrażeniami logicznymi. W wyniku operacji logicznych wynikiem jest prawda albo fałsz (TRUE, FALSE), standardowo kodowanych jako 1-prawda, 0-fałsz. relacje = = (eq) równość /= (ne) różny od > (gt) większy >= (ge) większy lub równy 2

< (lt) mniejszy <= (le) mniejszy lub równy Operatory and or not xor eqv koniunkcja alternatywa negacja alternatywa wykluczająca Równoważność (TT, FF) 2=3; /*błędne wyrażenie*/ 2==3; /*fałsz*/ a=2==3; /*przypisanie wartości*/ a; Na wartości logicznej można jednak wykonać operacje a*3 W wyniku dostaniemy już liczbę. Dla macierzy A={1 2 3, 4 5 6}; B={1 3 3,5 5 5}; A.==B; /*Porównanie element po elemencie. W rezultacie mamy macierz*/ A==B; /*Porównanie macierzy*/ A.>B; /*Można też tak*/ z = A.gt B; /*Różne elementy*/ A./=B; Przy operatorach z = 3>4 and 2<3; /*lub*/ z=3>4 or 2<3; /*xor*/ z=3>4 xor 2<3; z=3<4 xor 2<3; /*fałsz, bo oba prawdziwe*/ Dla macierzy 3

A={1 0 3 0}; B={0 0 2 0}; A; B; z= A.and B; z= A.eqv B; z= A.xor B; Jeśli porównujemy słowa używamy operatora $== z="ala" $== "ola"; Inne operacje macierzowe Wyznacznik macierzy (det) B={2 3, 1 1}; det(b); A={1 2 3, 4 5 6, 7 8 9}; det(a); /*Macierz osobliwa*/ Wiemy, że można sprawdzić, czy macierz jest dodatnio określona badając jej minory główne (jeśli wszystkie są dodatnie to macierz jest dodatnio określona). Zbadajmy jak jest określona następująca macierz A={16 2 3 13, 5 11 10 8, 9 7 6 12, 4 14 15 1}; det(a[1,1]); /*pierwszy minor*/ det(a[1 2,1 2]); /*drugi minor*/ 4

det(a[1 2 3,1 2 3]); /*trzeci minor*/ /*ujemny zatem macierz nie jest dodatnio określona*/ Znajdowanie wartości własnych macierzy Jak wiemy wartości własne macierzy to Av = λv A={0-6 1, 6 2-16, -5 20-10}; eig(a); /*Obliczenie wartości własnych i wektorów własnych*/ { va,ve } = eigv(a); ve; /*ve w kolumnach są kolejne wektory własne*/ /*sprawdzenie*/ va[1,1]*ve[.,1]; /*prawa*/ a*ve[.,1]; /*lewa*/ /*korzystając z wyrażenia logicznego*/ z=va[1,1]*ve[.,1].==a*ve[.,1]; /*wszystkie różne????*/ /*liczymy dokładniej*/ z=va[1,1]*ve[.,1]-a*ve[.,1]; /*błąd na poziomie 10^(-16). Akceptujemy*/ W wielu operacjach macierze faktoryzuje się. W ekonometrii często wykorzystuje się faktoryzacje Choleskiego A= R' R gdzie R jest macierzą górno-trójkątną B={1 1 1 1, 1 2 3 4, 1 3 6 10, 1 4 10 20}; R=chol(B); R; /*Sprawdzenie*/ R *R; Dekompozycja LU A= LU gdzie L jest macierzą dolno-, a U górno-trójkątną {l, u}=lu(b); 5

l; u; /*sprawdzenie*/ l*u; Procedury Praca, którą do tej pory wykonywaliśmy była dość uciążliwa. Wszystko trzeba było ręcznie wpisywać i efekty bywały różne. Napiszemy teraz naszą pierwszą prostą procedurę, obliczającą długość przeciwprostokątnej przy zadanych przyprostokątnych Musimy w tym celu otworzyć nowy plik i wpisać np. taki tekst proc (1)=pitagoras(a,b); local c2, c; c2=a^2+b^2; c=sqrt(c2); retp(c); endp; Właściwie każda procedura składa się z takich samych kroków, które teraz po kolei omówimy. Słowo proc zaznacza, że będzie procedura. (1) liczba elementów na wyjściu, =pitagoras(a,b), nazwa procedury oraz argumenty wejściowe. local definiuje lokalne zmienne Następnie jest główny kod programu, to co się w nim dzieje. retp(c)- co ma zwrócić procedura endp; - obowiązkowe zakończenie procedury. Sprawdźmy na kilku prostych przykładach pitagoras(1,1); pitagoras(3,4); /*przypisanie wartości funkcji do lliczby*/ c=pitagoras(1,1); c; Możemy tą procedurę zastąpić np. taką funkcją fn pit(a,b)=sqrt(a^2+b^2); pit(3,4); 6

Funkcja nie jest jeszcze odporna na błędy a={1 2, 3 4}; pitagoras(a,4); Możemy dodać też warunkowanie if proc (1)=pitagoras(a,b); local c2,c; if cols(a)>1; "błąd: Argument musi być skalarem "; c=0; else; c2=a^2+b^2; c=sqrt(c2); endif; retp(c); endp; Jeśli podamy macierz jako argument funkcja zwróci błąd. a={1 2, 3 4}; pitagoras(a,4); Funkcja if-elseif-else Prosta funkcja wystawiająca oceną proc (1)=ocena(a); local x; if a<50; x="niedostateczny"; elseif a<=70; x="dostateczny"; elseif a<=85; x="dobry"; else; x="bardzo dobry"; endif; retp(x); endp; Spróbujmy ocena(10); 7

ocena(60); Pętle for Jednymi z bardziej pożytecznych pętli są pętle for. Prosta funkcja badającą, czy macierz jest dodatnio określona. W wyniku dostaniemy 1 jeśli macierz jest dodatnio określona, a 0 w p.p. proc (1)=ododatnio(A); local n,l,c; n =cols(a); /*pobranie wymiaru macierzy*/ l=zeros(1,n); /*wektor zer*/ for i(1,n,1); /*(początek, koniec, krok)*/ l[i]=det(a[seqa(1,1,i),seqa(1,1,i)])>0; /*sprawdzamy, czy każdy kolejny minor jest większy od zera*/ endfor; c=minc(l)==1;/*sprawdzenie, czy nigdzie nie dostaliśmy zera*/ retp(c); endp; Sprawdźmy jak to działa B={1 1 1 1, 1 2 3 4, 1 3 6 10, 1 4 10 20}; ododatnio(b); /*Dla macierzy, którą już znamy*/ A={16 2 3 13, 5 11 10 8, 9 7 6 12, 4 14 15 1}; ododatnio(a); 8

Zadania Zadanie 1. wprowadź do programu następującą macierz A 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 123 100 77 54 31 8-15 -38-61 0 0 0 0 0 0 0 0 0 Oraz taką B 0 0 0 0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 Oraz wektor C o elementach od 32 do 3 o kroku równym 0,5. Macierze należy wprowadzić w sprytny sposób, tzn. nie wpisywać ręcznie, ale skorzystać z jakiś funkcji sekwencji, reshape, itd. Zadanie 2. Stworzyć macierz A2 o wymiarach 3na3 stworzoną z macierzy A jako 3,4,5 kolumna i 1,2,3 wiersz Stworzyć macierz B2 o wymiarach 3 na3 stworzoną z macierzy B jako 2,3,4 kolumna i 2,3,4 wierz Zadanie 3. Stworzyć macierz logiczną L mającą 1 w miejscach, gdzie A2 jest większe niż B2. Zadanie 4. Dla macierzy B2 znaleźć rozkład LU. Zadanie 5. Dla macierzy B znaleźć wektory własne. 9

Zadanie 6. Znaleźć dekompozycje Choleskiego dla macierzy 1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 70 (Macierz Pascala) Zadanie 7 Znajdź dla tej macierzy dekompozycję LU Zadanie 8. Popraw funkcję pitagoras, tak aby sprawdzała też, czy argument b jest liczbą Zadanie 9. Napisz funkcję, czywektor.. Funkcja ta sprawdza, czy argument jest wektorem (kolumnowym, albo wierszowym). Oprogramuj taką funkcję. W wyniku mamy dostać jeden jeśli argument funkcji jest wektorem, albo zero jeśli argument funkcji nie jest wektorem. Czy twój kod jest odporny na podanie mu słowa? Zadanie 10. Napisz następujące proste funkcje. iscolumnvector sprawdza, czy argument jest wektorem kolumnowym (analogicznie jak poprzednia funkcja) isrowvector analogicznie, tylko sprawdza czy jest to wektor wierszowy whichvector(a,b) funkcja zwracająca 0 dla niewektora, 1 dla kolumnowego i 2 dla wierszowego lub słowa niewektor, kolumnowy, wierszowy w zależności od parametru b. Jeśli b jest 0 to słowami, jeśli b jest =1, to liczbami. Sprawdzaj, czy argumenty są poprawne. Zadanie 11. Popraw funkcję ododatnio, żeby przed rozpoczęciem sprawdzała, czy macierz jest kwadratowa. Zadanie 12. 10

Napisz funkcję badającą, czy macierz jest ujemnie określona (Macierz jest ujemnie określona, jeśli jej minory główne są na przemian ujemne i dodatnie, przy czym pierwszy jest ujemny) Praca domowa nr 1: Należy rozwiązać przynajmniej 4 zadania z zadań 1-6, oraz przynajmniej 2 z zadań 7-12. Termin: do 10 marca do godz. 7:00. 11