WPROWADZENIE DO MATLABA 2

background image

Tworzenie skryptów (m-plików)

Skrypt jest plikiem tekstowym zawierającym zestaw funkcji i poleceń Matlaba. Pliki skryptowe
mają rozszerzenie .m. Pliki skryptowe można tworzyć w każdym edytorze tekstowym.
Najwygodniej wykorzystać edytor Matlaba. Dostęp do edytora jest możliwy przez File -> New->
M-file lub przez odpowiednią ikonę.

Opisywanie skryptów
Każdy skrypt powinien mieć krótki opis zawartości i działania. Opis umieszcza się za znakiem
%. Ze względów praktycznych opis należy umieszczać za podwójnym znakiem procenta (%%).
Począwszy od Matlaba 7 znak %% oznacza nowy fragment kodu. Znaki %% oraz % są też
inaczej traktowane w czasie konwersji skryptu do html-a. Opis pliku można wywołać w
Matlabie przy pomocy polecenia help nazwa_skyptu. Za opis pliku traktowane są pierwsze linie
komentarza nieprzerwane liniami innego typu.

Przykład:

%% To jest test opisu skryptu piewszy_skrypt.m
%% Jestem w skrypcie % czy widać tę linię? a=5;
% jakaś komenda % czy widać tę linię

Zmienne w skryptach Matlaba

Skrypty do przechowywania zmiennych używają przestrzeni roboczej Matlaba. Z jednej strony
nie trzeba definiować mu zmiennych, ale istnieje niebezpieczeństwo użycia i zamazania
zmiennych istniejących już w przestrzeni roboczej.

Wypisywanie kroków wykonywanych w skrypcie na ekran.

Analogicznie do poleceń wypisywanych w Oknie Poleceń, polecenia wykonywane w skrypcie
dają echo na ekranie. Aby przyśpieszyć pracę skryptów oraz dla zapewnienia uniwersalności
(dobry nawyk dla programistów) należy wszystkie polecenia wykonywać z opcją ukrywania
echa (o ile celem pliku nie jest narysowanie wykresu). Do ukrywania echa stosuje się średnik na
końcu linii polecenia – patrz Temat 7.

background image

Tworzenie funkcji

Funkcja tak jak skrypt jest plikiem tekstowym zawierającym zestaw funkcji i poleceń Matlaba
zaczynać się powinna od słowa kluczowego function. Pliki funkcji mają również rozszerzenie
.m.

UWAGA: Ważne jest aby nazwa funkcji i nazwa pliku były takie same.

Pliki funkcji można tworzyć w każdym edytorze tekstowym. Najwygodniej wykorzystać edytor
Matlaba. Podstawową różnicą miedzy funkcją a skryptem jest sposób przechowywania danych.
Skrypt czyni to w przestrzeni roboczej, natomiast funkcja przechowuje je poza przestrzenia
roboczą, co pozwala na dublowanie nazw zmiennych z przestrzenią roboczą. Inaczej mówiąc
funkcja jest hermetyczna i pokazuje na zewnątrz tylko dane wyjściowe, lub zmienne specjalnie
udostępnione przy pomocy operatora global.

Szkielet funkcji

function [x,y,z]=nazwa_funkcji(a,b,c,d) %% [x,y,z]=nazwa_funkcji(a,b,c,d) %%
Funkcja zwraca 3 wektory x,y,z dla danych parametrów wejściowych a,b,c,d

%%Koniec nazwa_funkcji.m

Funkcja powinna posiadać następujące elementy:

nagłówek funkcji – definicje parametrów funkcji -argumentów, (a, b, c, d – w naszym

szkielecie) oraz parametrów wyjścia -wartości, (x, y, z – w naszym szkielecie);

komentarz z opisem do help-u – opisuje co funkcja robi, opisuje argumenty funkcji oraz

wartości wyjściowe;

analiza liczby parametrów wejściowych – moduł funkcji analizuje liczbę parametrów

wejściowych, czy jest ich wystarczająco dużo do wykonania funkcji i czy ewentualnie można przyjąć
wartości domyślne dla niepodanych parametrów (na razie się tym nie zajmujemy);

analiza własności parametrów wejściowych – moduł funkcji sprawdza czy wartości

wprowadzonych argumentów umożliwiają poprawne wykonanie funkcji ( na razie się tym nie
zajmujemy);

implementacja algorytmu – zapewnia poprawność obliczeń numerycznych i przygotowuje

wartości wyjściowe.

Postępowanie przy pisaniu funkcji

Najwygodniej najpierw napisać skrypt a po przetestowaniu przerobić go w funkcję.

background image

Przykład funkcji i wywołania funkcji

Zawartość pliku przykład_1.m:

function [x,y]=przyklad_1(a,b) %% [x,y]=przyklad_1(a,b) %% Funkcja rysuje wykres
funkcji y=a*cos(x+(pi/b)) %% zwraca 2 wektory x – wektor zmiennej x, y -wektor z
wynikami funkcji %% dla danych parametrów a, b. Funkcja rysuje wykres funkcji w
aktywnym oknie. x = 0:0.001:2*pi; y = a.*cos(x+(pi./b)); plot(x,y); %Koniec
przyklad_1.m

Wywołanie funkcji z Okna Poleceń:

>> przyklad_1(2,2); % rysuje wykres funkcji
>> [ax,ay]=przyklad_1(2,2); % oprócz wykresu wyprowadza do przestrzeni roboczej dwa
wektory ax, ay.
>> parametr1=3;, parametr2=4;
>> [ax,ay]=przyklad_1(parametr1, parametr2); % j.w.

Pod funkcje

W jednym pliku zawierającym funkcję można umieścić więcej funkcji. Przy czym tylko
pierwsza funkcja jest widoczna na zewnątrz. Wszystkie pozostałe funkcje mogą być
wywoływane tylko w obrębie danego pliku.

background image

Temat 65
Instrukcja for

Instrukcja for pozwala na powtarzanie wybranego fragmentu kodu określoną ilość razy.
Szablon instrukcji for (uwaga na przecinek):

.... for zmienna_iterowana = macierz_wartości
,

..... Kod do wielokrotnego powtarzania ....

end

.....

Pętle w wybranych przypadkach mo

�na przerywać przy pomocy instrukcji break.

Przykład:

a=zeros(10,5); % alokacja pamięci
for i=1:10, for j=1:5, a(i,j)=i*j; end
end

background image

Instrukcja warunkowa if

Instrukcja pozwala na wykonanie jednego z kilku fragmentów kodów zawartego pomiędzy
instrukcjami if, elseif, else. Wybór realizowanego kodu zależy od spełnienia odpowiednich
wyrażeń warunkowych, gdy żadne z nich nie jest spełnione jest wykonywany kod
występujący za operatorem else. Szablon instrukcji if:

If

wyra

�enie_warunkowe_1

Kod wersja 1

elseif

wyra

�enie_warunkowe_2

Kod wersja 2

elseif

wyra

�enie_warunkowe_3

Kod wersja 3
...... else

Kod wersja N

end

Przykład:

%% y=a*x^2+b*x+c a=1; , b=2; , c=3; % definicja stałych
wyznacznik=b^2-4*a*c; % np. wyznacznik równania kwadratowego if
wyznacznik>0

x1=(-b+sqrt(wyznacznik))/(2*a); , x2=(-b-sqrt(wyznacznik))/(2*a); elseif
wyznacznik==0 x1=-b/(2*a); , x2=x1; else x1=NaN; , x2=NaN; end

Instrukcje break i return

Obie instrukcje powodują przerwania wykonywania kodu. Funkcja break powoduje wyskoczenie
z najgłębiej zagnieżdżonej pętli do wyższej pętli. Funkcja return powoduje natychmiastowe
opuszczenie danej funkcji lub skryptu i powrót do miejsca jej wywołania.

Instrukcja switch-case

W przypadku listy znanych argumentów wywołania wygodnie jest skorzystać z funkcji
switch-case. Szablon instrukcji switch-case:

switch p case 1
instrukcja 1 case 2
instrukcja 2
otherwise inna
instrukcja end

background image

Funkcje pomiaru czasu

Czas CPU który upłynął od uruchomienia Matlaba (ogólnie do pomiaru czasu)

cputime

Start stopera

tic

Zatrzymanie stopera

toc

Czas, który upłynął pomiędzy dwoma podanymi datami w formie wektorów

etime
pause

Zatrzymanie na x sekund – zwykle oczekiwanie na odpowiedź u

�ytkownika przy

programach interakcyjnych

Testowanie funkcji – czas wykonywania funkcji – tic i toc

W przypadku testowania programów najwygodniej używać funkcji tic i toc.

Przykład:

tic

testowana_Funkcja toc

Funkcje czasu i daty znajdują się w grupie funkcji timefun – help timefun

Aktualna data jako liczba dni od 01.01.0

now

Aktualna data i godzina jako zmienna łańcuchowa

date
clock

Aktualna data i godzina jako wektor

data jako liczba dni od 01.01.0

datenum

data jako zmienna łańcuchowa

datestr

Transformacja składników daty do postaci wektora

datevec

Kalendarz

calendar

oblicza dzień tygodnia dla podanej daty

weekday

zwraca liczbę dni w miesiącu w podanym roku i
miesiącu

eomday

formatowanie daty

datetick

background image

Funkcje w Matlabie – ciąg dalszy – zmienne globalne global

Przypomnienie: zmienne w funkcji są lokalne – nie widać ich na zewnątrz. Tak samo zmienne w
obszarze roboczym są niewidoczne dla funkcji chyba, że są jej parametrem wejściowym. Nawet
wtedy jednak są przekazywane przez wartość, także ich wartość modyfikowana wewnątrz funkcji
wróci do wartości początkowej po wyjściu z funkcji. Jednak czasami takie ograniczenia nie są
wygodne. Gdy chcemy, aby zmienne z przestrzeni roboczej były dostępne wewnątrz funkcji bez
definiowania ich jako parametry funkcji, wtedy deklarujemy je jawnie w przestrzeni roboczej
oraz w samej funkcji poprzez global. Takie działanie jest jednak niebezpieczne, bo może dojść do
konfliktu nazw pomiędzy funkcją i przestrzenią roboczą, lub niepożądaną zmiana ich wartości.

Przykład:

function [.....]=fun(....) %% opis funkcji global a1 a2 a3; ..... % koniec funkcji

%% w przestrzeni roboczej global a1 a2 a3; a1=.... a2=..... a3=.....

Funkcje w Matlabie – ciąg dalszy – funkcja feval

Często istnieje potrzeba, aby dana funkcja matlabowska (plik *.m) była w stanie przeprowadzić
obliczenia dla dowolnych funkcji matematycznych zdefiniowanych poza plikiem *.m. Wtedy
stosuje się funkcję feval. Definicja funkcji feval:

>> y = feval(Nazwa_funkcji, x1 .....xn) % Nazwa_funkcji -zmienna łańcuchowa %%
, x1 .....xn – zadane argumenty funkcji

Przykład:

y= feval(‘cos’,[0:0.01:pi]);

Przykład: Funkcja suma_ciagu, która wylicza sumę n wyrazów dowolnego ciągu

function s=suma_ciagu(n,ciag) %% s=suma_ciągu(liczba wyrazów, 'nazwa_funkcji') i=[1:n];
s=sum(feval('ciag',i) % koniec funkcji suma_ciagu

function [a]=ciag(n) %% [a]=ciag(n) – tu definiuję jak wygląda n-ty wyraz ciągu a=0.5 .^n
%koniec funkcji ciag

background image

Operacje łańcuchowe

>> a='to jest lancuch'; % definicja łańcucha i przypisanie go zmiennej a >>
b='drugi'; >> c=strat(a, b); % połączenie łańcuchów. Zmienna c = `to jest lancuch
drugi` >> d=[a b]; % j.w.

>> t=num2str(15.4); % Zamiana liczby na łańcuch >>
d=str2num(`15.4`); % Zmiana łańcucha na liczbę

Rekurencja

Rekurencja jest eleganckim, ale bardzo kosztownym sposobem programowania. Można ją
stosować tam gdzie mamy do czynienia z zależnościami typu f(n+1)=g(f(n)).

Przykład:

function s=silnia(n) %% Obliczanie silni
metodą rekurencyjną s=1; for k=2:n,

s=k*silnia(k-1); % funkcja wywołuje sama siebie end

background image

Rozwiązywanie równań nieliniowych

Przy rozwiązywaniu równań poszukujemy pierwiastków równań, maksimów i minimów funkcji.
Pierwiastki rzeczywiste równania, (czyli miejsca zerowe) –> f(x)=0. W Matlabie funkcja fzero
wyszukuje pierwiastek równania w pobliżu zadanej wartości zmiennej. Czyli do znalezienia
wszystkich pierwiastków równania trzeba podać okolice gdzie ma on występować. Minimum
lokalne funkcji poszukuje się analogicznie do pierwiastków przy pomocy funkcji fminbnd.
Maximum lokalne funkcji poszukuje się przez poszukiwanie minimum funkcji odwrotnej do
danej, czyli -> -f(x). W przypadku wielomianów wartości funkcji wyszukuje się poprzez funkcje
roots(c), gdzie c jest wektorem współczynników wielomianu. W celu obliczenia wartości
wielomianu korzystamy z funkcji polyval(c,x), gdzie x jest liczbą, wektorem lub macierzą dla
której liczymy wartości wielomianu.

Przykład:

>> x=fzero('sin',10); % szuka miejsca zerowego funkcji sinus w okolicach 10 >>
m=fminbnd('sin',10,11); % szuka najmniejszej wartości funkcji sinus w przedziale (10,11) >>
p=[3,-2,4,1]; % definicja wielomianu p=3x^3-2x^2+4x+1 >> r=roots(p); % zwraca pierwiastki
równania >> w=polyval(p,2); % zwraca wartość wielomianu 3*2^3-2*2^2+4*x+1

background image

Rozwiązywanie układów równań liniowych

Matlab ma bardzo rozwinięte algorytmy rozwiązywania równań liniowych. W zależności od
potrzeb można używać metod zaawansowanych (Matlab stara się dobrać metodę w tle) lub
ręcznie poprzez Metodę Gaussa, uzyskiwanie rozkładu macierzy na macierze trójkątne itd.)

Układ równań linowych można zapisać wektorowo w postaci: A*x=b, gdzie A macierz
współczynników, x – wektor zmiennych [x1...xn], b – wektor wartości równań [b1...bm].
Uwaga: z rozwiązaniem układu równań nie ma problemu pod warunkiem, że układ nie jest
sprzeczny, jest dobrze określony, i jest liniowo niezależny. W przeciwnym wypadku trzeba
stosować bardziej zaawansowane metody obliczeń. Do sprawdzania uwarunkowania macierzy
służy funkcja cond(a). Duże wartości funkcji cond świadczą ozłym uwarunkowaniu – to
wpływa na dokładność obliczeń numerycznych.

Metody obliczania układów równań

operator dzielenia lewostronnego: x=A\b – praktycznie jest tu stosowana metoda eliminacji

Gaussa z częściowym wyborem elementu głównego

przez mnożenie wektora wynikowego przez macierz odwrotna współczynników x=inv(A)*b

Przykład:

% rozwiązanie układu równań w postaci [a]*[x]=[b] >> a = [ 1 -4 3; 3 1 -
2; 2 1 1]; % definicja macierzy współczynników >> b = [ -7; 14; 5]; %
definicja wektora wyników >> x = inv(a)*b; % rozwiązanie metodą
odwrócenia macierzy >> x = a\b; rozwiązanie metodą dzielenia
lewotronnego

Uwaga: równanie x=b/A daje wynik rozwiązania układu równań w postaci x*A=b.

Eliminacja Gaussa

Podstawowa metodą rozwiązywania układów liniowych jest metoda eliminacji Gaussa – tzw.
rozkład LU. Polega on na znalezieniu macierzy L i U takich, że A=L*U, gdzie U jest macierzą
trójkątną górną, a L macierzą trójkątną dolną. W Matlabie eliminację Gausa przeprowadza
funkcja lu. Przy wywołaniu [L,U]=lu(A) U jest macierzą trójkątną górną, ale L nie zawsze
będzie macierzą trójkątną dolną. Przy wywołaniu [L,U, P]=lu(A) U jest macierzą trójkątną
górną, L nie zawsze będzie macierzą trójkątną dolną, a P macierzą permutacji (zmienia
kolejność wierszy w macierzy A). Zachodzi tu zależność L*U=P*A.

background image

Inne funkcje związane z układami równań liniowych

wyznacznik macierzy

det

odwrotność macierzy

inv

wartości własne

eig
chol

rozkład Cholesky’ego, rozkład macierzy A na macierz L i L’ takie,

�e A=L’*L

background image

Interpolacja

Interpolacją nazywamy zadanie znalezienia krzywej przechodzącej przez zadane punkty. Te
zadane punkty nazywa się węzłami interpolacji. W Matlabie stosuje się kilka metod interpolacji:
wielomianami pierwszego i trzeciego stopnia, metodą najbliższych sąsiadów oraz za pomocą
funkcji sklejanych. Interpolacje stosuje się do tzw. zagęszczania tabel. Np. mamy tabelę z
krokiem dla osi x równym 1, a chcemy stworzyć tabelę z krokiem 0.2.

Funkcja Interp1

yi=interp1(x, y, xi, ’metoda’) gdzie: x, y – wektory współrzędnych węzłów
interpolacji, xi – wektor punktów na osi X dla których będą obliczane interpolowane
wartości yi metoda:

funkcja łamana

'linear'

funkcja sklejana 3-go stopnia

'spline'

wielomian 3-go stopnia

'cubic', 'pchip'

Przykład:

'nearest'

funkcja najbli

�szego sąsiedztwa

% Interpolacja funkcji sinus, na wykresie węzły zaznaczone są punktami, dodatkowo %
rysowana jest wzorcowa funkcja. >> x=0:10; y = sin(x); xi = 0:.25:10; >> yi = interp1(x, y,
xi); >> plot(x, y, 'o', xi, yi, sin(xi))

Funkcje interp2, interp3

Funkcje interpolujące w 2 i 3 wymiarach.

Przykład:

>> zi=interp2(x,y,z,xi,yi); % x, y, z – dane funkcji, xi, yi – nowe zagęszczone punkty >>
vi=interp3(x,y,z,v,xi,yi,zi); % x, y, z, v – dane funkcji, xi, yi, zi – nowe zagęszczone punkty

Aproksymacja – funkcja polyfit

Aproksymacja oznacza przybliżanie tzn. zastępowanie jednych wartości innymi,
wygodniejszymi, z jakich względów. Matlab pozwala na aproksymację wielomianem.

Przykład:

p=polyfit(x,y,r); % x, y – serie danych, r – zadany stopień wielomianu przybli

�ającego

background image

Dostęp do opisu funkcji statystycznych: help datafun

Funkcje Statystyczne

Element maksymalny

max

Element minimalny

min

Wartość średnia

mean

Wartość medialna

median

Odchylenie standardowe

std

Wariancja

var

Sortowanie kolumn wg ró

�nych wartości

sort

Sortowanie kolumn wg ró

�nych wartości

sortrows

Sumowanie elementów

sum
prod

Mno

�enie elementów

Histogram

hist
histc

Histogram wa

�ony

Zwraca wektor kolejnych skumulowanych sum elementów

cumsum

Zwraca wektor kolejnych skumulowanych iloczynów elementów

cumprod

Współczynniki korelacji

corrcoef

Macierz kowariancji

cov


Wyszukiwarka

Podobne podstrony:
Matlab T Twardowski ,,Wprowadzenie Do Matlaba Na Przykładach''
AiR spr wprowadzenie do matlab, MathLab, Matlab
wprowadzenie do matlaba, Techniczne
Wprowadzenia do MATLAB’a
Wprowadzenie do Matlaba w97, Politechnika Śląska ZiIP i inne, Mechanika
MATLAB - Wprowadzenie do Matlaba, Studia, Sprawozdania, Metody numeryczne
Cw 1 Elementy CAD UR wprowadzenie do Matlab a id 975
Wprowadzenie do MATLABA − Laboratorium
Wprowadzenia do MATLAB’a
Ćw 1 Elementy CAD UR wprowadzenie do Matlab a
WPROWADZENIE DO MATLABA 1
Automatyka- Wprowadzenie do programu Matlab
Matlab (Opisy podstawowych funkcji) PL Wprowadzenie do pracy w środowisku pakietu Matlab
Wykład 1 inżynierskie Wprowadzenie do zarządzania operacyjnego
Wprowadzenie do medycyny rozwojowej 1
PD W1 Wprowadzenie do PD(2010 10 02) 1 1
Wprowadzenie do psychologii
Wprowadzenie do filozofii

więcej podobnych podstron