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