350 likes | 622 Views
PWSW Mechatronika. Wykład 7. Matlab cd. Przydatne polecenia. help - pomoc globalna help elfun - pomoc – spis funkcji elementarnych help rem - pomoc na temat wybranej funkcji (tu: rem ) format long - wyświetlanie liczb z 15-ma miejscami dziesiętnymi
E N D
PWSW Mechatronika Wykład 7 Matlabcd
Przydatne polecenia help - pomoc globalna help elfun - pomoc – spis funkcji elementarnych help rem - pomoc na temat wybranej funkcji (tu: rem) format long - wyświetlanie liczb z 15-ma miejscami dziesiętnymi format short - liczby wyświetlane z 4-ma miejscami dziesiętnymi clc - czyszczenie ekranu clear zmienna - usunięcie zmiennej z obszaru roboczego (Workspace) clear - usunięcie wszystkich zmiennych z obszaru roboczego
Algorytm zaokrąglania z dokładnością do N miejsc dziesiętnych clc format long x=pi N=5 y= round(x*10^N)/10^N format short
Generator losowy rand Bezargumentowa funkcja! Losuje liczbę rzeczywistą z przedziału (0, 1) x=rand Zmiana przedziału losowania: x=round(100*rand-50) Losowanie liczby całkowitej z przedziału (-50, 50)
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:');
Prezentacja wyników w Matlabie zmienna- proste wypisanie wartości disp( zmienna) - funkcja wypisania wartości disp ('jakiś tekst') - wypisanie tekstu na ekranie
Prezentacja wyników - tekst i dane fprintf('Wartość zmiennej a wynosi %znak\n', a); gdzie %znak to sposób wyświetlania: %d liczba całkowita %e liczba w zapisie wykładniczym, np. 3.1415e+00 %f zapis stałoprzecinkowy Uwaga: \n przejście do nowego wiersza
WYKRESY 2-wymiarowe 1 sposób: Funkcja plot Wymaga utworzenia dwóch wektorów o tej samej liczbie elementów x=0:10 %generowanie wektora co 1 % wart_pocz:wart_koncowa y=[5.1 1.1 -2 -3 4.2 5.5 4.3 3.1 4.5 5.9 4.9] z=[0 2 3 3 5 4 3 4 5 4 9] %trzeci wektor title('wykres') %dodanie tytułu plot(x,y) %rysowanie wykresu plot(x,y,'r',x , z,'w') %dwie krzywe y(x) i z(x)
Przykłady wykresów funkcji x=0:90%generowanie wektora co 1 y=sin(pi*x/180) %wektor y plot(x,y) %rysowanie x=0:pi/50:6*pi y=cos(2*x)./sqrt(x+1) plot(x,y) Uwaga: zapis kropkowy elementowe dzielenie(mnożenie) wektorów x = - 9:1:9 z = x.^2 plot(x, z)
2 sposób: Funkcjafplot Wykres funkcji podanej jako parametr tekstowy jedna krzywa: fplot('sin(x*x)/x',[0 4*pi]) punkt dzielenia przez 0 nie jest rysowany - ostrzeżenie dwie krzywe: fplot('[sin(x*x)/x cos(x)]',[0.01 4*pi]) Uwaga: zamiast x może być inna litera jako argument funkcji w jej opisie
Przykładowe wykresy powierzchniowe 3D peaks cylider (srednica) sphere (precyzja)
Wykresy powierzchniowe (3D) Korzystamy z funkcji mesh(x,y,z) Dla powierzchni podanej równaniem: z=cos3x siny
Piszemy m-plik: • clear • y = 0:0.01:pi %wektor wierszowy • x = y' %wektor kolumnowy! • z=cos(3*x) * sin(y) % tablica z jestkwadratowa • mesh(x, y, z) rezultat mnożenia dwóch wektorów: * sin y cos3x
2. Metoda wsadowa wykonywania operacji W Matlab-ie można zapisać tekst ciągu instrukcji w pliku tekstowym ASCII o rozszerzeniu m. (tzw. m-pliki lub mex-pliki) • W Matlab-ie można jako polecenie wpisać w linii poleceń nazwę pliku z ciągiem instrukcji - instrukcje pobierane kolejno i wykonywane od pierwszej do ostatniej • Konieczne jest ustawienie "ścieżki" do naszego foldera w menu Currentdirectory
Można wykonać m-plik w Matlabie wpisując w linii poleceń jego nazwę (bez rozszerzenia) >>plik >>test1 lub z okna edytora- Run W m-pliku wpisujemy kolejne instrukcje (bez znaków >>)
Uwaga: Instrukcje oddzielamy przecinkami lub piszemy w osobnych wierszach Średniki na końcu instrukcji powodują brak wyświetlenia echa instrukcji na ekranie.
Instrukcja warunkowa if warunek1 instrukcje (gdy spełniony warunek1) elseif warunek2 instrukcje (gdy spełniony warunek2) else instrukcje (gdy niespełnione warunki) end
Przykłady warunków – użycie operatorów porównania: a == 0(czy równe? – wartość prawda lub fałsz) b<c 2*a >= 5 x ~= 5 (różne od.. ~ to operator negacji
Przykład1: %… poprzednie instrukcje ustalające wartość zmiennej i ifi>0 disp(i); end; jeżeli i jest większe od 0 to wyświetl wartość i, jeśli nie to "nic nie rób"
Przykład 2: a = 1 b = 6 c = 3 delta = b^2 - 4 * a *c; if delta<0 disp ('delta jest ujemne') else disp(delta) end; endkończy instrukcję
Przykład3: …obliczamy jakieś x ifx>0 && x<10 disp('w przedziale 0 10') else disp('poza przedziałem') end; można też and(x>0, x<10) && operator koniunkcji || operator alternatywy jak w JavaScript
Instrukcja iteracyjna („pętla liczona”) forzmienna = wartość_pocz:krok: wartość_końcowa, instrukcja, instrukcja, …. end
Przykład prostych pętli: %generujemy tablicę for i= 1:1:10, a(i) = i^2; end; disp(a) suma=0; for i= 1:1:10, suma=suma+a(i); end; disp('suma=') disp(suma)
Przykład 4 ("zagnieżdżanie" iteracji): for i= 1:1:5, for j = 1:1:5, a(i , j) = i*j%jakieś wyrażenie f(i,j) end end
Przykład 6(sumowanie elementów w tablicy dwuwymiarowej): a=0; suma = 0; for i= 1:1:5, for j = 1:1:5, a(i , j) = 2*i - 4* j, suma=suma+a(i , j); end end disp(suma)
Przykład 6b(sumowanie dodatnich elementów w tablicy dwuwymiarowej): a=0; suma = 0; for i= 1:1:5, for j = 1:1:5, a(i , j) = 2*i - 4* j, if a(i,j)>0 suma=suma+a(i , j); end; end end disp(suma)
Przykład 7 (wielokrotny test – wyznaczanie największego elementu) A=[2 8 6 -1 2 3 9 11 7 12 -4 9 33 1 22 1 0 -3 5 7] maks=A(1) %założenie for i= 2:1:20, if A(i)>maks maks=A(i) end end disp(maks) badamy elementy od 2 do ostatniego
Przykład 8 Ile liczb jest w przedziale [0 5] A=[2 8 6 -1 2 3 9 11 7 12 -4 9 33 1 22 1 0 -3 5 7] ile=1 %założenie for i= 1:1:20, if A(i)>=0 && A(i)<=5 ile=ile+1; end end disp(ile)
Przykład 9 Wykorzystanie standardowej funkcji max (lub min) A=rand(20) % losowe wypełnienie tablicy 20x20 naj1=max(A) naj2 = max(naj1) wektor maksimów w kolumnach (maksima lokalne) największy z maksimów lokalnych
Sortowanie bąbelkowe Porównywanie kolejnych par elementów sąsiadujących i zamianamiejscami w przypadku niewłaściwej kolejności 1 2 3 4 ..... N N-1 porównań Wykonujemy N przebiegów Sortowanie bąbelkowe skrócone Przebiegów wykonujemy N-1 W każdym kolejnym przebiegu liczba analizowanych par jest zmniejszana o 1, a
1 PRZEBIEG 96 12 22 76 64 23 74 11 2 PRZEBIEG 12 22 76 64 23 74 11 96 i.t.d.
M-plik - sortowanie "bąbelkowe" clc clear N=5; G=rand(1,N) %stadardowa funkcja sortująca G1=sort(G) %sortowanie bąbelkowe for k=1:N-1 for m=1:N-k if G(m)>G(m+1) pom=G(m); G(m)=G(m+1); G(m+1)=pom; end end disp(G) %pokazuje kolejne wypływające "bąbelki" end %ostatecznie po posortowaniu disp(G) zamiana miejscami gdy elementy w niewłaściwej kolejności