Inżynierskie pakiety oprogramowania (CAD/CAM) dr M. Pluciński

-----------------------------------------------------------------------------------------------------------------

WYKŁAD 2 (08/03/2007)

V=size(A)

zwraca rozmiar macierzy A

[wk]=size(A)

w=size(A,1)

k=size(A,2)

length(V) zwraca długość wektora length(A) zwraca ilość elementów w macierzy A det(A)

liczy wyznacznik macierzy

rank(A)

rząd macierzy

inv(A)

liczy macierz odwrotną A^(-1) trl(A)

zwraca dolną trójkątną część macierzy (łącznie z przekątną) tru(A)

zwraca górną trójkątną część macierzy (łącznie z przekątną) vd=diag(A)

zwraca wektor na przekątnej (w drugą stronę: D=diag(v)) diag(diag(A))

zwraca macierz tylko z przekątną

sum(v)

jeśli wektor zostanie przekazany jako argument, to otrzymamy sumę wektora

sum(A)

zwraca wektor sum wyliczony dla każdej kolumny sum(A’)

zwraca wektor sum wylicozny dla każdego wiersza prod(A)

zwraca iloczyn

prod(v)

j.w. dla wektora

mean//

średnia arytmetyczna

std//

odchylenie standardowe

min//

zwraca minimum

max//

zwraca maximum

save plik

zapisuje dane na dysk (zapisane do pliku są wszystkie zmienne zdefiniowane

save plik zm1 zm2

tylko zapisane zmienne

load plik

wczytywanie zmiennych

save –ascii plik.txt zm

zapisanie zmiennych do pliku tekstowego (do jednego pliku można zapisać tylko jedną zmienną)

sprintf

przekształca zmienne wejściowe na string load plik.txt

utworzy zmienne o nazwie pliku bez rozszerzenia eval(‘...’)

w nim łańcuch tekstowy lub polecenie MatLaba, które będzie zinterpretowane i wykonane

np. eval(‘x=sin(10)’)

• Tworzenie pętli

for zm=wektor

.

.

.

end

Zamiast wektora można też przekazać macierz, wtedy zmienna będzie przyjmować kolejne kolumny macierzy. Zmienna w pętli przyjmuje pewne wartości.

Created by Maya

1

Inżynierskie pakiety oprogramowania (CAD/CAM) dr M. Pluciński

-----------------------------------------------------------------------------------------------------------------

Przykład:

for k=10:-0.1:0

.

.

end

for z=[1 4 8 20]

.

.

end

for k=1:10

v(k)=3^k;

end

Ostatni przykład pokazuje, jak nie należy tworzyć pętli. Pętla utworzy wektor v, ale z punktu widzenia efektywności nie jest ona poprawna. Przy pierwszym przejściu przez pętlę MatLab zauważy, że nie ma wektora v, utworzy go więc o rozmiarze 1, przy drugiej pętli ten rozmiar będzie już za mały. MatLab za dużo czasu przydziely samemu przydzielaniu pamięci.

Rozwiązanie:

v=zeros(1,10);

for k=1:10

v(k)=3^k;

end

lub:

for k=10:-1:1

v(k)=3^k;

end

Można zauważyć, że często małe pętle można zastąpić jednym poleceniem: v=3.^(1:10)

Pętle while:

while wyrażenie_log

.

.

.

end

Wyrażenie logiczne nie musi być podane w nawiasie.

Created by Maya

2

Inżynierskie pakiety oprogramowania (CAD/CAM) dr M. Pluciński

-----------------------------------------------------------------------------------------------------------------

Znaki:

==

<

>

<=

>=

~=

różne

~ negacja

&

|

Przykład, jak nie należy tworzyć pętli:

s=0

while s~=100

s=s+0.01;

end

Liczba 100 daje się zapisać na skończonej ilości bitów. Nie da się tak niestety zapisać liczby dziesiętnej. Pętla ta nigdy się nie zatrzyma, bo nie trafimy w część setną.

• Operacje warunkowe

if wyr_log1

.

.

elseif wyr_log2

.

.

elseif wyr_log3

.

.

else

.

.

end

Wyrażenia logiczne, tak jak w przypadku pętli while, nie muszą być w nawiasie.

Pliki *.m mogą być skryptami lub funkcjami.

Skrypt – ciąg poleceń, jakie mają być zinterpretowane i wykonane. Z poziomu skryptu jest pełny dostęp do całej przestrzeni roboczej MatLaba.

Created by Maya

3

Inżynierskie pakiety oprogramowania (CAD/CAM) dr M. Pluciński

-----------------------------------------------------------------------------------------------------------------

program.m

% opis

% skryptu

x=0:0.1:100;

y=sin(x)+cos(x);

W znaki % można również wpisać komentarze. Po wpisaniu komendy help program wyświetli nam wszystkie komentarze na początku skryptu.

Funkcje

test.m

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

<- nazwa taka sama, jak nazwa pliku!

% opis

% funkcji

x=a+b+c;

y=a-b*c;

‘Function’ jest słowem kluczowym. Jeśli w pierwszym poleceniu nie pojawi się to słowo, MatLab założy, że jest to skrypt. W nawiasie [] podane są parametry zwracane przez funkcję (te wartości muszą być wyliczone). W nawiasie () podane są parametry przekazywane. Wszystkie zmienne funkcji są zmiennymi lokalnymi.

W nowych wersjach MatLaba, można kilka funkcji zapisywać w jednym pliku.

return

wymusza wcześniejsze zakończenie funkcji lub skryptu nargin i nargout

zmienne, które informują funkcję, z jaką ilością zmiennych funkcja została wywołana i ile zwróci test.m

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

if nargin==1

<- badanie ilości parametrów (brak bi c) b=1;

c=2;

elseif

nargin==2

c=7;

end

x=a+b+c;

y=a-b*c;

W ten sposób taką funkcję można wywołać:

- z jednym parametrem:

test(1)

- z dwoma parametrami:

test(1,2)

- z trzema parametrami:

test(1,2,3)

[x1,y1]=test

-> nargout=2

• global p,q -> unikamy tego, aby nie zaburzyć hermetyczności funkcji

Created by Maya

4

Inżynierskie pakiety oprogramowania (CAD/CAM) dr M. Pluciński

-----------------------------------------------------------------------------------------------------------------

Nie należy więc zapisywać:

test.m

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

%

%

global p,q;

x=a+b+c;

y=a-b*c;

• break

Ze skryptów można wywoływać funkcje i inne skrypty.

Z funkcji wywołujemy inne funkcje, funkcja może wywołać siebie samą, można też wywołać skrypt, (ale skrypt widzi zmienne lokalne).

• Kreślenie wykresów

- eleganckie

- wykresy w osobnym oknie (pasek narzędzi do modyfikacji)

- wykresy mogą być kopiowane przez schowek i można je wklejać do dokumentów

- rastrowe lub wektorowe

plot(x)

rysowanie wykresu z wektorem wartości

plot(x, y)

plot(x, y, ’...’)

można określić jakiego koloru i stylu ma być linia: r g b w k

-

linia ciągła

. linia

kropkowana

-.

linia

kreskowo-kropkowana

Wykresy

zbudowane

z

markerów:

*

+

x

0

plot(x, y, ‘*r’)

• Kreślenie większej ilości linii na 1 wykresie: plot(x1, y1, x2, y2, x3, y3)

wektory muszą być parami takich samych

rozmiarów

Created by Maya

5

Inżynierskie pakiety oprogramowania (CAD/CAM) dr M. Pluciński

-----------------------------------------------------------------------------------------------------------------

• Dodawanie atrybutów:

plot(x1, y1, ‘-w’, x2, y2, ‘+r’)

plot(x ,A)

gdzie A to macierz, wykreślane wiersze macierzy A funkcją x plot(x, A(1, : ), x, A(2, : ), x, A(3, : )

Każde wywołanie funkcji plot, kreśli nowy wykres na starym. Żeby ocalić stary należy zablokować wykres:

hold on

blokuje narysowaną linię i sposób, w jaki jest skalowana hold off

odblokowuje

figure(1)

pomaga tworzyć wiele okien z wykresami, pierwsze okno z wykresem uaktywnione

axis([xmin max ymin max]) przeskalowanie wykresu ręcznie (1 argument w formie wektorów 4 wartości)

axis(‘auto’)

autoskalowanie

axis(‘equal’)

oś x i y ma taki sam zakres min max

axis(‘square’)

to samo, co equal + dodatkowo wyświetlane wartości z x i y będą takie same

Inne parametry wykresu:

grid on

włącza siatkę

grid off

wyłącza ( samo grid przełącza) xlabel(‘...’)

etykieta osi x

ylabel(‘...’)

etykieta osi y

title(‘...’) tytuł wykresu

semilogx oś x w skali logarytmicznej semilogy oś y w skali logarytmicznej loglog

obie osie w skali logarytmicznej

bar

kreśli wykres słupkowy

polar(r, k)

kreśli wykres biegunowy

subplot(il_wierszy, il_kolumn, nr_wykresu) umieszcza w jednym oknie kilka wykresów

subplot(2, 1, 1)

I-szy wykres

plot(x, y)

subplot(2, 1, 2)

II-gi wykres

bar(x)

Created by Maya

6

Inżynierskie pakiety oprogramowania (CAD/CAM) dr M. Pluciński

-----------------------------------------------------------------------------------------------------------------

x=linspace(min, max, il_pkt)

zwróci wektor x, w którym pierwsza i ostatnia wartość, to będzie min i max, pozostałe będą równomiernie rozłożone

x=logspace(m, max, il_pkt)

dokonuje podziału przedziału min max w skali logarytmicznej

Przykład:

Narysować wykres funkcji:

1

y( x) =

−( 2

x + )

1

1+ e

x ∈[

]

10

,

0

Spróbkowanie x-ów:

x=0: 0.1: 10;

lub:

x=linspace(0, 10, 1000)

y=1./(1+ex(-(x.^2+1)));

plot(x,

y)

Created by Maya

7