Inżynierskie pakiety oprogramowania (CAD/CAM)
dr M. Pluciński
-----------------------------------------------------------------------------------------------------------------
Created by Maya
1
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.
Inżynierskie pakiety oprogramowania (CAD/CAM)
dr M. Pluciński
-----------------------------------------------------------------------------------------------------------------
Created by Maya
2
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.
Inżynierskie pakiety oprogramowania (CAD/CAM)
dr M. Pluciński
-----------------------------------------------------------------------------------------------------------------
Created by Maya
3
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.
Inżynierskie pakiety oprogramowania (CAD/CAM)
dr M. Pluciński
-----------------------------------------------------------------------------------------------------------------
Created by Maya
4
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
Inżynierskie pakiety oprogramowania (CAD/CAM)
dr M. Pluciński
-----------------------------------------------------------------------------------------------------------------
Created by Maya
5
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
Inżynierskie pakiety oprogramowania (CAD/CAM)
dr M. Pluciński
-----------------------------------------------------------------------------------------------------------------
Created by Maya
6
• 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)
Inżynierskie pakiety oprogramowania (CAD/CAM)
dr M. Pluciński
-----------------------------------------------------------------------------------------------------------------
Created by Maya
7
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
(
2
1
1
)
(
+
−
+
=
x
e
x
y
]
10
,
0
[
∈
x
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)