Laboratorium z Matematyki Obliczeniowej z wykorzystaniem pakietu octave. Leszek Marcinkowski

Podobne dokumenty
Arytmetyka zmiennopozycyjna

Rozdziaª 3. Octave - podstawy. 3.1 Pierwsza sesja w octave'ie

Interpolacja wielomianowa i splajnowa

Interpolacja Lagrange'a, bazy wielomianów

Liniowe zadania najmniejszych kwadratów

Ukªady równa«liniowych - rozkªady typu LU i LL'

Rozdziaª 13. Przykªadowe projekty zaliczeniowe

1 Bª dy i arytmetyka zmiennopozycyjna

Numeryczne zadanie wªasne

LZNK. Rozkªad QR. Metoda Householdera

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

Rozdziaª 7. Rozwi zywanie równa«nieliniowych. 7.1 Funkcja octave'a fzero()

Macierze i Wyznaczniki

Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.

Interpolacja funkcjami sklejanymi

Zagadnienia na wej±ciówki z matematyki Technologia Chemiczna

Macierze i Wyznaczniki

Lekcja 12 - POMOCNICY

Lab. 02: Algorytm Schrage

Bash i algorytmy. Elwira Wachowicz. 20 lutego

1 Przypomnienie wiadomo±ci ze szkoªy ±redniej. Rozwi zywanie prostych równa«i nierówno±ci

Aproksymacja funkcji metod najmniejszych kwadratów

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

Metody numeryczne i statystyka dla in»ynierów

1 Metody iteracyjne rozwi zywania równania f(x)=0

Zadania i scenariusze zaj z laboratorium komputerowego do wykªadu z Matematyki Obliczeniowej. Leszek Marcinkowski

Elementy metod numerycznych - zajęcia 9

Modele liniowe i mieszane na przykªadzie analizy danych biologicznych - Wykªad 1

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

Laboratorium metod numerycznych numer 1

Matematyka wykªad 1. Macierze (1) Andrzej Torój. 17 wrze±nia Wy»sza Szkoªa Zarz dzania i Prawa im. H. Chodkowskiej

Metodydowodzenia twierdzeń

01.Wprowadzenie do pakietu MATLAB

Wprowadzenie do środowiska

Wybrane poj cia i twierdzenia z wykªadu z teorii liczb

Materiaªy do Repetytorium z matematyki

Ciaªa i wielomiany. 1 Denicja ciaªa. Ciaªa i wielomiany 1

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Ukªady równa«liniowych

1 Programowanie w matlabie - skrypty i funkcje

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

1. Przedstaw w postaci algebraicznej liczby zespolone: 2. Narysuj zbiory punktów na pªaszczy¹nie:

Vincent Van GOGH: M»czyzna pij cy li»ank kawy. Radosªaw Klimek. J zyk programowania Java

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Macierze. 1 Podstawowe denicje. 2 Rodzaje macierzy. Denicja

x y x y x y x + y x y

2 Liczby rzeczywiste - cz. 2

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Caªkowanie numeryczne - porównanie skuteczno±ci metody prostokatów, metody trapezów oraz metody Simpsona

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Listy Inne przykªady Rozwi zywanie problemów. Listy w Mathematice. Marcin Karcz. Wydziaª Matematyki, Fizyki i Informatyki.

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

Ćwiczenie 1. Wprowadzenie do programu Octave

1. Wprowadzenie do C/C++

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

Matlab Składnia + podstawy programowania

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

1. Wprowadzenie do C/C++

Mathematica - podstawy

ZADANIA. Maciej Zakarczemny

Przetwarzanie sygnałów

det A := a 11, ( 1) 1+j a 1j det A 1j, a 11 a 12 a 21 a 22 Wn. 1 (Wyznacznik macierzy stopnia 2:). = a 11a 22 a 33 +a 12 a 23 a 31 +a 13 a 21 a 32

Ekonometria. wiczenia 1 Regresja liniowa i MNK. Andrzej Torój. Instytut Ekonometrii Zakªad Ekonometrii Stosowanej

MATLAB ŚRODOWISKO MATLABA OPIS, PODSTAWY

ANALIZA MATEMATYCZNA Z ALGEBR

Wykªad 4. Funkcje wielu zmiennych.

XVII Warmi«sko-Mazurskie Zawody Matematyczne

1 Granice funkcji wielu zmiennych.

1. Odcienie szaro±ci. Materiaªy na wiczenia z Wprowadzenia do graki maszynowej dla kierunku Informatyka, rok III, sem. 5, rok akadem.

zajęcia 2 Definiowanie wektorów:

Metody numeryczne i statystyka dla in»ynierów

Rozwi zanie równania ró»niczkowego metod operatorow (zastosowanie transformaty Laplace'a).

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

Lekcja 3 Banki i nowe przedmioty

Janusz Adamowski METODY OBLICZENIOWE FIZYKI Zastosowanie eliptycznych równa«ró»niczkowych

a) f : R R R: f(x, y) = x 2 y 2 ; f(x, y) = 3xy; f(x, y) = max(xy, xy); b) g : R 2 R 2 R: g((x 1, y 1 ), (x 2, y 2 )) = 2x 1 y 1 x 2 y 2 ;

Funkcje wielu zmiennych

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

Rzut oka na zagadnienia zwi zane z projektowaniem list rozkazów

Zadania z z matematyki dla studentów gospodarki przestrzennej UŠ. Marek Majewski Aktualizacja: 31 pa¹dziernika 2006

Funkcje, wielomiany. Informacje pomocnicze

Ćwiczenie 1. Matlab podstawy (1) Matlab firmy MathWorks to uniwersalny pakiet do obliczeń naukowych i inżynierskich, analiz układów statycznych

Pakiety Matematyczne MAP1351W,P

Metody numeryczne Laboratorium 2

Wprowadzenie do pakietów MATLAB/GNU Octave

Analiza Matematyczna MAT1317

Ćwiczenie 1. Wprowadzenie do programu Octave

Metody numeryczne i statystyka dla in»ynierów

Macierze. Dziaªania na macierzach. 1. Niech b d dane macierze , D = , C = , B = 4 12 A = , F = , G = , H = E = a) Obliczy A + B, 2A 3B,

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

Arkusz maturalny. Šukasz Dawidowski. 25 kwietnia 2016r. Powtórki maturalne

Kurs z matematyki - zadania

Makroekonomia Zaawansowana

Metody dowodzenia twierdze«

PRZYPOMNIENIE Ka»d przestrze«wektorow V, o wymiarze dim V = n < nad ciaªem F mo»na jednoznacznie odwzorowa na przestrze«f n n-ek uporz dkowanych:

wiczenie 1 Podstawy j zyka Java. Instrukcje warunkowe

Wstawianie gotowych rysunków w texu - informacje podstawowe.

Wstęp do Programowania Lista 1

X WARMI SKO-MAZURSKIE ZAWODY MATEMATYCZNE 18 maja 2012 (szkoªy ponadgimnazjalne)

1 0 Je»eli wybierzemy baz A = ((1, 1), (2, 1)) to M(f) A A =. 0 2 Daje to znacznie lepszy opis endomorzmu f.

Transkrypt:

Laboratorium z Matematyki Obliczeniowej z wykorzystaniem pakietu octave Leszek Marcinkowski 12 grudnia 2011

Streszczenie W tym skrypcie omówimy wykorzystanie pakietu obliczeniowego octave do implementacji i analizy metod numerycznych omówionych w semestralnym wykªadzie z Matematyki Obliczeniowej.

Spis tre±ci 1 Wst p 2 2 Octave i matlab - czym s te pakiety? 4 3 Octave - podstawy 5 3.1 Pierwsza sesja w octave'ie.................... 5 3.1.1 Octave jako kalkulator, podstawowe zmienne...... 6 3.1.2 Macierze i operacje na macierzach............ 8 3.2 Octave jako j zyk programowania - skryptu i m-pliki..... 13 3.2.1 Funkcje.......................... 16 3.3 Podstawowa graka........................ 19 3.4 Przykªadowy skrypt........................ 22 3.5 Przykªadowa sesja matlaba.................... 32 4 Arytmetyka zmiennopozycyjna 35 4.1 Redukcja cyfr przy odejmowaniu................ 37 4.1.1 Przykªad.......................... 37 4.1.2 Obliczanie funkcji z rozwini cia w szereg........ 38 4.1.3 Obliczanie przybli»onej warto±ci pochodnej...... 40 5 Interpolacja wielomianowa i splajnowa 44 5.1 Wielomiany w octavie...................... 44 5.2 Interpolacja wielomianowa.................... 45 5.2.1 Interpolacja Lagrange'a.................. 45 5.2.2 Interpolacja Hermite'a.................. 47 5.3 Interpolacja zespolona. Algorytm FFT............. 50 5.4 Interpolacja splajnowa...................... 53 6 Obliczanie caªek. Kwadratury 62 6.1 Funkcja octave'a quad()..................... 62 6.2 Kwadratury zªo»one........................ 67 1

6.3 Normy caªkowe.......................... 70 7 Rozwi zywanie równa«nieliniowych 71 7.1 Funkcja octave'a fzero()..................... 71 7.2 Metoda bisekcji.......................... 72 7.3 Metoda Newtona......................... 74 7.4 Odwracanie funkcji........................ 77 8 Rozwi zywanie równa«liniowych. 82 8.1 Operator backslash........................ 82 8.2 Macierz odwrotna......................... 84 8.3 Wspóªczynnik uwarunkowania macierzy............. 85 8.4 Rozkªady macierzy........................ 88 8.4.1 Rozkªad LU........................ 88 8.4.2 Rozkªad QR........................ 90 9 Liniowe zadania najmniejszych kwadratów 93 9.1 Regularne LZNK......................... 94 9.2 Nieregularne LZNK i rozkªad SVD............... 95 10 Zadanie wªasne 100 2

Rozdziaª 1 Wst p W tym skrypcie omówimy, jak implementowa i testowa metody numeryczne przy wykorzystaniu ±rodowiska octave, czyli pakietu oblicze«numerycznonaukowych. Chodzi nam o metody, które s omawiane w czasie standardowego semestralnego wykªadu z Matematyki Obliczeniowej na wydziale Matematyki, Informatyki i Mechaniki Uniwersytetu Warszawskiego. Gªównym celem zaj w laboratorium komputerowym, odbywaj cych si równolegle z wykªadem i wiczeniami z Matematyki Obliczeniowej, jest przetestowanie metod, które s zaimplementowane w pakiecie octave. Omawiamy te» implementacj metod rozwi zywania numerycznych zada«z wykorzystaniem octave'a. Wykorzystanie pakietu/±rodowiska matlab jest alternatyw dla pakietu octave. Pakiet ten jest komercyjny i w du»ym stopniu kompatybilny z octavem. Szczegóªowiej omawiamy kwesti pakietów w rozdziale 2. Zapoznanie si ze ±rodowiskiem octave'a lub matlaba jest ubocznym celem laboratorium. Warto doda,»e zdecydowana wi kszo± omawianych w tym skrypcie kodów octave'a b dzie dziaªaªa równie» w matlabie. Wszystkie zadania i algorytmy omawiane w tym skrypcie s opisane w podstawowych podr cznikach do matematyki obliczeniowej. Na wydziale Matematyki, Informatyki i Mechaniki Uniwersytetu Warszawskiego w semestrze letnim 2010/11 podstawowym podr cznikiem do wykªadu z Matematyki Obliczeniowej byªa ksi»ka [11]. W tej pozycji mo»na znale¹ równie» sporo zada«komputerowych, które mog stanowi ciekawe uzupeªnienie tego skryptu. Metody numeryczne omawiane w tym skrypcie s szczegóªowo omawiane w innych podr cznikach dotycz cych analizy numerycznej, czyli inaczej matematykie obliczeniowej. Spo±ród nich warto równie» poleci : [8],[3], [1], [16] i [17]. Oczywi±cie w j zyku angielskim opublikowano wiele podr czników do matematyki obliczeniowej. Niektóre z nich zawieraj zadania komputerowe. 3

Szczególnie polecam ksi»ki: [15], [14] zawieraj ce wi cej materiaªu, ni» obejmuje program standardowego kursu Matematyki Obliczeniowej na wydziale Matematyki, Informatyki i Mechaniki Uniwersytetu Warszawskiego. Warto te» poleci inne podr czniki i monograe: [5], [6], [2], [12], [13], [9], [18], [10], [7] i inne. Zazwyczaj tre± tych ksi»ek tylko w jakiej± cz ±ci pokrywa si z zakresem materiaªu przedstawionym w tym skrypcie. Co do samego octave'a - warto przeczyta manual, tzn. [4], dost pny w dziale dokumentacji na stronach octave'a on-line pod adresem: http://www.gnu.org. Kolejno± zagadnie«wykªadanych w wykªadzie z Matematyki Obliczeniowej mo»e si ró»ni w kolejnych edycjach wykªadu. W tym skrypcie przyj li±my kolejno± zaprezentowan w wykªadzie z Matematyki Obliczeniowej z semestru letniego 2010/11. W rozdziale 2 omówimy krótko czym s w ogólno±ci pakiety octave i matlab, oraz sk d mo»na pobra darmowe dystrybucje pakietu octave. W rozdziale 3 omówimy podstawowe obiekty pakietu octave, czyli macierze i operacje na nich, oraz podstawowe struktury programistyczne: p tle, instrukcje warunkowe, operacje macierzowe i wektorowe, skrypty, operatory logiczne, itd. Rozdziaª 4 jest po±wi cony arytmetyce zmiennopozycyjnej, czyli bª dom zaokr gle«i ich wpªywowi na obliczenia numeryczne. W kolejnym rozdziale 5 omawiamy zagadnienie interpolacji wielomianowej i splajnowej. W rozdziale 6 mówimy o caªkowaniu numerycznym. Rozdziaª 7 dotyczy metod rozwi zywania nieliniowych równa«skalarnych. Rozdziaª 8 dotyczy numerycznej algebry liniowej, w szczególno±ci rozwi zywania ukªadów równa«liniowych, a rozdziaª 9 dotyczy kolejnego zadania z numerycznej algebry liniowej, a mianowicie liniowego zadania najmniejszych kwadratów. 4

Rozdziaª 2 Octave i matlab - czym s te pakiety? Pakiet octave jest zarówno ±rodowiskiem oblicze«numerycznych, jak i j zykiem programowania. Umo»liwia on proste rozwi zywanie podstawowych zada«numerycznych takich jak: numeryczne obliczenie caªki, rozwi zanie równa«liniowych i nieliniowych, caªkowanie przybli»one równa«ró»niczkowych zwyczajnych itp. Mo»na go u»ywa z linii komend - jak kalkulator naukowy, pisa skrypty, czy m-pliki (czyli pliki z implementacjami funkcji octave'a). Pakiet octave jest programem ogólnodost pnym jako wolne oprogramowanie. Rozprowadzany jest na zasadach licencji GNU GPL. Pakiet octave jest wolnym odpowiednikiem ±rodowiska matlab, które jest programem komercyjnym, szeroko stosowanym do oblicze«numerycznych. Zalet octave'a jest to,»e jest dost pny bez opªat. Octave jest dystrybuowany w wersjach binarnych zarówno pod ró»ne dystrybucje Linuxa, jak i w wersji binarnej pod system Windows. Poni»ej zaª czamy linki do stron octave'a: 1. Gªówna strona octave'a 2. Rozbudowany podr cznik do octave'a - w j zyku angielskim dost pny on-line 3. Strona z linkami do plików z octavem 4. Strona octave-forge'a - czyli rozszerze«octave'a Tutaj podajemy link to strony producenta matlaba: http://www.mathworks.com/. Jest to pakiet komercyjny. 5

Rozdziaª 3 Octave - podstawy 3.1 Pierwsza sesja w octave'ie W systemie unix np. w linuxie najpierw musimy uruchomi terminal (np. xterminal). Otworzy si wówczas okienko z lini komend z promptem - za- Rysunek 3.1: Terminal z lini komend. zwyczaj migaj cym, w której mo»emy wpisywa komendy unixa, por. rysunek 3.1. 6

Wpisujemy komend octave i potwierdzamy Enter. W okienku terminala wy±wietli si nagªówek z numerem wersji i z lini komend octave'a, por. rysunek 3.2. Rysunek 3.2: Terminal z wywoªanym octavem. Dalej, w linii komend octave'a wpisujemy polecenia octave'a. 3.1.1 Octave jako kalkulator, podstawowe zmienne Najprostsze zastosowanie octave'a to kalkulator naukowy. W lini komend wpisujemy np.: 234+76. Otrzymujemy: ans=310 - zmiennej octave'a ans zostaje przypisana warto± 310, któr mo»na dalej wykorzysta np. ans 1. Wówczas otrzymamy 309. W octavie s funkcje takie, jak pierwiastek kwadratowy sqrt(), sin(), cos(), exp() itp. Je±li chcemy zapami ta wynik - musimy u»y zmiennej np.: > a=12+34; > sin ( a ) ans = 0.90179 Typów zmiennych nie deklarujemy - octave domy±lnie przyjmuje typ reprezentowany przez dan zmienn. W octavie s np. zmienne typu zespolonego: 7

> a= sqrt ( 1) a = 0 + 1 i > b=1+4 i b = 1 + 4 i > c=a b c = 4 + 1 i > d=a+b d = 1 + 5 i Zach cam do samodzielnego testowania. Prosz zauwa»y,»e je±li wywoªamy jak ± funkcj albo operator, który zwraca warto±, np.: 2+3 zwraca warto± 5, i nie przypiszemy tej warto±ci zmiennej, to octave automatycznie przypisze t zwracan warto± do zmiennej ans, któr pó¹niej mo»na wykorzysta. Wszystkie zmienne, jakie s w pami ci sesji octave'a, mo»emy wy±wietli poleceniem who, czy whos - wersj poprzedniej funkcji, zwracaj c dokªadny opis zmiennych. Zmienne mo»emy usuwa z pami ci octave'a poleceniem clear np. > a= sqrt ( 1); > b=1+4 i b = 1 + 4 i > who V a r i a b l e s in the c u r r e n t scope : A B C a ans b c d f > clear a > who V a r i a b l e s in the c u r r e n t scope : A B C ans b c d f Zmienna a znikn ªa z sesji octave'a. Podanie ±rednika po poleceniu spowoduje,»e wynik nie zostanie wy±wietlony w terminalu. Pomoc do octave'a wywoªujemy poleceniem help, pomoc do konkretnej funkcji wywoªujemy poleceniem help nazwa_funkcji np. help sin: > help sin ` sin ' i s a b u i l t in function Mapping Function : sin (X) Compute the s i n e for each element o f X in r a d ians. 8

See a l s o : asin, sind, sinh Pomoc jest w j zyku angielskim. 3.1.2 Macierze i operacje na macierzach Podstawowym typem zmiennym s macierze. Macierz mo»emy zdeniowa wprost podaj c jej warto±ci: A= [ 1, 2, 3, 4 ; 2 4 6 7 ] ; - prosz zauwa»y,»e elementy macierzy w wierszu oddzielamy przecinkiem albo spacj, a kolejne kolumny - ±rednikiem. Do elementu macierzy o wspóªrz dnych (i, j) odwoªujemy si nast puj co: A(i,j). Je±li zdeniujemy element macierzy spoza zakresu, np. w tym przypadku A(3,3)=7; octave rozszerzy macierz, przyjmuj c domy±lnie pozostaªe niezdeniowane warto±ci macierzy za zera. Wa»n rol peªni operator ±rednik: a : h : b Generuje on wektor z a + k h b. Wywoªanie: a : b [a, a + h,..., a + k h] dziaªa jak a:1:b, czyli z h równym jeden. Z macierzy mo»emy tworzy inne macierze wycinaj c podmacierze. Rozpatrzymy macierz A wymiaru M N. We¹miemy teraz dwa wektory indeksów i = [i(1),..., i(k)] oraz j = [j(1),..., j(l)] dla 1 i(s) M, 1 j(s) N. Wtedy polecenie: B=A( i, j ) ; stworzy macierz wymiaru K L tak,»e B(r,s)=A(i(r),j(s)), np. > A=[3 3 3 ; 4 5 6 ] A = 3 3 3 4 5 6 9

> i =[ 2 1 ] ; j =[2 3 ] ; > B=A( i, j ) B = 5 6 3 3 W ten sposób mo»na wycina te» podmacierze lub np. wiersze macierzy: A=[3 3 3 ; 4 5 6 ] ; B=A( 1 : 2, 2 ) ; kolumny, czy Warto zauwa»y,»e je±li wywoªamy polecenie x=a(:,3) to jest to równowa»ne x=a(1:2,3), czyli x staje si trzeci kolumn macierzy A. Macierze mo»emy tworzy z innych macierzy blokowo: B=[A,A ] ; C=[A;A ] ; Je±li A miaªa wymiar M N, to macierz B ma wymiar M 2N, a jej odpowiednie podmacierze zªo»one z pierwszych N kolumn i ostatnich N kolumn s równe macierzy A. Macierz C analogicznie ma wymiar 2M N, a jej podmacierze zªo»one z pierwszych i ostatnich M wierszy s równe A. Przy takich denicjach musimy operowa macierzami o odpowiednich wymiarach. Popatrzmy na wyniki: octave :6> A=[3 3 3 ; 4 5 6 ] A = 3 3 3 4 5 6 octave :7> B=A( 1 : 2, 2 ) B = 3 5 octave :8> B=[A,A] B = 3 3 3 3 3 3 4 5 6 4 5 6 10

octave :9> C=[A;A] C = 3 3 3 4 5 6 3 3 3 4 5 6 octave :10> Istniej funkcje deniuj cych okre±lone macierze - wymienimy teraz podstawowe: zeros(m,n) - tworzy macierz zerow o M wierszach i N kolumnach. ones(m,n) - tworzy macierz o wszystkich warto±ciach równych jeden o M wierszach i N kolumnach eye(m,n) - tworzy macierz identyczno±ciow o M wierszach i N kolumnach, tzn. o warto±ciach: jeden - na gªównej przek tnej i zero - na pozostaªych pozycjach rand(m,n) - tworzy macierz o M wierszach i N kolumnach o losowych warto±ciach wedªug rozkªadu jednostajnego na odcinku [0, 1] hilb(n) - tworzy macierz Hilberta N N vander(x) - tworzy macierz Vandermonde'a dla punktów {x k } z wektora x = [x(1),..., x(n)] diag() - tworzy macierz diagonaln, ale równie» pozwala otrzyma odpowiednie diagonale macierzy przy odpowiednim wywoªaniu Wi kszo± funkcji elementarnych typu sin() mo»e by wywoªywana na macierzach. Wtedy: w octave'ie a=sin(a) zwraca macierz tego samego wymiaru co A, ale o elementach (sin(a(i, j)) i,j. Mówimy,»e implementacja takiej funkcji jest wektorowa. Popatrzmy na przykªad: octave :6> A=0.5 pi [ 0 : 6 ; 3 : 3 ] ' A = 0.00000 4.71239 11

1.57080 3.14159 3.14159 1.57080 4.71239 0.00000 6.28319 1.57080 7.85398 3.14159 9.42478 4.71239 octave :7> a=sin (A) a = 0.00000 1.00000 1.00000 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 1.00000 1.00000 0.00000 0.00000 1.00000 octave :8> Macierze mo»emy dodawa i mno»y, o ile zgadzaj si wymiary: octave :15> A=2+eye ( 2, 2 ) A = 3 2 2 3 octave :16> B=ones (2,2)+2 A B = 7 5 5 7 octave :17> C=A B C = 31 29 29 31 octave :18> 12

Operacje arytmetyczne mo»emy te» wywoªa w wersji wektorowej, tzn. je±li np. dwie macierze A, B maj ten sam wymiar, to wywoªanie C=A. B zwróci macierz C tego samego wymiaru tak,»e C(k, l) = A(k, l) B(k, l). To samo dotyczy innych dziaªa«: dzielenia C=A.\B odejmowania C=A. B dodawania C=A.+B podnoszenia do pot gi C=A.^B W przypadku dodawania i odejmowania operatory bez kropek dziaªaj tak samo. Macierz rzeczywist mo»emy transponowa operatorem C=A'. W przypadku macierzy zespolonej operator ten zwróci sprz»enie hermitowskie, a operator z kropk A.' zwróci zwykªe transponowanie. Najlepiej zobaczy to na przykªadzie: octave :37> A=[1+ i 3+4 i ; 8+2 i 5+7 i ] A = 1 + 1 i 3 + 4 i 8 + 2 i 5 + 7 i octave :38> A' ans = 1 1 i 8 2 i 3 4 i 5 7 i octave :39> A. ' ans = 1 + 1 i 8 + 2 i 3 + 4 i 5 + 7 i octave :40> Istnieje wiele funkcji pozwalaj cych na manipulowanie macierzami np.: iplr () - odwraca kolejno± kolumn ipud() - odwraca kolejno± wierszy 13

reshape() - tworzy now macierz o okre±lonych wymiarach z elementów macierzy wyj±ciowej rot90() - obraca macierz o wielokrotno± 90 stopni w kierunku przeciwnym obrotowi wskazówek zegara Wektory traktowane s jako macierze o jednej kolumnie, albo jednym wierszu, jakkolwiek istniej specjalne funkcje dziaªaj ce tylko na wektorach, np. funkcja length(x) zwraca dªugo± wektora x pionowego lub poziomego. Polecenie [m,n]=size(a) zwraca wymiar macierzy jako dwie warto±ci w wektorze. octave :40> x=[1 2 3 4 ] x = 1 2 3 4 octave :41> length ( x ) ans = 4 octave :42> size ( x ) ans = 1 4 octave :43> 3.2 Octave jako j zyk programowania - skryptu i m-pliki Octave mo»e by równie» traktowany jako j zyk programowania. Istnieje mo»liwo± pisania skryptów, a nast pnie ich wywoªywania z linii komend octave'a. Skrypty to po prostu pliki tekstowe o rozszerzeniu.m, tzn. np. skryptem mo»e by plik o nazwie nazwaskryptu.m, zawieraj ce w kolejnych liniach komendy octave'a utworzone przez dowolny edytor tekstowy, np. vi w unixie, czy wordpad w systemie windows. Skrypt wywoªujemy podaj c nazw bez rozszerzenia, czyli skrypt zawarty w pliku tekstowym skrypt.m wywoªujemy z linii komend komend : skrypt Po wywoªaniu np. nast puj cego skryptu: 14

#s k r y p t.m #Prosty s k r y p t ta l i n i a to komentarz a=2+3 octave wykona wszystkie polecenia po kolei - o ile nie b dzie w nich jakiego± bª du. W tym przypadku zwróci a=5. Tak wi c octave jest interpreterem - nie ma etapu kompilacji skryptu przed wykonaniem. Pisz c skrypty w octavie najlepiej mie na pulpicie komputera co najmniej dwa okna - jedno z sesj octave'a, a drugie z edytorem, w którym edytujemy plik tekstowy ze skryptem. Tu warto doda,»e komentarze w octavie wstawiamy po znakach # lub %. Octave jako j zyk programowania dostarcza równie» wi kszo± konstrukcji imperatywnych, m.in. instrukcja warunkowa if - przykªad: #i n s t r u k c j a warunkowa i f ( x>0) x=1; else x=0; endif ; instrukcja switch wielokrotnego wyboru zast puj ca if je±li k przyjmuje okre±lon ilo± warto±ci switch ( t a k n i e ) case {"T" " t "} x = 1 ; case {"N" "n" } x = 0 ; otherwise error ( " t y l k o t lub n" ) ; endswitch p tla while( ) #sumowanie k=0; a=0; while ( k<=10) do 15

a+=k ; k++; endwhile ;! p tla z warunkiem zatrzymania na ko«cu: do intrukcje until( ); k=0; do k++; until ( k>10) p tla for: a=0; for k =1:10, a+=k ; endfor funkcje octave'a function []=f() function [ s ]= f ( a, b) s=a+b ; endfunction Wi cej informacji o funkcjach podamy w nast pnym rozdziale. W tym miejscu omówimy operacje logiczne octave'a. Ogólnie ujmuj c - warto± ró»na od zera traktowana jest jako prawda, 0 to faªsz. Operatory logiczne octave'a s takie same jak w j zyku C tzn: a && b - operator logiczny dwuargumentowy a I b zwraca warto± jeden (prawda), jak a i b s ró»ne od zera, w przeciwnym przypadku operator zwraca zero (faªsz) a b - operator logiczny dwuargumentowy a LUB b zwraca jeden, je±li które± z a lub b jest równe jeden, w przeciwnym przypadku zwraca zero!a - operator logiczny jednoargumentowy negacji N IEP RAW DA a, je±li a jest ró»ne od zera - to operator zwraca zero, w przeciwnym przypadku operator zwraca jeden a==b - operator dwuargumentowy równo±ci, je±li a ma t sam warto± co b, to operator zwraca jeden, w przeciwnym razie operator zwraca zero 16

a!=b - operator dwuargumentowy bycia ró»nym, je±li a jest ró»ne od b to zwraca jeden, w przeciwnym razie operator zwraca zero a < b - operator dwuargumentowy porównania, zwraca jeden gdy a jest mniejsze od b, w przeciwnym razie operator zwraca zero. Pozostaªe operatory porównania ( a > b, a<=b, a>= b) s zdeniowane analogicznie 3.2.1 Funkcje Funkcje w octave'ie mo»emy deniowa z linii komend, czy jako cz ± kodu w skrypcie: function [w, s ]= f ( a, b) #pomoc do danej f u n k c j i s=a+b ; w=a b ; endfunction Wywoªujemy je z linii komend (lub w linii skryptu, czy w innej funkcji) w=f ( 1, 2 ) [w, s ]= f ( 1, 2 ) Pierwsze wywoªanie spowoduje,»e funkcja zwróci tylko pierwsz warto± tj. w. Niektóre ostatnie parametry funkcji mog przyjmowa domy±ln warto± tzn. function [w, s ]= f ( a, b=0) #pomoc do danej f u n k c j i s=a+b ; w=a b ; endfunction Wtedy wywoªanie funkcji [w, s ]= f ( 1 ) zwróci warto±ci funkcji dla parametru b = 0. Funkcje mo»na przekazywa jako parametry do innych funkcji poprzez przekazanie nazwy funkcji jako napisu - ci gu znaków lub jako tzw. uchwyty do funkcji - tu przykªad przekazania nazwy funkcji sin() do funkcji quad() obliczaj cej caªki: > f=@sin ; > quad( " s i n ", 0, 1 ) 17

ans = 0.45970 > quad( f, 0, 1 ) ans = 0.45970 > quad( @sin, 0, 1 ) ans = 0.45970 Oba sposoby s równowa»ne. Proste funkcje mo»na deniowa jako tzw. funkcje anonimowe: > f=@( x ) + sin ( x ) ; #f ( x)=x+s i n ( x ) > f ( 1 ) ans = 0.84147 czyli deniujemy od razu uchwyt do funkcji. W octavie wprowadzono za matlabem tzw. m-pliki, czy - inaczej - pliki funkcyjne. S to pliki z rozszerzeniem m np. f.m, zawieraj ce denicje funkcji o tej samej nazwie co plik (bez rozszerzenia). M-plik o nazwie test.m powinien wi c zawiera denicj funkcji test (), czyli w pierwszej linii powinien znajdowa si nagªówek funkcji. Poni»ej widzimy ogóln struktur funkcji: function [ zwracane w a r t o s c i ]= t e s t ( parametry ) # #pomoc do f u n k c j i # komendy zwracane w a r t o s c i powinny byc zdefiniowane endfunction Wywoªanie polecenia help test powinno wy±wietli pomoc do funkcji tzn. wykomentowane linie spod nagªówka funkcji. Funkcje mo»na te» deniowa w skryptach, które maj te same rozszerzenie m. Wa»ne, aby w pierwszej niepustej linii skryptu nie byªo sªowa kluczowego function, tzn. aby przed deniowaniem funkcji w skrycie poda jak kolwiek komend. W przeciwnym przypadku octave potraktuje skrypt jako m-plik. W m-plikach, pod denicj gªównej funkcji o tej samej nazwie co m- plik, mog si znajdowa tzw. pod-funkcje (ang. subfunctions), które mog by wywoªane przez t gªówn funkcj z m-pliku i inne pod-funkcje tylko w tym m-pliku. Tutaj podajemy przykªad takiego m-pliku z funkcj gªówn obliczaj c przybli»enie normy typu L 2 i pod-funkcjami: 18

#m p l i k c z y l i p l i k t e k s t o w y normal2.m function [ nl2]=normal2 (FCN, a, b) #norma L^2(a, b ) z f u n k c j i o uchwycie FCN # na [ a, b ] s f=uchwytkwad (FCN) ; nl2=sqrt (quad( sf, a, b ) ) ; endfunction function [SFCN]=uchwytkwad ( f ) #tworzy uchwyt do f u n k c j i g ( x)= f ( x ) f ( x ) SFCN=@( x ) f ( x ) f ( x ) ; endfunction #koniec m p l i k u normal2.m Oczywi±cie pod-funkcja jest tutaj wprowadzona sztucznie, nie jest ona konieczna. W funkcji octave'a mo»na u»ywa automatycznych zmiennych nargin i nargout, które przy wywoªaniu danej funkcji przyjmuj warto±ci: nargin - ilo±ci parametrów, z jak funkcja zostaªa wywoªana. nargout - ilo±ci zwracanych warto±ci, z jak funkcja zostaªa wywoªana. Tu podajemy przykªad wykorzystania tych zmiennych w konkretnej funkcji: function [ y1, y2]= t e s t ( a, b ) # t e s t nargin nargout i f ( nargin <2) b=a ; endif y1=a+b ; i f (nargout>1) y2=a b ; endif endfunction Sprawd¹my, jak taka funkcja dziaªa: octave :46> t e s t ( 1 ) ans = 2 octave :47> t e s t ( 1, 2 ) 19

ans = 3 octave :48> [ y1]= t e s t ( 1, 2 ) y1 = 3 octave :49> [ y1, y2]= t e s t ( 1, 2 ) y1 = 3 y2 = 1 octave :50> 3.3 Podstawowa graka Octave posªuguje si zazwyczaj zewn trznym narz dziem do graki w linuxie. Najcz ±ciej jest to program gnuplot, ewentualnie grace lub inny. W przypadku systemu windows w binarnej wersji octave'a zawarta jest te» gra- ka. Podstawow funkcj umo»liwiaj c rysowanie wykresów jest plot(). Rysunek 3.3: Mo»liwie prosty wykres funkcji Najprostsze wywoªanie: plot(x) dla wektora x otworzy nowe okno i w nim narysuje punkty (k, x(k)). Punkty mog pozosta poª czone prostymi w zale»no±ci od ustawienia domy±lnych opcji octave'a. 20

Innym wywoªaniem plot() pozwalaj cym np. na rysowanie wykresów jest plot(x,y) dla wektorów x, y tej samej dªugo±ci. W tym przypadku octave narysuje punkty (x(k), y(k)). Tak wi c, je±li stworzymy w wektorze x siatk stupunktow równomiern na [0, 3] - wygodnym poleceniem jest linspace(,a,b,n) - a potem policzymy warto±ci np. funkcji y(k) = sin(x(k)), to polecenie plot(x,y) narysuje wykres sin() na tym odcinku, por. rysunek 3.3. x=linspace ( 0, 3 ) ; y=sin ( x ) ; #s i n j e s t wektorowa f u n k c j a plot ( x, y ) Rysunek 3.4: Dwa wykresy Istnieje mo»liwo± umieszczania kilku wykresów na jednym obrazku np. x=linspace ( 0, 3 ) ; y=sin ( x ) ; #s i n j e s t wektorowa f u n k c j a z=cos ( x ) ; plot ( x, y, x, z ) 21

Tu plot(x,y,x,z) narysuje punkty (x(k), y(k) i (x(k), z(k), czyli wykresy sin() i cos() na jednym rysunku. Rysunek 3.5: Dwa wykresy w ró»nych stylach i podpisane Inn mo»liwo±ci jest zastosowanie odpowiednich funkcji dotycz cych gra- ki; np. hold on powoduje,»e kolejne wywoªania plot sprawia rysowanie wykresów na jednym obrazku. Polecenie hold o likwiduje t wªasno±. Mo»emy dobra kolor wykresu, styl wykresu, doda opis, np. wykres sinusa mo»e by w kolorze czerwonym narysowany plusami, a cosinusa w kolorze niebieskim narysowany gwiazdkami x=linspace ( 0, 3, 4 0 ) ; y=sin ( x ) ; #s i n j e s t wektorowa f u n k c j a z=cos ( x ) ; plot ( x, y, "+r ; s i n ; ", x, z, " b ; cos ; " ) #+ wykres plusami r red ( czerwony ) # wykres gwiazdkami, b b l u e ( n i e b i e s k i ) Podamy teraz kilka przydatnych funkcji zwi zanych z grak : xlabel - etykieta osi poziomej ylabel - etykieta osi pionowej 22

title - tytuª rysunku gure - kontroluje okienka z wykresami - mo»emy ich mie kilka, czyli x=linspace ( 0, 3, 4 0 ) ; figure ( 1 ) ; y=sin ( x ) ; plot ( x, y ) figure ( 2 ) z=cos ( x ) ; plot ( x, z ) stworzy dwa okienka z wykresem sin() w pierwszym i cos() w drugim. semilogx - wykres w skali póªlogarytmicznej - wzgl dem zmiennej poziomej semilogy - wykres w skali póªlogarytmicznej - wzgl dem zmiennej pionowej loglog - wykres w skali logarytmicznej bar - wykres sªupkowy. stairs - wykres schodkowy. Zach cam do zapoznania si z tymi funkcjami u»ywaj c pomocy octave'a. Istnieje te» mo»liwo± u»ywania prostej graki trójwymiarowej, ale w przypadku matematyki obliczeniowej nie b dziemy tego potrzebowali. 3.4 Przykªadowy skrypt Poni»ej zamieszczamy prosty skrypt, w którym przedstawiamy przykªady u»ycia wi kszo±ci operacji, zmiennych omawianych w tym rozdziale. 23

echo on #Ostatnia modyfikacje 28 06 2011 ############################################## # # Prosty s k r y p t octave ' a mobasic.m z przykladami # o p e r a c j i na macierzach # wektorach z podstawowymi # s t r u k t u r a m i programistycznymi # ############################################## ############################################ # # WAZNE # # s k r y p t w o c t a v i e zawiera dowolna # sekwencje komend octave ' a # tak j a k b y pisanych z l i n i i komend a l e # NIE MOZE ZACZYNAC SIE OD SLOWA KLUCZOWEGO # f u n c t i o n # # ( gdyz, wowczas j e s t to tzw. p l i k funkcyjny # czy m p l i k, i p e l n i r o l e f u n k c j i ) # ############################################ #Podstawowe o b i e k t y macierze #generujemy macierze w r o z n e j p o s t a c i #wprost ; o d d z i e l a w i e r s z e #s p a c j a a l b o, kolumny A= [ 1, 2 ; 4, 5 ; 6 7 ] #Mozna odwolywac s i e do elementu A( 1, 2 ) #Mozna d e f i n i o w a c macierz i n a c z e j B=[1 2 4 5 6 7 ] 24

#mozna o b l i c z a c wspolrzedne za pomoca wzoru x=[1+2, sqrt ( 2 ), 15/7] #mozna p o l i c z y c f u n k c j e od wektora sin ( x ) #warto d o w i e d z i c s i e j a k wywolac h e l p # do danej f u n k c j i np s i n #h e l p s i n #Jak nie znamy nazwy f u n k c j i mozemy sprobowac #h e l p i s i n #mozna zmienic element macierzy A(1,1)= 3 #czy r o z s z e r z y c z a k r e s x (6)=4.56 A(1,7)=10 #mozna o b e j r z e c j a k i e o b i e k t y sa w pamieci who #ze s z c z e g o l a m i whos #o b e j r z e c o b i e k t B B #usunac o b i e k t clear B #usunac clear who wszystko #mozna wygenerowac wektor ( macierz ) #przy pomocy operatora a : h : b #( g e n e r u j e wektor o elementach #od a do b z krokiem h tzn. # x ( i )=a +(i 1) h #d l a i = 1, 2,... t a k i e ze a+i h <=b ) #tu domyslny krok h=1 x=1:5 y = 0 : 0. 1 : 1 25

A=[1:4 ; 0 5 : 7 ; 3:0] #Mozna p o p e l n i c b l a d w #d e f i n i o w a n i u macierzy #wykomentowano bo j e s l i wystapi blad, to wykonanie #s k r y p t u p r z e z octave ' a s k r y p t u konczy s i e. #B=[1:3 ; 1 : 2 ] #mozna wykrawac pod macierze A1=A( 1 : 2, 2 : 3 ) #J e s l i chcemy pod macierz np. #z dwoma pierwszymi wierszami A2=A( 1 : 2, : ) #Mozna z macierzy budowac macierz #dodajemy kolumne do A2 [ A2, [ 1 ; 2 ] ] #dodajemy w i e r s z do A2 [ A2 ; 1 : 4 ] #a l b o j e s z c z e i n a c z e j [ A2 ; A2 ] [ A2, A2 ] [ A2,A2 ; A2, A2 ] #Mozna z macierzy zbudowac #nowa macierz w innym formacie #( a l e o tych samych elementach ) [m, n]= size (A2) # dostaniemy wymiary macierzy A2 #Budujemy wektor o elementach z macierzy A2 # kolumnowo tzn #w wektorze beda k o l e j n e kolumny z A2 reshape (A2,m n, 1 ) #i z powrotem tu ans wynik o s t a t n i e j o p e r a c j i reshape (ans,m, n) #Inne f u n k c j e zmieniajace porzadek w macierzy to #np. : #f l i p l r ( ) odwraca k o l e j n o s c kolumn, #f l i p u d ( ) odwraca k o l e j n o s c wierszy, #rot90 ( ) obraca macierz o w i e l o k r o t n o s c i 90 s t o p n i B=[1 2 ; 3 4 ] 26

f l i p l r (B) flipud (B) rot90 (B) #Jak widac mamy sporo mozliwosci. #Mozna mnozyc macierze p r z e z s i e b i e #o i l e wymiary s i e z g a d z a j a : #np. macierz p r z e z wektor x=1:4 #Trzeba miec wektor pionowy #( macierz jednokolumnowa ) #wiec transponujemy uzywajac " ' " : x=x ' f=a x #Mozna mnozyc macierz p r z e z macierz #( o i l e wymiary odpowiednie ) : B= [ 1 2 ; 3 4 ] C= [ 5 6 ; 1 1 ] B C #Czy kazdy element p i e r w s z e j #macierzy p r z e z odpowiedni #element d r u g i e j : B. C #Czy macierz p r z e z s k a l a r : 2 A #Mozna transponowac m a c i e r z kwadratowa : B=A' #Mozna p o l i c z y c norme e u k l i d e s o w a #tzn. druga wektora : norm( x, 2 ) #Czy pierwsza a l b o supremum : norm( x, 1 ) norm( x, ' i n f ' ) #Czasami nie warto wypisywac w s z y s t k i e g o #na e k r a n i e s r e d n i k ' ; ' po komendzie 27

#to zapewni : y=a x ; norm( y, 2 ) #mozna wygenerowac I=eye (10) #czy slynne macierze H=hilb ( 1 0 ) ; #macierz i d e n t y c z n o s c H i l b e r t a #mozna p r z e n i e s c d l u g i e wyrazenia y =[1,2,3,... 5 6 7 ] #I mozna z a p i s a c n i e k t o r e o b i e k t y w p l i k u. #Najpierw zobaczmy co mamy w pamieci #s e s j i who #Mozna z a p i s a c w p l i k u binarnym w s z y s t k i e #zmienne #( nie mozna o b e j r z e c danych poza octavem ) save binary dane. bin clear who load dane. bi n # Czy p o j a w i l s i e znowu y? Sprawdzamy : who #Zapisujemy konkretna macierz w p l i k u tekstowym #o danej nazwie dane. t x t : save a s c i i dane. txt y #Mozna t e r a z o b e j r z e c ten p l i k 28

#w jakims e d y t o r z e #l u b p r z y pomocy programu more #z l i n i i komend : np. : more dane. dat #Czyscimy zmienne z pamieci : clear #Sprawdzamy t e r a z zmienne w pamieci : who #Wczytujemy zmienne z p l i k u : load dane. txt #Powinnien pojawic s i e wektor y a l e pod jaka nazwa? who #Octave w c z y t a l macierz pod nazwa ' dane ', #a l e mozna zmienic nazwe np. : y=dane clear dane #W o c t a v i e mozna uzywac podstawowych obiektow #t a k i c h j a k p e t l e : #w h i l e ( warunek ) # # komendy # #endwhile #Przyklad u z y c i a : k=0; while ( k<3) k++; #k=k +1; endwhile k #Kolejna p e t l a to : #do # # komendy # #u n t i l ( warunek ) #P e t l a ta zawsze przynajmniej #raz s i e wykona. 29

#Przyklad : k=0; do k++; until ( k >3); k #Trzecia p e t l a to : #f o r i= wektor w a r t o s c i # # komendy # #endfor #Przyklad : a=0; for k =1:4, a+=k ; #a=a+k ; endfor a #I s t n i e j a t e z inne podstawowe #s t r u k t u r y programistyczne j a k : #I n t r u k c j a warunkowe #i f # # komendy # #e l s e ( opcja ) # # komendy # #e n d i f #Przyklad : k=input ( " podaj wartosc k=?\n" ) ; #t e r a z czeka na i n p ut i f ( k<10) disp ( "k<10" ) ; #d i s p w y s w i e t l a s t r i n g na e k r a n i e else disp ( "k >=10" ) ; endif #Tu warto poznac operatory l o g i c z n e octave ' a #o g o l n i e wartosc rozna od zera j e s t uznawana za prawde 30

#zero za nieprawde i f ( 2 ) a=3 else a=1; endif #&& AND l o g i c z n e " i " i =0; ( i <=10)&&(i > 10) ( i <10)&&(i >1) ( i < 1)&&(i >1) # OR l o g i c z n e " l u b " ( i < 1 0 ) ( i > 10) ( i < 1 0 ) ( i >1) ( i < 1) ( i >1) #! negacja ( o p c j o n a l n i e ~)! ( i >0)! ( i <=0) #operator rownosci nie b y c i a rownym j a k w C # = ta sam wartosc ;!= rozna wartosc (5==4) (5==(3+2)) (5!=6) (5!=(3+2)) #Kolejna s t r u k t u r a warta poznania #to i n s t r u k c j a s w i t c h ( t r o c h e inna n i z w C/C++) #s w i t c h ( zmienna ) # case { w a r t o s c i zmiennej } # komendy # # case { w a r t o s c i zmiennej } # komendy # #o t h e r w i s e # # komendy # #endswitch #Przyklad : 31

t a k n i e=menu( " t e s t switch ", " yes ", "no", "do not know" ) ; # menu wygodna f u n k c j a gdy oczekujemy wybrania o p c j i switch ( t a k n i e ) case {1} disp ( " yes " ) ; case {2} disp ( "no" ) ; case {3} disp ( "don ' t know" ) ; endswitch #inna i n s t r u k c j a na wprowadzanie danych z k l a w i a t u r y to #k b h i t #f u n k c j e #n a j p r o s t s z a function y=f ( x ) y=x+sin ( x ) ; endfunction #wywolujemy f ( 0 ) f ( 1 ) #f u n k c j a anonimowa f=@( x ) 1+x+sin ( x ) #Formalnie f tu j e s t #uchwytem do f u n k c j i a l e #wywolanie j e s t t a k i e same : #Wywolujemy : f ( 0 ) #p r o s t a g r a f i k a #s i a t k a rownomierna na [ 0, 3 ] x=linspace ( 0, 3 ) ; #wektorowo w a r t o s c i s i n na s i a t c e y=sin ( x ) ; #i cos z=cos ( x ) ; #n a j p r o s t s z y wykres plot ( y ) ; pause ( 1 ) ; #pause aby nie z n i k n e l o od razu 32

#Plot r y s u j e wykres #w a r t o s c i y wzgledem indeksow #L e p i e j narysowac wykres y #wzgledem punktow s i a t k i : plot ( x, y ) ; pause ( 1 ) ; #Mozemy z a m i e s c i c #dwa wykresy na jednym plot ( x, y, x, z ) ; pause ( 2 ) ; rysunku #Mozemy wykres podpisac plot ( x, y, " ; s i n ; ", x, z, " ; cos ; " ) ; pause ( 2 ) ; #I mozemy u s t a l i c k o l o r wykresu : plot ( x, y, "k ; s i n ; ", x, z, "g ; cos ; " ) ; pause ( 2 ) ; #Oczywiscie k o l o r y sa w j e z y k u a n g i e l s k i m #r red ; b b l u e ; k b l a c k ; g green #m magenta ; c cyan ; w white #Czy zmienic s t y l wykresy #zaznaczymy punkt p r z e c i e c i a p r z e z czerwony p l u s : zx=pi / 4 ; zy=cos ( pi / 4 ) ; plot ( x, y, "k ; s i n ; ", x, z, "g ; cos ; ", zx, zy, " r +; pkt przec. ; " ) ; pause ( 2 ) ; #i to t y l e podstawowych r z e c z y k t o r e t r z e b a #w i e d z i e c o macierzach i o c t a v i e #( i k t o r e p r z y s z l y mi do glowy ) echo o f f 3.5 Przykªadowa sesja matlaba W tym rozdziale przedstawimy przykªadow sesj matlaba. W przeciwie«stwie do octave'a, matlab posiada ±rodowisko graczne. Ogólnie matlaba wywoªujemy klikaj c na odpowiedni ikon, czy wybieraj c program matlab w odpowiednim menu systemu. W linuxie mo»emy te» 33

Rysunek 3.6: Terminal z wywoªanym ±rodowiskiem matlaba. wywoªa ten program z linii komend komend : matlab. Wówczas powinno otworzy si ±rodowisko matlaba, por. rysunek 3.6. Jak wida, w ±rodku mie±ci si Command Window, czyli okno komend, w którym mo»emy wpisywa komendy matlaba, z lewej strony wida podgl d bie» cego katalogu pod nazw Current Folder, z prawej strony, z góry pod nazw Workspace, wida okno ze spisem zdeniowanych zmiennych oraz z doªu, z lewej strony - maªe okno historii komend, por. rysunek 3.7. Ustawienia mo»na zmienia, np. mo»na cz ± okien ukry, czy odª czy. Po szczegóªy odsyªam do pomocy do matlaba. Wpiszmy kilka komend takich samych jak w octave'ie w okno komend: A=[1:3; 2 4 7 ] B=[A; A] W oknie komend wida,»e wynik jest taki sam jak w octave'ie. Natomiast w oknie Workspace widzimy,»e w sesji s zdeniowane dwie zmienne A,B, a w oknie historii widzimy dwie nasze komendy, por rysunek 3.7. W ±rodowisku matlaba najwa»niejsze jest okno komend, które peªni t sam rol co terminal z wywoªanym octavem. Pozostaªe okna peªni rol pomocnicz ale niew tpliwie ±rodowisko matlaba uªatwia prac. Dalej nie b dziemy si zajmowa szczegóªowo matlabem, ale zdecydowana wi kszo± 34

Rysunek 3.7: Terminal z wywoªanym ±rodowiskiem matlaba po wykonaniu komendy. kodów z tego skryptu dziaªa zarówno w octave'ie, jak i w matlabie. 35

Rozdziaª 4 Arytmetyka zmiennopozycyjna Wszystkie obliczenia w octavie s wykonywane w arytmetyce zmiennopozycyjnej (inaczej - arytmetyce ) podwójnej precyzji (double) - cho w najnowszych wersjach octave'a istnieje mo»liwo± u»ywania zmiennych typu single, czyli zmiennych w pojedynczej precyzji arytmetyki zmiennopozycyjnej. Dokªadno± wzgl dna arytmetyki podwójnej precyzji wynosi ok. 10 16, a dokªadno± arytmetyki pojedynczej precyzji wynosi ok. 10 7. W octavie jest kilka funkcji zwi zanych bezpo±rednio z wªasno±ciami arytmetyki, mianowicie: eps - zwraca epsilon maszynowy arytmetyki, tzn. najmniejsz liczb ɛ tak,»e fl(ɛ + 1) > 1. Tu fl() oznacza wynik dziaªania w arytmetyce zmiennopozycyjnej. Octave domy±lnie dziaªa na liczbach zmiennopozycyjnych w podwójnej precyzji arytmetyki wi c oczywi±cie eps zwróci nam epsilon maszynowy dla arytmetyki podwójnej precyzji. Z kolei wywoªanie eps(a) - dla a liczby zwróci odlegªo± od a do najbli»szej wi kszej od a liczby w arytmetyce zmiennopozycyjnej single (x) - funkcja konwertuj ca zmienn np. typu double, czyli w podwójnej precyzji arytmetyki, do zmiennej typu single, czyli w pojedynczej precyzji arytmetyki zmiennopozycyjnej double(x) - funkcja konwertuj ca zmienn do typu zmiennej w podwójne precyzji arytmetyki, czyli odwrotna do funkcji single (x). Podwójna precyzja jest w octavie domy±lna, wi c wydaje si»e, gªównym zastosowaniem tej funkcji jest konwersja zmiennej typu single z powrotem do typu double Zastosujmy funkcj eps - sprawd¹my, czy rzeczywi±cie eps + 1 w jest wi ksze od jeden, a np. eps/2 + 1 ju» nie - tu fragment kodu octave'a: 36

i f ( ( eps+1)>1) printf ( "%g+1>1 w f l \n", eps ) ; else printf ( "%g n i e j e s t epsilonem maszynowym\n", eps ) ; endif i f ((1+eps/2)==1) printf ( " f l (%g+1)=1\n", eps / 2 ) ; endif Rysunek 4.1: Dwa sposoby obliczania f(x) = 1 cos(x) w arytmetyce zmiennopozycyjnej. Przy pomocy eps mo»emy znale¹ najmniejsz liczb dodatni w arytmetyce podwójnej precyzji: octave :33> x=eps ( 0 ) x = 4.9407 e 324 octave :34> Sprawd¹my: 37

octave :34> x/2>0 ans = 0 octave :35> Sprawd¹my, jak dziaªaj funkcje zwi zane ze zmian precyzji arytmetyki single i double - tu fragment sesji octave'a: b=s i n g l e ( eps ) i f ( ( s i n g l e ( eps)+1)==1) printf ( " f l ( s i n g l e ( eps)+1)==1\n" ) ; endif i f ( ( double (b)+1)>1) printf ( " f l ( double ( s i n g l e ( eps ))+1) >1.\n" ) ; endif #a t e r a z e p s i l o n maszynowy p r e c y z j a pojedyncza eps ( s i n g l e ( 1 ) ) Otrzymali±my,»e epsilon maszynowy w podwójnej precyzji wynosi: 2.2204e 16, a w pojedynczej precyzji arytmetyki: 1.1921e 07. Teraz znajdziemy najmniejsz liczb dodatni w arytmetyce pojedynczej precyzji: octave :52> eps ( s i n g l e ( 0 ) ) ans = 1.4013 e 45 octave :53> 4.1 Redukcja cyfr przy odejmowaniu Inn wªasno±ci arytmetyki, która mo»e powodowa problemy, jest tzw. redukcja cyfr przy odejmowaniu liczb tego samego znaku. 4.1.1 Przykªad Przetestujmy to na dwóch równowa»nych wzorach na funkcj f(x) = cos(x) 1 = 1 2 sin 2 (0.5 x) 1 = 2 sin 2 (0.5 x). Przetestujmy oba wzory dla x bliskich zeru: f 1=@( x ) cos ( x) 1; f 2=@( x ) 2 sin ( 0. 5 x ). sin ( 0. 5 x ) ; a=1e 7; 38

x=linspace( a, a, 1 0 0 0 ) ; plot ( x, f 1 ( x ), " ; wzor 1 ; ", x, f 2 ( x ), " ; wzor 2 ; " ) ; Wykres na rysunku 4.1 pokazuje,»e wzór drugi jest lepszy ze wzgl du na arytmetyk. Mo»emy oczywi±cie policzy te» bª d pomi dzy wynikami: er=f 1 (1 e 7) f 2 (1 e 7) Ró»nica 3.9964e 18 jest pozornie maªa, bo rz du 10 18. Jednak f2(10 7 ) jest rz du 10 14, wi c dokªadno± wzgl dna jest rz du 10 4. Jest to bardzo maªa dokªadno±, jak na arytmetyk podwójnej precyzji, w której bª d wzgl dny oblicze«jest na poziomie 10 16. Mo»emy policzy wzgl dny bª d wzgl dem f2(10 7 ): abs ( ( f 1 (1 e 7) f 2 (1 e 7))/ f 2 (1 e 7)) i otrzymamy 7.9928e 04. 4.1.2 Obliczanie funkcji z rozwini cia w szereg Inny przykªad na problemy redukcj cyfr, to obliczanie warto±ci funkcji korzystaj ce z rozwini cia w szereg o wyrazach o ró»nych znakach. Rozpatrzmy funkcj sin(x), która ma nast puj ce rozwini cie w globalnie zbie»ny szereg: sin(x) = x x3 3! + x5 5! x7 7! +.... Zaimplementujmy w octavie funkcj obliczaj c przybli»enie funkcji matematycznej sin(x), korzystaj ce z odpowiedniego obci cia tego rozwini cia dla dowolnego x rzeczywistego. Implementacja tej funkcji b dzie wektorowa, tzn. wywoªanie jej z macierz X jako argumentem zwróci macierz przybli»e«warto±ci sin na odpowiednich elementach macierzy X. function y=n a s z s i n ( x,n=300) #obliczamy wartosc s i n ( x ) #k o r z y s t a j a c z r o z w i n i e c i a w s z e r e g : #x x^3/3!+x ^5/5!...( 1)^( k+1) x^{2k+1}/(2k +1)!+... #N i l o s c wyrazow w s z e r e g u domyslnie 300 kx= x. x ; y=x ; for k=1:n, x=x. kx. / ( ( 2 k ) (2 k +1)); y+=x ; endfor endfunction 39

Rysunek 4.2: [11π, 13π] Wykres funkcji sinus obliczanej z rozwini cia w szereg na Przetestujmy nasz funkcj na [ π, π]. w=linspace( pi, pi ) ; plot (w, sin (w), " ; s i n ; ",w, n a s z s i n (w), " ; n a s z s i n ; " ) Na wykresie nie wida ró»nicy. Przetestujmy nasz funkcj dla wi kszych argumentów: [11 π, 13 π]: w=linspace (11 pi,13 pi ) ; plot (w, sin (w), " ; s i n ; ",w, n a s z s i n (w), " ; n a s z s i n ; " ) Wida z rysunku 4.2,»e rozwijanie w szereg nie zawsze ma sens z powodu wªasno±ci arytmetyki zmiennopozycyjnej. Mo»na postawi pytanie, czy w rozwini ciu nie byªo za maªo wyrazów szeregu? w=linspace (11 pi,13 pi ) ; plot (w, sin (w), " ; s i n ; ",w, n a s z s i n (w, 1 0 0 0 0 0 ), " ; n a s z s i n ; " ) Prosz sprawdzi,»e zwi kszenie ilo±ci wyrazów szeregu nic nie zmieniªo. 40

Rysunek 4.3: Wykres bª du w skali póªlogarytmicznej obliczania funkcji sinus z rozwini cia w szereg Popatrzmy, jak ro±nie bª d na skali logarytmicznej, por. rysunek 4.3: w=linspace (eps,13 pi, 1 0 0 0 ) ; semilogy (w, abs ( sin (w) n a s z s i n (w) ) ) Bª d w skali logarytmicznej ro±nie liniowo. To oznacza,»e bª d ro±nie wykªadniczo. 4.1.3 Obliczanie przybli»onej warto±ci pochodnej Kolejnym przykªadem sytuacji, w której mog pojawi si problemy, to obliczanie pochodnej za pomoc ilorazów ró»nicowych, czyli wprost z denicji. Przetestujmy przybli»one obliczanie pochodnej z denicji, czyli ze wzoru: f (x) f(x + h) f(x). h Wydawaªoby si,»e im h jest mniejsze, tym lepsze przybli»enie otrzymamy. Ale np. dla f(x) = sin(x) z x = 1 i h < eps, np. dla h = eps/2, otrzymamy 41

Rysunek 4.4: Wykres bª du przy obliczaniu pochodnej ilorazem ró»nicowym dsin() dla x = 1 w zale»no±ci od h. w arytmetyce : Sprawd¹my: > h=eps/2 h = 1.1102 e 16 > sin (1+h) sin ( 1 ) ans = 0 #c z y na pewno >sin (1+h)==sin ( 1 ) ans=1 fl(x + h) = fl(1 + h) = 1. Czyli rzeczywi±cie h nie mo»e by dowolnie maªe. Spróbujmy znale¹ dla tego przykªadu optymalne h postaci h = 2 n eksperymentalnie. f=@sin ; h=1;x=1; 42

Rysunek 4.5: Wykres bª du przy obliczaniu pochodnej ilorazem ró»nicowym dsin() dla x = 1 w zale»no±ci od h w skali póªlogarytmicznej fx=f ( x ) ; dfx=cos ( x ) ; er=zeros ( 5 3, 1 ) ; eropt=er (1)=abs ( ( f ( x+h) fx )/h dfx ) ; hopt=h ; n=nopt =0; while (h>=eps ) h/=2; n++; er (n)=abs ( ( f ( x+h) fx )/h dfx ) ; i f ( er (n)< eropt ) eropt=er (n ) ; nopt=n ; hopt=h ; endif endwhile printf ( " optymalne h=%g=2^( %d)\n", hopt, nopt ) ; plot ( er ) ; 43

Na wykresie nie wida dokªadnie, por. rysunek 4.4, gdzie jest minimum. Na wykresie w skali póª-logarytmicznej minimum jest widoczne, por. rysunek 4.5: semilogy ( er ) Widzimy,»e optymalne h w tym przypadku jest rz du 2 27, czyli ok 10 9. Mo»na powtórzy te same obliczenia dla przybli»ania pochodnej za pomoc tzw. ilorazu centralnego: f (x) f(x + h) f(x h). 2h W kolejnych rozdziaªach b dziemy omawiali wpªyw arytmetyki zmiennopozycyjnej na wyniki oblicze«dla konkretnych zada«. 44

Rozdziaª 5 Interpolacja wielomianowa i splajnowa 5.1 Wielomiany w octavie W octavie istnieje caªa gamma funkcji zwi zanych z wielomianami: polyval( ) - funkcja pozwalaj ca oblicza warto± wielomianu zadanego w bazie pot gowej dla danej warto±ci x, czy caªej macierzy warto±ci polyt( ) - funkcja znajduj ca wspóªczynniki wielomianu zadanego stopnia najlepiej dopasowanego do zadanej tabelki punktów. polyinteg( ) - zwraca wspóªczynniki wielomianu b d cego caªk nieoznaczon z danego wielomianu polyderiv( ) - zwraca wspóªczynniki wielomianu b d cego pochodn z danego wielomianu roots( ) - zwraca zera wielomianu conv(a,b) - zwraca wspóªczynniki wielomianu b d cego iloczynem wielomianów o wspóªczynnikach odpowiednio z wektorów a, b B dziemy korzystali przede wszystkim z dwóch pierwszych funkcji. We wszystkich tych funkcjach przyjmowane jest,»e rozpatrujemy wspóªczynniki wielomianu w bazie pot gowej, ale w nast puj cej kolejno±ci: (x n, x n 1,..., 1). 45

Wspóªczynniki indeksowane s od jedynki, tzn. wielomian stopnia nie wi kszego od n: n+1 w(x) = a k x n+1 k k=1 jest reprezentowany przez wektor wspóªczynników: (a 1,..., a n+1 ). Je±li chcemy policzy warto± w w danym punkcie x, czy ewentualnie dla tablicy punktów umieszczonych w macierzy X, wywoªujemy polyval(a,x) lub polyval(a,x). Tak wi c, aby narysowa wykres funkcji x 3 2x + 1 na [ 3, 4] mo»na wykona nast puj c sekwencj komend : a =[1,0, 2,1]; #d e f i n i u j e m y wsp. x=linspace ( 3,4);#s i a t k a wx=polyval ( a, x ) ; #wartosc w na plot ( x, wx ) ; #wykres s i a t c e 5.2 Interpolacja wielomianowa Interpolacja wielomianowa polega na tym,»e szukamy funkcji p z pewnej przestrzeni wielomianów (zazwyczaj wielomianów stopnia nie wi kszego od n), które w tych punktach speªniaj odpowiednie warunki interpolacyjne, tzn. p oraz jej pochodne maj w tych punktach zadane warto±ci. 5.2.1 Interpolacja Lagrange'a W interpolacji wielomianowej Lagrange'a dla zadanych n+1 ró»nych punktów x k i warto±ci y k = f(x k ) szukamy wielomianu p(x) stopnia co najwy»ej n takiego,»e speªnione s nast puj ce warunki interpolacyjne: f(x k ) = p(x k ) = y k k = 1,..., n + 1. Funkcja polyt(x,y,n) znajduje wspóªczynniki wielomianu p w bazie pot gowej dla wektorów x, y dªugo±ci n + 1. Wa»ne aby warto±ci w x byªy ró»ne. Przetestujmy t funkcj dla nast puj cych danych: x = ( 1, 0, 2, 4), y = (1, 1, 2, 1): x =[ 1,0,2,4]; y =[1,1,2, 1]; a=polyfit ( x, y, 3 ) ; s=linspace ( 2,5); plot ( s, polyval ( a, s ), x, y, " r +;war i n t e r p ; " ) 46

Rysunek 5.1: Wykres wielomianu interpolacyjnego. Czerwone plusy - warunki interpolacyjne Wida na rysunku 5.1,»e wielomian speªnia warunki interpolacyjne. Mo»emy to sprawdzi te» obliczeniowo: max(abs ( y polyval ( a, x ) ) ) Otrzymali±my wynik: bª d w w zªach jest równy prawie zero. Przetestujmy polyt(x,y,n) dla du»ych n dla w zªów równoodlegªych na [0, 1] i losowe warto±ci y z [ 1, 1], nast pnie policzmy bª d w w zªach w zale»no±ci od N: N=100; er=zeros (N+1,1); for k= 0 :N, x=linspace ( 0, 1, k+1); y=2 (rand ( size ( x )) 0.5); a=polyfit ( x, y, k ) ; er ( k+1)=max(abs ( y polyval ( a, x ) ) ) ; endfor 47

max( er ) Widzimy,»e mo»emy otrzyma niepoprawny wynik dla du»ych N. Wynika to ze zªych wªasno±ci algorytmu stosowanego przez octave'a ze wzgl du na zaburzenia powodowane przez niedokªadne obliczenia w arytmetyce zmiennopozycyjnej. Zbadajmy bª d pomi dzy funkcj, a jej wielomianem interpolacyjnym. Na pocz tek rozpatrzmy analityczn funkcj f(x) = sin(x) i w zªy równoodlegªe, oraz norm supremum na odcinku [ 4, 6]. Norm supremum: g,[a,b] := g(t) t [a,b] przybli»ymy poprzez dyskretn norm na siatce N równomiernie rozªo»onych punktów na tym odcinku [a, b], czyli z h = (b a)/n: f h,,[a,b] = max f(a + k h) k x =[ 1,0,2,4]; y =[1,1,2, 1]; a=polyfit ( x, y, 3 ) ; s=linspace ( 2,5); plot ( s, polyval ( a, s ), x, y, " r +;war i n t e r p ; " ) 5.2.2 Interpolacja Hermite'a Rozpatrzmy teraz zadanie interpolacji Hermite'a. W interpolacji wielomianowej Hermite'a dla zadanych n + 1 ró»nych punktów x k i naturalnych krotno±ci w zªów p k szukamy wielomianu w(x) stopnia co najwy»ej N dla N = n k=0 p k 1 takiego,»e speªnione s nast puj ce warunki interpolacyjne: w (j) (x k ) = y k,j k = 1,..., n + 1, j = 0,..., p k 1. Tutaj y k,j to N + 1 zadanych warto±ci. W octavie nie ma funkcji realizuj cej interpolacje Hermite'a. Ale czy w szczególnych przypadkach nie mo»emy ªatwo rozwi za tego problemu korzystaj c z odpowiednich funkcji octave'a? Rozpatrzmy przypadek w zªów tej samej krotno±ci; np. n ró»nych dwukrotnych w zªów. 48

Rysunek 5.2: Interpolacja Hermite'a sin(3x) - dwa dwukrotne w zªy 1, 1 Chcemy znale¹ wspóªczynniki wielomianu N k=1 a kx k dla N = 2(n + 1) takie,»e w(x k ) = f(x k ), w (x k ) = f (x k ). Czyli rozwi zanie speªnia nast puj cy ukªad równa«liniowych: N k=1 N a k x k j = f(x k ) k=0 j = 0,..., n ka k x k 1 j = f (x k ) j = 0,..., n. Utwórzmy macierz tego ukªadu z pomoc funkcji vander(x), która tworzy macierz Vandermonde'a dla w zªów podanych w wektorze x: function [ a,c, f ]= interpolyh ( x, y, dy ) #tworzy w s p o l c z y n n i k i wielomianu Hermite ' a d l a #wezlow dwukrotnych z x #y= w a r t o s c i w wezlach x ( wektor pionowy ) 49

#w a r t o s c i pochodnej w wezlach x ( wektor pionowy ) #output : w s p o l c z y n n i k i wielomainu w b a z i e potegowej # ( Zgodne z p o l y v a l ( ) ) #C opcja macierz n=length ( x ) ; N=2 n 1; A=vander ( x,n+1); D=diag (N: 1 : 0 ) ; B=zeros ( size (A) ) ; B ( :, 1 :N)=A( :, 2 :N+1); B=B D; C=[A;B ] ; f =[y ; dy ] ; a=c\ [ y ; dy ] ; endfunction ukladu Rysunek 5.3: Interpolacja Hermite'a sin(3x) - trzy dwukrotne w zªy 1, 0, 1 Na pocz tku przetestujmy t funkcj dla w zªów 1, 1 dwukrotnych i funkcji sin(3 x). 50

x =[ 1;1]; f=@( x ) sin (3 x ) ; df=@( x ) 3 cos (3 x ) ; y=f ( x ) ; dy=df ( x ) ; a=interpolyh ( x, y, dy ) ; z=linspace ( 1. 1, 1. 1 ) ; plot ( z, polyval ( a, z ), " ; w i e l H; ", z, f ( z ), " ; f ; ", x, y, " r+" ) ; Z wykresu funkcji i wielomianu widzimy,»e wielomian przecina wykres i jest styczny w punktach 1, 1, por. rysunek 5.2. Zobaczmy co si stanie w przypadku trzech w zªów. Testujemy funkcj dla w zªów 2, 0, 2 dwukrotnych i sin(3 x). x =[ 1;0;1]; f=@( x ) sin (3 x ) ; df=@( x ) 3 cos (3 x ) ; y=f ( x ) ; dy=df ( x ) ; a=interpolyh ( x, y, dy ) ; z=linspace ( 1. 2, 1. 2 ) ; plot ( z, polyval ( a, z ), " ; w i e l H; ", z, f ( z ), " ; f ; ", x, y, " r+" ) ; Z rysunku 5.3 wida,»e funkcja dziaªa poprawnie równie» w tym przypadku. 5.3 Interpolacja zespolona. Algorytm FFT W tym rozdziale omówimy krótko interpolacj zespolon, ale tylko w przypadku okre±lonych w zªów zespolonych równomiernie rozmieszczonych na sferze jednostkowej. Chcemy znale¹ wspóªczynniki zespolone a k C, k = 0,..., N takie,»e N a k zj k = b k k=0 j = 0,..., N dla danych zespolonych b k i z j = exp ( ) 2π i j N+1 dla j = 0,..., N, czyli pierwiastków z jedynki stopnia N + 1. Równowa»nie mo»emy to zadanie sformuªowa jako zadanie znalezienia a k takich,»e N ( ) 2π i j k a k exp = b k j = 0,..., N. N + 1 k=0 51

Okazuje si,»e rozwi zanie mo»emy wyrazi poprzez operator dyskretnej transformaty Fouriera, czy równowa»nie jako mno»enie przez macierz F N+1 = 1 N+1 (ωk l N+1 )N k,l=0 : a = F N+1 b gdzie a = (a k ) N k=0, b = (b k ) N k=0, a ω N+1 = exp ( ) 2π i N+1. Mno»enie przez macierz F N+1 mo»na szybko wykona z wykorzystaniem algorytmu szybkiej transformacji Fouriera, czyli FFT (Fast Fourier Transform). Odpowiednia wersja algorytmu FFT sªu»y te» szybkiemu mno»eniu przez macierz odwrotn do F N+1 : F 1 N+1 = (N + 1)F N+1 = (ω k l N+1) N k,l=0. Obliczaj c warto± wielomianu k a kz k w punktach z j, czy równowa»nie warto±ci wielomianu trygonometrycznego N k=0 a k exp (i k x) w punktach x j = 2π j, to przyjmuj c b N+1 j = k a kzj k otrzymujemy: b = F 1 N+1 a. Warto doda,»e cz sto macierz DFT deniuje si bez czynnika 1 N+1, oczywi±cie wtedy macierz odwrotna te» musi by odpowiednio przeskalowana. Funkcja f f t ( ) sªu»y w octave'ie mno»eniu przez macierz F N+1. Jej najprostsze wywoªanie to a=f f t (b) Sprawd¹my, czy funkcja t () oblicza warto± DFT zgodnie z nasz denicj. Policzmy F 4 (4, 0, 0, 0) T, powinni±my otrzyma wektor samych jedynek: a=f f t ( [ 4 ; 0 ; 0 ; 0 ] ) a otrzymali±my: a = 4 + 0 i 4 + 0 i 4 + 0 i 4 0 i To oznacza,»e funkcja t () oblicza warto± mno»enia przez (N + 1) F N+1. Z kolei funkcja it () powinna oblicza mno»enie przez macierz odwrotn do (N + 1) F N+1. Sprawd¹my, jak to dziaªa: 52