Metody numeryczne Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Elektrotechnika stacjonarne-dzienne pierwszego stopnia z tyt. inżyniera Informatyka stacjonarne-dzienne drugiego stopnia z tyt. magistra inżyniera Wstęp do programowania, tworzenie skryptów Laboratorium, prowadzący: mgr inż. Błażej Cichy Rok akademicki 2010/2011 1 Wstęp W Matlab oferuje język skryptowy zawierający typowe instrukcje jak if, while, for. Programy w Matlab ie przyjmują dwie postacie: skryptów które można nazywać listą instrukcji do wykonania oraz m-funkcji reprezentujące sobą instrukcje zapisane w postaci funkcji przyjmującej argumenty oraz zwracającej wartości. W odróżnieniu od innych języków programowania funkcje w Matlab ie mogą zwracać więcej niż jedną wartości. 1.1 Instrukcja warunkowa Ogólny zapis syntaktyczny instrukcji warunkowej przedstawia się następująco: if expression elseif expression else W instrukcji w opisie warunku stosujemy następujące operatory relacji: ==, <, >, <=, >=, ~=. Operatory logiczne są następujące: && (and),, (or), ~ (not). 1.2 Instrukcja wielokrotnego wyboru Zapis instrukcji wielokrotnego wyboru, czyli instrukcji odpowiadającej konstrukcji case z języka Pascal albo switch z języka C przedstawia się następująco: switch switch_expr casa case_expr, casa {case_expr1, case_expr2, case_expr3,...}... otherwise, 1
Wstęp do programowania, tworzenie skryptów 2 1.3 Pętla for Ogólny zapis syntaktyczny jest następujący: for variable = expr, statement... statement Bardzo często pętla for korzysta z wyrażenia zakresu. Czego przykładem są następujace linie kodu, gdzie wyświetlamy liczby od jedności do dziesięciu: for i=1:10, disp(i) 1.4 Pętla while Zapis syntaktyczny pętli while jest następujący: while expression 1.5 Funkcje w Matlabie Funkcje są definiowana w oddzielnych plikach np.: poniższy kod jest zawarty w jednym pliku: function [mean,stdev] = stat(x) n = length(x); mean = avg(x,n); stdev = sqrt(sum((x-avg(x,n)).^2)/n); Inny przykład jest następujący: function ret_val=fhad2() ret_val=(1/sqrt(2))./ [1 1 ; 1-1]; Trywialny przykład funkcji które nie przyjmuje argumentów i nie zwraca żadnych wartości: function []=moja_fnc() disp( moja super funkcja )
Wstęp do programowania, tworzenie skryptów 3 2 Zadania 1. Napisać skrypt Matlaba, który zmiennej a przypisze wartość 11. Wywołać ten skrypt i sprawdzić poprawność wyniku 2. Napisać skrypt który każdemu elementowi a i,j macierzy A przypisze wartość i+j 2i. Wskazówka: użyć funkcji size. 3. Napisać funkcję o nazwie zwieksz przyjmującą jeden argument x i zwracającą argument powiększony o jeden (tj. zwracającą x + 1). 4. Uzupełnić funkcję z zadania 3 o pomoc następującej treści: ZWIEKSZ Zwieksza swoj argument o jeden. Funkcja ZWIEKSZ(x) wykonuje dzialanie ZWIEKSZ(x)->x+1. Przyklad: ZWIEKSZ(2) = 3 5. Napisać funkcję delta wyznaczającą wyróżnik trójmianu kwadratowego postaci y = ax 2 + bx + c wg. wzoru = b 2 4ac. Funkcję uzupełnić o opis Pomocy wg. przykładu z zadania 4. 6. Napisać funkcję do wyznaczania zer trójmianu kwadratowego przy wykorzystaniu funkcji delta z zadania 5. Wykorzystać wzór: x 1,2 = b± 2a 7. Napisać skrypt, którego zadaniem będzie zapytanie użytkownika o współczynniki a, b, c trójmianu kwadratowego postaci y = ax 2 + bx + c a następnie wyświetlenie wszystkich rzeczywistych zer tego trójmianu (jeśli istnieją) lub informacji o ich braku. W programie wykorzystać funkcję delta z zadania 5. Skrypt ten ma działać aż do wprowadzenia współczynnika a równego 0. Wskazówka: użyć funkcji input 8. Napisać funkcję który każdemu elementowi a i,j macierzy A przypisze wartość i+j 2i. Jako argument funkcji ma zostać podana tylko macierz A. 9. Napisać funkcję wolny kwadrat o argumencie x (i elementach x i ) będącym wektorem N liczb wyznaczającą wartość f(x i ) = x 2 i dla i = 1, 2, 3,..., N. Zadanie wykonać przy pomocy pętli metodą element po elemencie. Wskazówka: Liczbę elementów wektora można wyznaczyć przy pomocy funkcji length. 10. Napisać funkcję szybki kwadrat o argumencie x (i elementach x i ) będącym wektorem N liczb wyznaczającą wartość f(x i ) = x 2 i dla i = 1, 2, 3,..., N. Zadanie wykonać bez pomocy pętli metodą tablicową. 11. Porównać czas działania funkcji wolny kwadrat i szybki kwadrat dla dużych wartości N. Do porównania użyć instrukcji tic i toc. Porównać wynik z uzyskanym przy pomocy polecenia prof ile 12. Porównać następujące implementacje algorytmu wyznaczającego wartość N-tej liczby Fibonacciego. Algorytm 1:
Wstęp do programowania, tworzenie skryptów 4 function f=fibon1(n) %drukuje kolejne liczby f=zeros(n, 1); f( 1 )=1; f( 2 )=1; for k=1:n f( k ) = f( k - 1 ) + f( k - 2 ) Algorytm 2: function f=fibon2(n) %drukuje te same liczby ale znacznie wolniej if n <= 1 f = 1 else f = f( n - 1 ) + f( n - 2 ) Do porównania użyć instrukcji tic i toc. Porównać ich działanie z instrukcją prof ile. 13. Na podstawie tablicowania funkcji sin sprawdzić czas wykonana się dwóch poniższych skryptów: Skrypt m1.m: tic; start = 0; stop = 2*pi; accuracy = 1e4; h = (stop - start) / accuracy; for i=1:accuracy x( i ) = ( i - 1 ) * h ; y( i ) = sin( x( i ) ); s=toc; disp([ Czas trwania: num2str( s )]); Skrypt m2.m: tic; start = 0; stop = 2 * pi; accuracy=1e4; x = start : ( stop - start ) / accuracy : stop; y = sin( x ); s = toc; disp([ Czas trwania: num2str( s )]); Sprawdzić jak zmienia się czas wykonania dla różnych dokładności 1e2, 1e3, 1e4, 1e5, 1e6. Wyniki przedstawić na wykresie.
Wstęp do programowania, tworzenie skryptów 5 Literatura [1] Bjärck Ake i Dahlquist Germund. Metody numeryczne. PWN, Warszawa, 1987. [2] Jerzy Brzózka i Lech Dorobczyński. Programowanie w MATLAB. Warszawa, Wydanie I, 1998. [3] Zenon Fortuna, Bohdan Macukow i Janusz Wąsowski. Metody numeryczne. WNT, Warszawa, 1995. [4] Jerzy Klamka i in. Metody numeryczne. Politechnika Śląska, Gliwice, 1998. [5] David Kincaid i Ward Cheney. Analiza numeryczna. WNT, Warszawa, 2006. [6] Anna Kamińska i Beata Pańczyk. Matlab. Ćwiczenia z..., Przykłady i zadania. Warszawa, Wydanie I, 2002. [7] Wanat Kazimierz. Algorytmy numeryczne. Helion, Gliwice, 1994. [8] Bogumiła Mrozek i Zbigniew Mrozek. MATLAB i Simulink. Poradnik użytkownika. Wydanie II, 2004. [9] Jurij Povstenko. Wprowadzenie do metod numerycznych. Akademicka Oficyna Wydawnicza EXIT, Warszawa, Wydanie drugie poprawione i uzupełnione, 2005. [10] Rudra Pratap. MATLAB 7 dla naukowców i inżynierów. PWN, 2007. [11] Wiesława Regel. Wykresy i obiekty graficzne w MATLAB. Warszawa, Wydanie I, 2003. [12] Marcin Stachurski. Metody numeryczne w programie Matlab. Warszawa, Wydanie I, 2003.