MATLAB część 2
Transkrypt
MATLAB część 2
1 SKRYPTY Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego y+ z= 1 1 + ( x + 2) 2 x ⋅ sin y 2 + y +1 3⋅ x dla danych wartości x = 12.5 i y = 9.87. Zadanie to można rozwiązać: • wpisując dane i wzór wyrażenia z w oknie CommandWindow, po czym wykonać obliczenia naciskając klawisz <Enter>, lub • tworząc SKRYPT i w nim zapisując wszystkie instrukcje do wykonania, po czym wykonać napisany skrypt. Skrypty są to: • to zewnętrzne pliki, zawierające sekwencję instrukcji i poleceń MATLAB–a, które będą wykonywane wielokrotnie z linii poleceń >> (Command Line) okna poleceń (Command Window) • są zapamiętywane w kartotece roboczej MATLAB-a na plikach o nazwie z rozszerzeniem .m ( M–pliki), np., Skrypt_W_Z.m • mogą działać na danych już istniejących w przestrzeni roboczej (Workspace) lub mogą tworzyć nowe dane, które zostają umieszczone w Workspace, i na których można wykonywać określone działania w dalszych obliczeniach • mogą zawierać komentarze 2 TWORZENIE NOWEGO SKRYPTU: W oknie MATLAB–a wybieramy opcje: File – New – M–File Pojawia się edytor MATLAB-a, w którym wpisujemy dane (ewentualnie) i polecenia do wykonania, czyli instrukcje algorytmu. W naszym przypadku będą to polecenia: % Wyznaczenie wartosc wyrazenia z x = 12.5 y = 9.87 z = (y+1/(1+(x+2)^2))/(3*x)+x*sin(y^2)/(y+1) Następnie wykonujemy opcje: File – Save i w oknie Save file as: zapisujemy w kartotece roboczej skrypt pod nazwą, np. Skrypt_W_Z.m po czym zamykamy okno edycji – klikając myszką na przycisku x. WYKONANIE SKRYPTU 1. SPOSÓB W oknie Command Window piszemy po znaku zachęty nazwę skryptu, czyli >> Skrypt_W_Z po czym naciskamy <Enter>. 2. SPOSÓB W zakładce Current Directory okna Workspace znajdujemy plik o nazwie Skrypt_W_Z.m. Kursor na nazwie pliku, klikamy prawym przyciskiem myszy, po czym wybieramy spośród wyświetlonych opcji opcję Run 3 POPRAWIANIE LUB UZUPEŁNIANIE SKRYPTU Okno Workspace, zakładka Current Directory: • kursor na nazwie pliku Skrypt_W_Z.m • przycisnąć prawy przycisk myszy • wybrać spośród wyświetlonych opcji opcję Open. Pojawia się okno edycji istniejącego skryptu Skrypt_W_Z.m – dokonujemy poprawek • Opcje: File – Save – zapisujemy poprawioną wersję skryptu pod tą samą nazwą • Ponownie wykonujemy poprawiony skrypt (sposób, jak wyżej) WCZYTYWANIE DANYCH Z PLIKU Tworzymy plik z danymi o nazwie, np., Dane_W_Z.txt za pomocą dowolnego zewnętrznego edytora (np. Notatnika) i zapisujemy go w kartotece roboczej MATLAB-a (nazwa kartoteki roboczej jest wyświetlana w oknie MATLAB–a tuż poniżej głównego menu). Na pliku będą się znajdowały dwie liczby: 12.5 9.87 Jedną z funkcji do czytania danych z pliku (w naszym przypadku z pliku: Dane_W_Z.txt) jest funkcja LOAD, która może być stosowana w wersjach: load Dane_W_Z.txt lub load(‘Dane_W_Z.txt’) Korzystając z funkcji LOAD musimy pamiętać o tym, by dane na pliku były zapisane w postaci regularnej tablicy, tak by w każdym wierszu tej tablicy znajdowała się taka sama liczba elementów. 4 Funkcja LOAD zapisuje dane znajdujące się na pliku do tablicy o nazwie takiej samej jak nazwa pliku. Po wykonaniu czytania otrzymujemy tablicę dwuelementową: Dane_W_Z = 12.5000 9.8700 Pierwszy element tej tablicy zawiera wartość zmiennej x z naszego przykładu, drugi zawiera wartość y. Musimy więc dokonać przyporządkowania: x = Dane_W_Z(1) y = Dane_W_Z(2) i tak określone wartości zostaną wstawione do wzoru na z, by wyznaczyć wartość zmiennej z. Skrypt zawierający instrukcje czytania danych z pliku będzie miał więc postać: % Wyznaczenie wartosci wyrazenia z load Dane_W_Z.txt x = Dane_W_Z(1) y = Dane_W_Z(2) z = (y+1/(1+(x+2)^2))/(3*x)+x*sin(y^2)/(y+1) UWAGA! We wszystkich dotychczasowych przykładach wynik obliczeń był wyświetlany na monitorze w oknie CommandWindow. 5 FORMATOWANY ZAPIS DANYCH DO PLIKU. FUNKCJA FPRINTF Załóżmy, że chcemy zapisać wynik działania naszego skryptu na pliku przechowywanym w kartotece roboczej. Załóżmy, że chcemy, by wydruk danych i wyników na tym pliku miał poniższą postać: Obliczenie wartości wyrażenia Dane: x = 12.500 y= 9.870 Wynik: z= 0.2317 Zapis danych i wyników do pliku wymaga wykonania kilku poleceń: • Skojarzenie z nazwą fid nazwy pliku z wynikami i otwarcie dostępu do tego pliku: fid = fopen(‘Wyn_W_Z.txt’,’w’,’a’) gdzie: fid = >0 - OK fid = 1 – ekran fid = -1 – błąd! Atrybuty pliku: ‘w’ – plik do zapisu, ‘a’ – możliwość dopisywania informacji na końcu pliku • Wydruk wartości zmiennej na plik skojarzony ze zmienną fid: count =fprintf(fid,format,a,b,c) gdzie: fid – oznacza gdzie (na którym pliku) będziemy zapisywać dane i wyniki format – oznacza jak będziemy drukować dane a,b – co będziemy drukować count – liczba zapisanych bitów (opcjonalnie) 6 format: % 10. 3 f początek specyfikacji formatu szerokość pola przeznaczonego na wydruk liczby Liczba miejsc po kropce w wydruku liczby rzeczywistej dokładność wydruku kod konwersji - postać wydruku Kod konwersji dla wydruku liczby double może być: f, e lub E. Przykład: Chcemy wydrukować wartość zmiennej x = 12.85. Napisanie fprintf(fid,’Zmienna x = %10.5f \n’,x) da efekt: Zmienna x = 12.850 Napisanie: fprintf(fid,’Zmienna x = %10.5E \n’,x) da efekt: Zmienna x = 1.285E+001 \n – w formacie wydruku oznacza przejście do następnej linii PO wykonaniu wydruku. Uwaga na apostrofy! • Zamknięcie dostępu do pliku z wynikami, skojarzonego ze zmienną plikową fid: fclose(fid) 7 Aby zrealizować zamierzony wydruk na plik, skrypt powinien zawierać instrukcje: % Wyznaczenie wartosci wyrazenia z load Dane_W_Z.txt x = Dane_W_Z(1) y = Dane_W_Z(2) z = (y+1/(1+(x+2)^2))/(3*x)+x*sin(y^2)/(y+1) fid=open(‘Wyn_W_Z.txt’,’w’,’a’) fprintf(fid,’Obliczenie wartosci wyrazenia \n\n’) fprintf(fid,’Dane: \n’) fprintf(fid,’x = %10.3f \n’,x) fprintf(fid,’y = %10.3f \n\n’,y) fprintf(fid,’z = %10.4f \n’,z) fclose(fid) CZYTANIE DANYCH Z PLIKU EXCEL–owego Załóżmy, że dane reprezentujące wartość x i y do obliczenia wartości wyrażenia z znajdują się na pliku Excel–owym o nazwie ‘W_Z.xls’ i postaci: Napisanie w oknie CommandWindow instrukcji: >>A = xlsread(‘W_Z.xls’) 8 Daje efekt A= NaN 12.5000 NaN 2.0 9.8700 5.0000 Wszystkie dane, które znajdowały się na pliku ą wpisane do tablicy A. Tam gdzie zamiast liczby jest tekst, MATLAB wpisuje symbol NaN co oznacza: Not-a-Number. Teraz należy tylko określić, że: x = A(1,2) y = A(2,2). Można wybrać z Arkusza Excel’owego odpowiedni fragment podając interesujący zakres komórek: >>A = xlsread(‘W_Z.xls’,’B1:B2’) Teraz >>A = 12.5000 9.8700 i wystarczy dokonać przyporządkowania x = A(1), y = A(2) by policzyć wartość z. Odpowiedni skrypt miałby postać: % Wyznaczenie wartosci wyrazenia z A = xlsread(‘W_Z.txt’,’B1:B2’) x = A(1) 9 y = A(2) z = (y+1/(1+(x+2)^2))/(3*x)+x*sin(y^2)/(y+1) fid=open(‘Wyn_W_Z.txt’,’w’,’a’) fprintf(fid,’Obliczenie wartosci wyrazenia \n\n’) fprintf(fid,’Dane: \n’) fprintf(fid,’x = %10.3f \n’,x) fprintf(fid,’y = %10.3f \n\n’,y) fprintf(fid,’z = %10.4f \n’,z) fclose(fid) ZAPIS WYNIKÓW NA PLIK EXCEL–owy Do zapisu na plik Excel–owy służy instrukcja: xlswrite. Należy podać nazwę pliku Excel–owego na który mają być zapisane dane i nazwę tablicy, która powinna być na tym pliku zapisana. Czyli jeśli chcielibyśmy zapisać na pliku ‘Wyn_W_Z.xls’ dane i wynik obliczenia wartości z należałoby na końcu w/w skryptu umieścić instrukcje: A(3) = z xlswrite(‘Wyn_W_Z.xls’,A) 10 ELEMENTY PROGRAMOWANIA W MATLABIE PĘTLA FOR Instrukcja pętli służy do wielokrotnego wykonywania w identyczny sposób jednej lub wielu instrukcji. SKŁADNIA: for zmienna = od:krok:do instrukcje end na przykład za pomocą instrukcji: >>n = 10 >>for i = 1:1:n fprintf(1,’Kocham Cie!!! \n’) end można wydrukować n razy tekst ‘Kocham Cie!!!’ Przykład_1: utworzyć tablicę x, której elementami będą sześciany kolejnych liczb całkowitych i, dla i=1,2,...,n >>n = 5 >> for i=1:1:n x(i) = i^3; end >> x % Wydrukuj wektor x x= 1 8 27 64 125 Przykład_2: utworzyć dwuwymiarową tablicę A, której elementy określa wzór Aij = i− j , i = 1,2,..., n i+ j j = 1,2,..., n 11 Wykonanie poniższych instrukcji for i=1:1:3 for j=1:1:3 A(i,j) = (i-j)/(i+j) end end; daje efekt: A = 0 0.3333 0.5000 -0.3333 0 0.2000 -0.5000 -0.2000 0 PĘTLA WHILE SKŁADNIA: while wyrażenie logiczne instrukcje end Instrukcja while wykonywana jest tak długo jak długo wyrażenie logiczne jest prawdziwe. Przykład: Wyznaczyć wartość S= ? ∑ i 2 = 1 + 4 + 9 + .... i =1 Sumowanie przerwać w momencie, gdy suma S będzie >= 1000. >> i=1; >> S=1; >> while S <= 1000 i = i+1; S = S+i^2 end 12 INSTRUKCJE WARUNKOWE Operatory relacji logicznych: > >= < <= == ~= – równy i różny, odpowiednio Operatory te dokonują porównania element po elemencie dwóch tablic. W wyniku otrzymujemy tablicę takiego samego rozmiaru wypełnioną 1 i 0. 1 – gdy relacja jest prawdziwa, 0 – w przypadku przeciwnym. Na przykład: >>A = magic(3) A= >>B = >> P = A<B 1 5 12 20 0 1 1 7 1 1 1 0 1 1 8 1 6 4 8 3 5 7 0 15 4 9 2 P= OPERATORY LOGICZNE AND & A&B lub and(A,B) OR | A|B lub or(A,B) NOT ~ ~A lub not(A) 13 OPERATOR LOGICZNY AND W =A & B & C W=and(A,B)! A, B to tablice lub skalary. Gdy A,B,C są tablicami jednakowych rozmiarów AND dokonuje operacji logicznej na odpowiadających sobie elementach tych tablic. Tablica wynikowa W ma taki sam wymiar i ma elementy o wartościach równych 1 lub 0. Element Wij = 1 gdy na pozycji (i,j) w tablicach A,B i C były elementy niezerowe, oraz 0 w przypadku przeciwnym. Gdy A,B,C są skalarami W też jest skalarem. Przykład: B= A= >> W=A&B&C C= 1 2 -1 0 0 1 3 4 5 6 2 3 W= 0 0 1 1 OPERATOR LOGICZNY OR W =A | B | C W=or(A,B)! A, B to tablice lub skalary. Gdy A,B,C są tablicami jednakowych rozmiarów OR dokonuje operacji logicznej na odpowiadających sobie elementach tych tablic. Tablica wynikowa W ma taki sam rozmiar i składa się elementów równych 1 lub 0. Element Wij = 1 gdy na pozycji (i,j) w którejkolwiek tablicy A,B lub C znajduje się element niezerowy, oraz 0 w przypadku przeciwnym. Gdy A,B,C są skalarami W też jest skalarem A= B= >> W = A|B|C C= 1 2 -1 0 0 1 3 4 5 6 2 3 W= 1 1 1 1 14 OPERATOR LOGICZNY NOT C=~A C=not(A) A może być tablicą lub skalarem. Gdy A jest tablicą NOT działa na kolejne elementy tablicy A i zwraca tablicę takiego samego wymiaru co A składającą się albo z 1 albo 0. Element tablicy wynikowej przyjmuje wartość1 gdy w tablicy A na danej pozycji znajduje się 0, lub 0 gdy na danej pozycji w tablicy A stoi element różny od zera >> N = not(A) A= N= 0 2 0 1 0 1 3 4 5 0 0 0 1 0 5 0 1 0 INSTRUKCJA WARUNKOWA I SKŁADNIA: if wyrażenie_logiczne1 instrukcje_1 end INSTRUKCJA WARUNKOWA II SKŁADNIA: if wyrażenie_logiczne1 instrukcje_1 else instrukcje_2 end 15 Przykład: >>x = -10; >>y = 20; >> if x<y z = x+y, info = 'x<y' else z = x-y, info = 'x>y'end >>z = 10 info = x<y INSTRUKCJA WARUNKOWA III SKŁADNIA: if wyrażenie_logiczne1 instrukcje_1 elseif wyrażenie_logiczne2 instrukcje_2 else instrukcje_3 end Przykład: Wyznaczyć wartość funkcji y=y(x) określonej wykresem w zależności od wartości x y a+1 1 a x 16 >> a = 10; >> x = 6.5; >> if x<=0 y = 1 elseif x>a y = a+1 else y = x+1 end y= 7.5000 lub równoważnie >> a = 10; >> x = 6.5; >> if ((x>0) & (x<=a)) y = x+1 elseif x>a y = a+1 else y = 1 end y= 7.5000 KOLEJNOŚĆ DZIAŁAŃ W KIERUNKU MALEJĄCEGO PRIORYTETU 1. Działania w ( ) 2. Transponowanie (.’), potęgowanie (.^), potęgowanie (^) 3. Plus, minus (+) (-) (zmiana znaku), negacja logiczna (~) 4. Mnożenie (.*), dzielenie (./), dzielenie (.\), mnożenie macierzy (*) dzielenie macierzy (/), dzielenie macierzy (\) 5. Dodawanie (+), odejmowanie (-) 6. Operator ( : ) 7. Operatory relacji logicznych <, <=, >, <=, ==, ~= 8. Operator AND (&) 9. Operator OR ( | )