matlab 03

background image

Podstawy Informatyki 3 – ćwiczenia03

Strona 1 z 8

Podstawy Informatyki

Programowanie w Matlab

Ć

wiczenie 3

Programowanie w Matlab

Programowanie w trybie pośrednim (wsadowym) możliwe jest dzięki skryptom i funkcjom.
Obydwa rodzaje programów, dokładniej ich kod, zapisywane są w plikach tekstowych o roz-
szerzeniu .m (stąd zwanych często m-plikami). Struktura m-plików oraz różnice między
skryptem a funkcją opisane będą w następnych rozdziałach. Obydwa pozwalają na budowanie
własnych poleceń uruchamianych dokładnie tak jak wewnętrzne polecenia Matlab (których
większość również zapisana jest w postaci m-plików). Dają tym samych ogromne możliwości
dostosowania środowiska obliczeniowego do własnych potrzeb.

Tworzenie m-plików

Ponieważ m-pliki są zwykłymi plikami tekstowymi, można je tworzyć używając dowolnego
edytora tekstu (na przykład Notatnika). Matlab zawiera jednak wbudowany edytor zoptymali-
zowany pod kątem pisania oraz analizy poprawności skryptów oraz funkcji. Okno tego edyto-
ra wywoływane jest komendą edit wydaną w wierszu poleceń lub przez wywołanie polece-
nia New -> M- file z menu File.

Rys. 1 Okno edytora z przykładowym plikiem.

O ścieżkach

Zanim przejdziemy do pisania własnego skryptu czy funkcji, musimy wiedzieć, w jaki sposób
Matlab przechowuje informację o lokalizacji plików wykonywalnych. Aby dobrze zrozumieć
sposób działania interpretera, przeanalizujmy co dzieje się, gdy użytkownik wpisze komendę,
np. test i potwierdzi ją klawiszem Enter. Matlab wykonuje wtedy następujące operacje

1. szuka zmiennej test; jeżeli znajdzie takową wyświetla jej wartość
2. jeżeli nie ma zmiennej test, sprawdza, czy słowo to nie jest związane z jedną funkcji

wbudowanych; jeżeli jest, uruchamia ją

3. jeżeli nie ma wbudowanej funkcji test, Matlab sprawdza bieżący katalog szukając pli-

ku test.m; jeżeli go znajdzie – uruchamia zapisany w nim skrypt lub funkcję

background image

Podstawy Informatyki 3 – ćwiczenia03

Strona 2 z 8

4. jeżeli bieżący katalog nie zawiera pliku test.m przeszukiwane są katalogi zapisane na

liście ścieżek

5.

jeżeli i tu nie ma szukanego pliku wyświetlany jest komunikat o błędzie

??? Undefined function or variable 'test'.


Lista
ścieżek

jest systemowym parametrem przechowującym informacje o katalogach, w któ-

rych Matlab szuka m-plików. Początkowy zestaw zapisany jest w pliku :

\toolbox\local\pathdef.m

Listę tę można obejrzeć poleceniem path, natomiast najwygodniej edytować ją z poziomu
menu programu File/Set Path... Do zmiany bieżącego katalogu służą polecenia znane z syste-
mów DOS i Unix, mianowicie:

Funkcja

Opis

pwd

bieżący katalog

dir, ls

lista plików w bieżącym katalogu, dozwolone są
maski: *, ?

cd <katalog>, cd ..

wejście do podkatalogu, wyjście o jeden poziom
do góry

delete <plik>

kasowanie pliku

!<polecenie>

polecenia systemu, np. !rd <katalog> kasuje
katalog


Ć

wiczenie 3.1.

Proszę utworzyć na dysku H katalog o nazwie Matlab, ustawić go jako bieżący i dodać do
listy ścieżek. Od tej pory wszystkie pliki tworzone w czasie ćwiczeń zapisywać będziemy w
tym katalogu.

Katalog można założyć korzystając z narzędzi systemu operacyjnego, następnie dodać go z
poziomu menu. Można także wszystkie operacje wykonać z wiersza poleceń:

cd h:, !md matlab

(3.1)

cd matlab, path(path,’h:\matlab’)

(3.2)

Skrypty

Skrypty są najprostszym rodzajem m-plików. Nie mają ani parametrów wejściowych ani wyj-
ś

ciowych. Są tak naprawdę zapisem sekwencji poleceń wydawanych w trybie bezpośrednim,

dają tym samym możliwość powtarzania szeregu operacji. Operują na zmiennych w prze-
strzeni roboczej, mogą również tworzyć tam nowe zmienne, które pozostają po zakończeniu
obliczeń.

Ć

wiczenie 3.2.

Używając wewnętrznego edytora Matlab, proszę utworzyć i zapisać skrypt o nazwie
wyz_ilo.m

, w którym zdefiniujemy podane niżej macierze, obliczymy ich iloczyn oraz

wyznacznik tego iloczynu. Proszę także uruchomić ten skrypt.

background image

Podstawy Informatyki 3 – ćwiczenia03

Strona 3 z 8

=

=

2

5

3

4

3

2

3

6

3

,

2

5

2

4

3

2

4

3

1

b

a


Zawartość pliku wyz_ilo.m:

%ciało skryptu
a=[1 3 4;2 3 4;2 5 2];
b=[3 6 3;2 3 4;3 5 2];
c=a*b
det(c)


Matlab umożliwia tworzenie skryptów interaktywnych, to znaczy takich, które wymagają w
trakcie działania pewnej akcji ze strony użytkownika (podania liczby, naciśnięcia klawisza
itd.). Służą temu następujące konstrukcje:


Funkcja

Opis

x=input('tekst')

Wyświetla słowo tekst czekając na wprowadzenie
liczby i klawisza Enter

x=input('tekst', 's')

Wyświetla słowo tekst czekając na wprowadzenie
łańcucha znakowego i klawisza Enter

pause

zatrzymuje skrypt do naciśnięcia dowolnego kla-
wisza

pause(n)

zatrzymuje skrypt na n sekund


Ć

wiczenie 3.3.

Proszę napisać skrypt obliczający objętość prostopadłościanu. Skrypt powinien: zapytać użyt-
kownika o jednostki długości, zapytać o wymiary, wyświetlić objętość wraz z jednostką. Pro-
szę zapisać skrypt w pliku prost.m

Podpowiedź
Wyniki będziemy wyświetlać za pomocą funkcji disp. Ale argumentem funkcji disp może
być tylko jedno zmienna. Aby wyświetlić w jednym wierszu napis: Wynik to 5. gdzie 5 jest
wartością zmiennej, np. wyn, należy zapisać:

wyn=5;

(3.3)

disp(strcat(['Wynik to ', num2str(wyn), '.']))

(3.4)


Plik prost.m:

%PROST objętość prostopadłościanu
%Skrypt oblicza objętość prostopadłościanu
%o zadanych długościach krawędzi
%w zdefinowanych przez użytkownika jednostkach.

%powitanie
disp('Objętość p-ścianu')

%pytanie o jednostki
jed=input('jednostka długośći = ','s');

background image

Podstawy Informatyki 3 – ćwiczenia03

Strona 4 z 8

%pytanie o wymiary
a=input('długość = ');
b=input('szerokość = ');
c=input('wysokość = ');

%obliczenie objętości
obj=a*b*c;

%wyświetlenie wyniku
disp(strcat(['objętość wynosi ', num2str(obj),' ', jed, '3']))


Proszę zwrócić uwagę na linie komentarzy zaczynające się znakiem %. Opisywanie kodu,
choć z pozoru wydaje się zbędną pisaniną, jest bardzo dobrym zwyczajem a w przypadku m-
plików ma dodatkowe zastosowanie. Szczególnie ważna jest pierwsza linia komentarza (zwa-
na linią H1) oraz kolejne, bezpośrednio po niej, aż do pierwszej pustej linii (zwane tekstem
pomocy). Linie te wykorzystują następujące polecenia:

Funkcja

Opis

lookfor <tekst>

przeszukuje wszystkie pierwsze linie komentarza
dostępnych m-plików pod kątem słowa <tekst> a
następnie wyświetla te, w których to słowo wy-
stępuje

help <nazwa pliku>

wyświetla tekst pomocy m-pliku, którego nazwa
jest argumentem funkcji


Proszę zwrócić uwagę, jak ważne jest umieszczenie na samym początku pierwszego wiersza
nazwy m-pliku (bez rozszerzenia). Zwykle pisze się ją WERSALIKAMI.
Przetestujmy nasz skrypt. Proszę wpisać

lookfor objętość

(3.5)


a następnie

help prost

(3.6)


Ć

wiczenie 3.4.

Proszę napisać skrypt obliczający pierwiastki równania kwadratowego. Skrypt powinien: za-
pytać użytkownika o współczynniki równania oraz wyświetlić miejsca zerowe z informacją,
czy są to pierwiastki rzeczywiste czy zespolone. Proszę zapisać skrypt w pliku kwadrat.m.

Procedura obliczająca pierwiastki:

a=input('a= ');
b=input('b= ');
c=input('c= ');

delta=b^2-4*a*c;

x1=-b-sqrt(delta)/2*a;
x2=-b+sqrt(delta)/2*a;

disp(x1)
disp(x2)

background image

Podstawy Informatyki 3 – ćwiczenia03

Strona 5 z 8

Pełna wersja skryptu:

%KWADRAT Pierwiastki równania postaci y=a*x^2+b*x+c

disp('Podaj współczyniki równania y=a*x^2+b*x+c')
a=input('a= ');
b=input('b= ');
c=input('c= ');

delta=b^2-4*a*c;

x1=-b-sqrt(delta)/2*a;
x2=-b+sqrt(delta)/2*a;

if delta>=0
str1=['Pierwiastki rzeczywiste równania: ',...
num2str(a),'*x^2+',num2str(b),'*x+',num2str(c),':'];
else
str1=['Pierwiastki zespolone równania: ',...
num2str(a),'*x^2+',num2str(b),'*x+',num2str(c),':'];
end

str2=['x1= ',num2str(x1)];
str3=['x2= ',num2str(x2)];
komunikat=str2mat(str1,str2,str3);

disp(komunikat)

Funkcje

Funkcje są m-plikami, które w odróżnieniu od skryptów, akceptują argumenty wejściowe oraz
zwracają argumenty wyjściowe. W trakcie obliczeń operują na zmiennych we własnej prze-
strzeni roboczej, która jest niezależna, wręcz niedostępna, z wiersza poleceń. Plik funkcji róż-
ni się od pliku skryptu pierwszą linią. Jest nią definicja funkcji w postaci:

function [x, y]=funkcja(a, b, c)

gdzie:
function

jest słowem kluczowym oznaczającym wiersz definiujący funkcję

x, y

– argumety wyjściowe

funkcja

– nazwa funkcji

a, b, c

– argumenty wejściowe


Jeżeli jest jedno wyjście piszemy function x = funkcja (a,b), jeżeli nie ma wyjść:
function [] = funkcja (a,b)

lub function funkcja (a,b).

Pozostałe elementy m-pliku (H1, tekst pomocy, obliczenia) są identyczne jak w przypadku
skryptów.

Uwaga:
Dobrym zwyczajem jest zapisywanie kodu funkcji w m-pliku o nazwie takiej jak nazwa funk-
cji (plus rozszerzenie .m). Deklarowana nazwa funkcji różna od nazwy pliku jest ignorowana
(ważniejsza jest zatem nazwa pliku).


background image

Podstawy Informatyki 3 – ćwiczenia03

Strona 6 z 8

Przykład 3.1.
Przykładem niech będzie funkcja licząca silnie. Poniżej kod takiej funkcji. Proszę zapisać go
w pliku silnia.m.

function s = silnia(n)
%SILNIA wyznacza n!
% SILNIA(N) wyznacza wartość iloczynu
% liczb naturalnych od 1 do N.
% patrz także: FACTORIAL, PROD
if n<0
error 'Proszę podać liczbę naturalną.'
elseif n==0
s=1;
else
s=1;
for i=1:n
s=s*i;
end
end


Ć

wiczenie 3.5.

Proszę napisać funkcje przeliczające: radiany na stopnie, km/h na m/s, °C na °F (podpowiedź:
°

F=9/5*°C+32

Podfunkcje

W jednym m-pliku można zdefiniować kilka funkcji. Pierwsza z nich jest funkcją główną, tą,
którą można wywołać w oknie poleceń Matlab, natomiast kolejne są funkcjami pomocniczy-
mi dla niej. Funkcji pomocniczych nie można wykonać podając ich nazwę w wierszu poleceń,
są one dostępne wyłącznie dla kodu w pliku, w którym się znajdują.

Przykład 3.2.
Proszę przeanalizować poniższy fragment kodu.

function [min, max, sre]=stat(u)
%STAT funkcja oblicza minimum, maksimum
%oraz średnią wektora u.
%
%Patrz także: MIN, MAX, MEAN

n=length(u);

min=minimum(u);
max=maksimum(u,n);
sre=srednia(u,n);

function mi=minimum(x)
%Oblicza najmniejszy element wektora x
x2=sort(x);
mi=x2(1);

function ma=maksimum(x,y)
%Oblicza najwięszy element wektora x o y elementach
x2=sort(x);
ma=x2(y);

function sr=srednia(x,y)
%Oblicza srednia wartosc y elementow wektora x
sr=sum(x)/y;

background image

Podstawy Informatyki 3 – ćwiczenia03

Strona 7 z 8

Przydatne funkcje

Poniższa tabelka zawiera wewnętrzne funkcje Matlaba przydatne podczas budowania funkcji
użytkownika.

Funkcja

Opis

nargin

ustala liczbę wywołanych argumentów wejścio-
wych

nargout

ustala liczbę wywołanych argumentów wyjścio-
wych


Ć

wiczenie 3.6.

Proszę napisać funkcje, która wywołana z jednym parametrem oblicza tablicowo jego kwa-
drat, natomiast przy dwóch argumentach podnosi tablicowo pierwszy do drugiego. Dodatko-
we zadanie: jak sprawdzić, czy argument jest macierzą, wektorem czy skalarem?

function c=pot(a,b)
%POT podnosi wejście do kwadratu pot(a)
%lub zadanego parametru pot(a,b)
%

if nargin<1
error('Za mało argumentów')
elseif nargin==1
c=a.^2;
elseif nargin==2
c=a.^b;
else
error('Za dużo argumentów')
end


Wskazówki do rozwiązania zadania dodatkowego: sposobów sprawdzenia czy argument jest
macierzą, wektorem czy skalarem jest wiele. Poniżej przykłady.
Jeżeli zmienna ma być skalarem, prawdziwe musi być zdanie:

[m,n]=size(zmienna)
(m==1) & (n==1)


Jeśli ma być wektorem, to musi być spełniony warunek:

[m,n]=size(zmienna)
((m==1) | (n==1)) & m~=n


A jeśli macierzą to prawdziwy musi być warunek:

[m,n]=size(zmienna)
(m>1) & (n>1)

Podsumowanie ćwiczenia 3

edycja m-pliku

edit <nazwa>

znak komentarza

%

background image

Podstawy Informatyki 3 – ćwiczenia03

Strona 8 z 8

Zadania do ćwiczeń 3


3.1. Napisz skrypt, który będzie wykonywał następujące zadania:

- tworzy macierz A o wymiarach N x N złożoną z liczb losowych całkowitych z prze-
działu od 0 do 100, gdzie N jest podawane przez użytkownika,
- wszystkie liczby mniejsze od 10 zastępowane są zerami, a liczby większe od 90 zastę-
powane są symbolem inf (nieskończoność),
- oblicza ile jest liczb nie mniejszych od 30 i nie większych od 50 (wynik podaje przez
zmienną ile_liczb) i umieszcza je w wektorze B,
- wyświetla z odpowiednim komentarzem macierz A, zmienną ile_liczb oraz wektor B.


3.2. Napisz skrypt, który będzie porównywał czas obliczania wartości funkcji y=sin(x) w
przedziale <0 ; 2π> za pomocą pętli "for" oraz w ujęciu wektorowym. Długość pętli "for" i
wektora x podaje użytkownik. Wykorzystaj polecenie tic oraz toc.

3.3. Napisz funkcję prosta, która oblicza i zwraca współczynniki równania prostej
Ax+By+C=0 przechodzącej przez dwa punkty P

1

(x

1

, y

1

) oraz P

2

(x

2

, y

2

). Argumentami funkcji

powinny być współrzędne x

1

, y

1

, x

2

, y

2

.

Przykładowy nagłówek funkcji:

function [A, B, C] = prosta(x1, y1, x2, y2)


3.4. Napisz funkcję prosta1, która oblicza i zwraca współczynniki równania prostej
Ax+By+C=0 przechodzącej przez dwa punkty P

1

(x

1

, y

1

) oraz P

2

(x

2

, y

2

), z tym, że argumen-

tami funkcji powinny być dwa dwuelementowe wektory kolumnowe: P1 i P2 zawierające
współrzędne punktów P

1

i P

2

. Funkcja, wykorzystując polecenia nargin oraz size(A) ,

powinna sprawdzać czy wywołanie jej jest poprawne (tzn. wywołanie z dwoma argumentami,
które są dwuelementowymi wektorami kolumnowymi).
Przykładowy nagłówek funkcji:

function [A, B, C] = prosta1(P1, P2)


3.5. Utworzyć funkcję obliczającą n-ty wyraz ciągu Fibonacciego. Funkcja powinna umożli-
wiać wybór metody obliczeń. Metoda pierwsza wykorzystuje wzór rekurencyjny:
F

k

= F

k-1

+ F

k

-2

, dla k=2, 3, 4, …, n oraz F

0

= 0, F

1

= 1.

Druga metoda korzysta ze wzoru Bineta:

]

)

2

5

1

(

)

2

5

1

[(

5

1

n

n

n

F

+

=

Przykładowy nagłówek funkcji:

function [F]=fib(n,metoda)

Przetestować działanie funkcji (obie metody) dla: n = 10, n = 70 , n = 72, n = 100

3.6. Zdefiniuj macierz

=

5678

.

0

123456789

.

4

2

0123456789

0123456789

.

1

A

, następnie sprawdź spo-

soby wyświetlania liczb:

-

FORMAT

-

FORMAT SHORT

-

FORMAT LONG

-

FORMAT SHORT E

-

FORMAT LONG E

-

FORMAT SHORT G

-

FORMAT LONG G


Wyszukiwarka

Podobne podstrony:
Tutorial MATLAB 03
Tutorial MATLAB 03
PPA 03 2013 MATLAB
Matlab Laboratorium 03
L 03 a Sieci dwuwarstwowe w MATLABie
wykład 5 +matlab, W SPR nr 03 04 Kinematyka Odwrotna
PPA 03 2013 MATLAB
Matlab Laboratorium 03
03 Sejsmika04 plytkieid 4624 ppt
03 Odświeżanie pamięci DRAMid 4244 ppt
podrecznik 2 18 03 05
Matlab cw1 2 zaoczni
od Elwiry, prawo gospodarcze 03
Probl inter i kard 06'03

więcej podobnych podstron