Informatyka Transport Wykład 6 Matlab c.d. " Praca wsadowa (m- pliki) " Praca wsadowa (m- pliki) " Instrukcja warunkowa if " Tablice i ich zastosowania 1 M-pliki W Matlab-ie można zapisać tekst ciągu instrukcji w pliku tekstowym ASCII o rozszerzeniu m nazwa.m (tzw. m-pliki), a następnie wykonać plik - instrukcje wykonywane a następnie wykonać plik - instrukcje wykonywane są kolejno jedna po drugiej. Matlab zawiera własny edytor plików ASCII. Okno edytora m-plików wykonanie m-pliku Uwagi praktyczne Efekty wykonania m-pliku widoczne Command Window Mogą być wykonywane tylko m-pliki z katalogu roboczego (Current Directory) widoczne na liście w oknie chociaż istnieje też możliwość dodania wielu katalogów do listy katalogów roboczych Polecenia w m-pliku piszemy dla czytelności w osobnych Polecenia w m-pliku piszemy dla czytelności w osobnych wierszach, choć można w jednym wierszu, oddzielając je przecinkiem (lub średnikiem) Jeśli średnik umieścimy na końcu polecenia to nie ma echa instrukcji na ekranie Command Window Po znaku % piszemy komentarze ignorowane przez Matlaba Uwaga na błędy instrukcji! Interakcja z użytkownikiem (instrukcja wejścia) zmienna = input('tekst zachęty'); Działanie: skrypt się zatrzymuje i czeka na podanie wartości dla zmiennej a = input('Podaj a:'); b = input('Podaj b:'); c = input('Podaj c:'); Przykładowy tekst w m-pliku: clc clear a=input('Podaj a:'), b=input('Podaj b:'),c=input('Podaj c:'), delta= b*b-4*a*c; disp('Współczynniki równania kwadratowego:') disp(a),disp(b),disp(c) disp('Wartość delta wynosi:'),disp(delta) Efekt wykonania m-pliku w Command Window Współczynniki równania kwadratowego: 4.000000 -3.400000 2.450000 Wartość delta wynosi: -27.640000 Instrukcja warunkowa Instrukcja służy do sprawdzenia warunków i alternatywnego wykonywania różnych grup instrukcji gdy dany warunek będzie prawdziwy (true) Postać ogólna if warunek1 instrukcje (wykonywane gdy jest spełniony warunek1) elseif warunek2 instrukcje (wykonywane gdy jest spełniony warunek2) elseif warunek3 elseif warunek3 instrukcje (wykonywane gdy jest spełniony warunek3) & itd else instrukcje (wykonywane gdy niespełnione oba warunki) end Uwaga1: Bloki else i elseif mogą zostać pominięte. Uwaga2: Gdy kolejny warunek jest prawdziwy, pozostałe warunki nie są już sprawdzane Warunek to połączenie dwóch wyrażeń arytmetycznych znakami: > < >= <= == (równe) != (nie równe) Dwa warunki można związać: koniunkcja warunków: znak && koniunkcja warunków: znak && alternatywa warunków: znak || Przykłady warunków: a == 0 (równe UWAGA: dwa znaki =) b2*a >= 5 x ~= 5 (różne od) Przykład 1 a = 1; b = 6; c = 3; delta = b^2-4*a*c; if delta<0 disp ('delta jest ujemne') % wyświetlenie tekstu elseif delta==0 elseif delta==0 disp('delta równe 0') else disp(delta) % wyświetlenie wartości delta end; Przykład 2 Test zawierania się liczby w przedziale: a = input('Podaj liczbę:'); if (a>6) && (a<10) disp('a w przedziale (6, 10)') else else disp('a poza przedziałem (6, 10)') end TABLICE Tworzenie tablicy wektor wierszowy M1=[1 2 3 4 5] lub M1=[1, 2, 3, 4, 5] wektor kolumnowy wektor kolumnowy M2=[1; 2; 3; 4; 5] tablica dwuwymiarowa M3 = [1 2 3; 2 1 1; 1 0 0] 11 Metoda generowania tablicy o elementach ciągu arytmetycznego x=0:2:10 %generowanie wektora od 0 do 10 co 2 % wart_pocz:krok:wart_koncowa 0 2 4 6 8 10 x= 0:0.1:2 %dozwolona wartość dziesiętna kroku x= 0:0.1:2 %dozwolona wartość dziesiętna kroku Można pominąć krok: x=0:10 %generowanie wektora od 0 do 10 co 1 % wart_pocz:wart_koncowa 0 1 2 3 4 5 6 7 8 9 10 12 Podobnie w tablicach wielowymiarowych M = [0:5 ; 10:15] %wartość początkowa: wartość końcowa (krok=1) 0 1 2 3 4 5 10 11 12 13 14 15 ale UWAGA! M = [0:5; 10:17] błąd arguments dimensions are not consistent NIE ZGADZAJ SI WYMIARY! 13 Można wygenerować tablicę z wartościami funkcji: x= [0 : 0.1: 10] %wartość początkowa: krok: wartość końcowa M=[x; sind(x)] 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 0 0.0017 0.0035 0.0052 0.0070 0.0087 0.0105 0.0122 0.0140 0.0157 0.0175 x= [1 :10] M=[x; log(x)] 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 0 0.6931 1.0986 1.3863 1.6094 1.7918 1.9459 2.0794 2.1972 2.3026 14 Dostęp do elementu tablicy M1=[ 1 3 5 -11 7] disp(M1(3)) wyświetlony zostanie trzeci element tablicy tablica dwuwymiarowa M2 = [1 2 3; 2 1 1.5; 1 0 0] M2 = [1 2 3; 2 1 1.5; 1 0 0] disp(M2(2,3)) Można elementy zdefiniowanej tablicy wykorzystać w wyrażeniach, np: y= M(2,2)^2 15 Operacje na tablicach (macierzach) m4=[1 2 34 6;6 8/2 4 -2; 2 -5 56 6; 6 72 0.2 12] m4t = m4' %macierz sprzężona transponowana m4o = m4^-1 %macierz odwrotna (macierz kwadratowa!) mo= inv(m) mo= inv(m) % także obliczenie macierzy odwrotnej! s=m4*m4o %sprawdzenie - macierz jednostkowa w=det(m4) %wyznacznik,uwaga:macierz kwadratowa! 16 Operatory "kropkowe" dla tablic jeśli A i B są tablicami C=A*B to iloczyn macierzowy kiedy dozwolony? - gdy macierz A ma tyle kolumn ile macierz B wierszy D=A.*B to iloczyn elementowy każdy element macierzy D powstaje z iloczynu odpowiednich macierzy D powstaje z iloczynu odpowiednich elementów macierzy A i B dozwolony gdy A i B mają te same rozmiary podobnie ./ .^ (dzielenie i potęgowanie elementowe) A^2 % tożsame z A*A (uwaga:A musi być kwadratowa) A.^2 % każdy element do kwadratu A dowolne 17 Proste przykłady operacji macierzowych: 1 2 2 8 sumy iloczynów * = 3 4 3 18 1 3 2 2 2 6 .* = 4 1 3 1 12 1 1 3 2 2 0.5 1.5 ./ = 4 1 16 1 0.25 1 2 3 2 2 4 9 .^ = 4 6 3 1 64 6 18 Wybrane metody wykorzystania tablic Rozwiązywanie układu równań liniowych 2x + 3y 4z = 5 x + y z = 3,5 2,5y z = 2 Rozwiązanie w Matlabie (m-plik): Rozwiązanie w Matlabie (m-plik): A = [2 3 -4 ; 1 1 -1 ; 0 -2.5 -1] B = [ 5 ; 3.5 ; 2] X= A^(-1)*B wektor rozwiązań A*X % wynikiem powinien być wektor wyrazów wolnych B 19 & sprawdzenie rozwiązań: s1=A(1,1)*X(1)+ A(1,2)*X(2)+A(1,3)*X(3)-B(1) & . powinno dać wartość s1=0 podobnie: s2=A(2,1)*X(1)+ A(2,2)*X(2)+A(2,3)*X(3)-B(2) s3=A(3,1)*X(1)+ A(3,2)*X(2)+A(3,3)*X(3)-B(3) Uwaga: Rozwiązania istnieją jeśli równania układu nie są liniowo zależne 20 Wyznaczanie pierwiastków równania n-tego stopnia funkcja roots(M) - gdzie M jest wektorem współczynników przy kolejnych potęgach np. x3 + 3x2 4=0 instrukcja: instrukcja: R=roots ([1 3 0 -4]) wyznacza pierwiastki równania R będzie wektorem rozwiązań - jeśli równanie rzędu N to mamy N rozwiązań - rozwiązaniami mogą być liczby zespolone! 21