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.