W10
Transkrypt
W10
Informatyka MT DI 1 Transport Wykład 10 Matlab - definiowanie własnych funkcji Definicja funkcji Dla danych dwóch zbiorów A i B funkcja oznacza przyporządkowanie każdemu elementowi zbioru A dokładnie jednego elementu zbioru B. Mówiąc prościej… Przepis opisujący jak zależą elementy zbioru B od elementów zbioru A, lub też jaką operację należy wykonać na elemencie zbioru A by otrzymać element zbioru B Pierwszy sposób Obliczenia przy pomocy tzw. funkcji anonimowej Składnia definicji funkcji anonimowej: nazwa_funkcji=@(lista_argumentów)(wyrażenie) Przykładowo: mojafunkcja = @( x,y,z)(x^2+y^2+z^2) 3 Przykład clc, clear sinus2=@(t)(sin(t).^2) % definicja funkcji t=0:0.01:4*pi y= sinus2(t) % teraz możemy wykorzystać funkcję plot(t,y) 1 0.9 Argumentem funkcji jest wektor t. 0.8 0.7 Podstawiany on jest do wyrażenia w definicji funkcji, obliczany jest rezultat funkcji – wektor y, następnie rysujemy wykres zależności obu wektorów 0.6 0.5 0.4 0.3 0.2 0.1 0 0 2 4 6 8 10 12 14 4 Inna funkcja anonimowa… a=4; droga=@(t)(a*t.^2/2); t=0:0.1:5 s=droga(t) plot(t, s) % definicja funkcji % wykorzystanie funkcji 50 45 40 s będzie wektorem obliczonym przez funkcję droga (wyrażenie obliczone dla wszystkich wartości wektora t) 35 30 25 20 15 10 5 0 Uwaga: 0 0.5 1 1.5 2 2.5 3 3.5 Jeśli funkcja ma parametry (tutaj przyspieszenie a) muszą one być określone przed definicją funkcji, wartość argumentu (wektor czasu t) może być określona po definicji funkcji, lecz przed jej wykorzystaniem. 4 4.5 5 Funkcja anonimowa może mieć więcej argumentów a=4; poletrojkata=@(a,h)(a*h/2); % definicja funkcji x=6.7; y= 4.56; s=poletrojkata(x, y) % wykorzystanie funkcji % … a teraz następne wykorzystanie naszej funkcji s=poletrojkata(4.12, 34.411) % … albo tak… podstawa=input ('Podaj podstawę:'); wysokosc=input ('Podaj wysokość:'); s=poletrojkata(podstawa, wysokosc) Drugi sposób Definicja funkcji w osobnym pliku Tworzymy osobny plik i zapisujemy go w naszym katalogu Postać ogólna treści tego pliku: function rezultat = nazwafunkcji(argumenty) zapis instrukcji w treści funkcji (obliczenie zmiennej rezultat z wykorzystaniem argumentów) Zapisany plik MUSI!!! mieć taką samą nazwę jak nazwa funkcji oraz rozszerzenie .m tak jak inne m-pliki 7 Wiele gotowych funkcji (jak np. input, disp, plot, roots, max) jest predefiniowanych w Matlabie w istniejących m-plikach i umieszczone są w tzw. katalogach przeszukiwań. Listę katalogów przeszukiwań można uzyskać poleceniem: path Jeśli stworzoną i zapisaną w m-pliku funkcję użytkownik chce udostępnić we wszystkich wykonywanych m-plikach, ma dwa wyjścia: - skopiować plik z funkcją do jednego z katalogów przeszukiwań - utworzyć nowy katalog z plikami funkcyjnymi i dołączyć go do listy katalogów przeszukiwań poleceniem: path(path,'ścieżka do katalogu') Plik z funkcją zapisany pod nazwą poleokregu.m function p= poleokregu ( r ) p= pi*r^2; Teraz możemy wykorzystywać zdefiniowaną funkcję w naszym m-pliku: clc disp('Obliczenie pola okręgu'); x=input('Podaj promień:'); wynik= poleokregu(x); disp('Pole wynosi:'); disp(wynik); 9 Funkcja może mieć więcej argumentów function obj =prostopadloscian( a, b, c) obj= a*b*c; Plik funkcyjny prostopadloscian.m Wykorzystanie zdefiniowanej funkcji w naszym pliku: clc disp('Obliczenia prostopadłościanu'); x= 4.21; y= 1.34; z= 3.56 wynik= prostopadloscian(x, y, z); disp('Objętość wynosi:'); disp(wynik); Uwaga: Liczba argumentów w wywołaniu funkcji musi być taka sama jak w definicji 10 Ważna jest też kolejność argumentów function s =droga(s0, a, t) s= s0+a*t^2/2; Plik funkcyjny droga.m Wykorzystanie zdefiniowanej funkcji w naszym pliku: clc disp('Obliczenia drogi – ruch jednostajne przyspieszony'); prz= 6; czas = 10; d0=0; wynik= droga(d0, prz, czas); disp('Pokonana droga:'); disp(wynik); Uwaga: Liczba argumentów w wywołaniu funkcji musi być taka sama jak w definicji 11 Funkcja może także mieć więcej rezultatów function [pole obwod]= okrag( r ) pole= pi*r^2; Plik okrag.m obwod = 2 * pi * r; Wykorzystanie zdefiniowanej funkcji w naszym pliku: clc disp('Obliczenia okręgu'); x=input('Podaj promień:'); [wynik1 wynik2]=okrag(x); disp('Pole wynosi:'); disp(wynik1); disp('Obwód wynosi:'); disp(wynik2); 12 Bardziej złożona funkcja do samodzielnej analizy function iledodatnich= analiza(X) iledodatnich=0; for wiersz=1:size(X,1) for kolumna=1:size(X,2) if X(wiersz,kolumna)>0 iledodatnich=iledodatnich+1; end end end clc,clear M=round(100*rand(10,8)-50) iled=iledodatnich(M) 13 Obowiązujący zakres wiedzy z Matlaba 1. Zmienne i ich cel, zasady nazewnictwa zmiennych - nadawanie wartości zmiennej. Zapis liczby w formacie dziesiętnym i zmiennoprzecinkowym. Nadawanie zmiennej wartości obliczonego wyrażenia z wykorzystaniem funkcji matematycznych (funkcje trygonometryczne, potęgi i pierwiastki wyższych stopni, funkcja wykładnicza, logarytmy, zaokrąglenia, funkcja generatora losowego, reszta z dzielenia). 2. Rozumienie liczb zespolonych. 3. Zmienne macierzowe – tworzenie macierzy, działania na macierzach (sumowanie, mnożenie macierzowe i elementowe, podnoszenie do potęgi macierzowe i elementowe, macierz odwrotna, macierz transponowana, wyznacznik macierzy). Zastosowanie – pierwiastki wielomianu rzędu n, układ równań liniowych. Dostęp do elementu macierzy. 4. M- pliki, istota działania ciągu instrukcji zapisanych w m-pliku. Interakcyjne wprowadzanie danych przez użytkownika oraz wyprowadzanie tekstów i wartości zmiennych. 5. Wykresy w Matlabie – funkcje plot, fplot. Umiejętność odczytu wartości z wykresu, Sterowanie przedziałem osi dla wykresu. Wiele krzywych na wykresie. 6. Instrukcja warunkowa if – zasada działania, zapis wyrażeń warunkowych, operatory porównań, koniunkcja i alternatywa warunków. 7. Instrukcja pętli for – zasada działania, zastosowania w analizie macierzy, pętla zagnieżdżana dla macierzy dwuwymiarowych, algorytmy zmiany wartości zadanych elementów macierzy, sumowania i zliczania elementów macierzy dla zadanych warunków. 8. Zapis obliczeń do pliku (plik tekstowy, mat-plik) i odczyt danych z pliku. 9. Wybrane działania symboliczne z dodatku Symbolic Tool – definiowanie zmiennych symbolicznych, operacje i funkcje symboliczne, obliczenia granic ciągów, pochodnych i całek nieoznaczonych i oznaczonych. 10. Definiowanie własnych funkcji anonimowych i w osobnym pliku funkcyjnym, argumenty funkcji i rezultaty. Sposób wykorzystania funkcji w m-pliku.