1. Programowanie w języku Matlab

Transkrypt

1. Programowanie w języku Matlab
Programowanie w języku
Matlab
D. Caban, P. Skurowski
Wykład 1.
Składnia języka,
podstawowe struktury i operacje
Matlab
Nazwa pochodzi od MATrix
LAboratory
Środowisko obliczeń numerycznych i
symbolicznych posiadające swój język
programowania wysokiego poziomu
Język matlaba – interpretowany,
dosyć wolny
Matlab jest interfejsem napisanym w
języku Java do szybkich bibliotek
numerycznych (blas, fftw)
Zalety
Prosty język wysokiego poziomu
DuŜa liczba dedykowanych bibliotek
tematycznych (tzw toolboxy)
Dedykowane środowiska graficzne: simulink,
simbiology, simevent, system identification…
Interpreter zleceń „on-line”
MoŜliwość korzystania z kodu w C i Fortran
Dostęne darmowe klony: SCIlab, Octave
1
Wady
Wolne operacje interpretowane
Konieczność przestawienia się na
wektorową koncepcję wykonania
programu
DuŜe wymagania pamięciowe
Dosyć drogi
Konsola Matlaba
workspace
historia
wiersz poleceń
edytor macierzy
edytor
profiler
I inne zaleŜnie
od modułów
Typy danych
Macierze
Single (float), double
int8, int16, int32, int64
uint8, uint16, uint32, uint64
logical
Macierze komórek (cell arrays)
Macierze rzadkie
Wartości specjalne: NaN, Inf, -Inf
Struktury
Obiekty
Obiekty Java
2
Podstawienie
>> a=1
a =
1
>> a=1;
>> a=i
%lub a=j
a =
0 + 1.0000i
>> b=-5:5 % zadeklarowanie wektora przez przedział
b =
-5 -4 -3 -2 -1 0 1 2 3 4 5
>>c=abs(b)
c =
5 4 3 2 1 0 1 2 3 4 5
>>d=[1,2,3,4]; %wiersz d=[1 2 3 4]
d =
1 2 3 4
>>d=[1;2;3;4]; %kolumna
d =
1
2
3
4
>> e=0:0.2:1 % zadeklarowanie wektora przez przedział z zadanym krokiem
e =
0 0.2 0.4 0.6 0.8 1
Podstawienie c.d.
>> a=[1 2; 3 4] % tablica dwuwymiarowa
a =
1 2
3 4
>> a(:,:)=7
a =
7 7
7 7
>> a=1; b=2; c=3; d=4;
>> e=[a, b; c, d]; % podstawienie zmiennych do macierzy
>> a = [1;2]; b=[3;4];
>> c = [a, b]
c =
1 3
2 4
>> d = [1,2;3] % dane niespójne
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
>> A = [5 7 8; 0 1 9; 4 3 6]; % macierz wielowymiarowa
>>A(:,:,2) = [1 0 4; 3 5 6; 9 8 7];
Tworzenie macierzy
a=ones(m,n); – macierz z jedynek rozmiaru (m x n)
a=zeros(m,n); – macierz z zer rozmiaru (m x n) ,
zeros(n)
a=eye(n); – macierz jednostkowa rozmiaru (n x n) ,
eye(2,3)
a=diag([1 2 3],k); – macierz o zadanej k-tej
diagonalnej,
A=rand(m,n); – macierz o wartosciach losowych z (0;
1)
A=hilb(n); – macierz Hilberta rozmiaru (n x n) ,
A=invhilb(n); – macierz odwrotna do m. Hilberta,
A=magic(n); – kwadrat magiczny, n = 1, 3, . . .
A=linspace(p,k, ile); - liniowy przedział od p do k
A=logspace(p,k, ile); - log przedział od p do k
[Y,X]=meshgrid(y,x); - tworzy „układ współrzednych”
3
Odwołania do elementów macierzy
>> a= [1,2,3;4,5,6;7,8,9];
>> b= a(2:3,:)
b =
4
5
7
8
Odwołanie normalne
>> b= a(2,2)
b = 5
6
9
>> A(2,2,2)
ans =
5
Usuwanie elementów
>> b=a;
>> b(:,2)=[]; %
Dostęp liniowy
>> b=a(7)
b =
3
>> b=a(:)
b =
1
4
7
2
5
8
3
6
9
Indeksacja logiczna
Podstawowe operacje macierzowe
>>a=[1,2;3,4]; b=[5;6];
c=[7,8];d=[1,2;2,1];
dodawanie macierzy
>>e= a + d;
>>f= a + b;
??? Error using ==> plus
Matrix dimensions must
agree.
MnoŜenie macierzy
>>e=a*b; %wektor
kolumnowy
>>e=a*d; %macierz 2x2
>>e=c*d; %wektor
wierszowy
>>e=b*c; %macierz 2x2
>>f=c*b; %skalar
MnoŜenie elementów
macierzy
>>g=a.*d;
Dzielenie elementów
macierzy
Lewostronne - \
Prawostronne - /
Po elementach ./ , .\
Potęgowanie
>>g= a^2; %macierz
kwadratowa
>>h=a.^2; % po elementach
Transpozycja
>> b=a’;
Podstawowe operacje macierzowe
a=triu(A,k); – podmacierz trójkatna górna poczynajac od k-tej
przekatnej,
a=tril(A,k); – . . . dolna
a=diag(A,k); – k-ta diagonalna utworzona jako kolumna,
diag(A)
a=rot90(A); – obrót macierzy o 90 st
a=fliplr(A); – obrót macierzy wokół pionowej osi symetrii,
a=flipud(A); – obrót macierzy wokół poziomej osi symetrii,
a=reshape(A,m,n); – zamiana macierzy A na postać (m x n)
A=ndims(A); - podaje liczbę wymiarów macierzy
a=squeeze(A); – usuwa nadmiarowe wymiary
y=det(A); – wyznacznik,
a=inv(A); – macierz odwrotna,
[m, n]=size(A); – m – liczba wierszy, n – liczba kolumn,
n=length(A); – liczba kolumn,
4
Działanie funkcji na macierzach
Działają na macierzach „element po
elemencie”
sin, cos, tan, cot, asin, acos, atan, acot, sinh, cosh,
tanh, coth, asinh, acosh, atanh, acoth, exp, log, log10,
abs,angle, real, imag, conj, sqrt, sign, rem, round,
floor, fix, ceil, gcd, lcm
Działają na macierzach jak na zbiorze
wektorów (kolumnowych)
max, min, sum, prod, sort, length, median, mean, std,
any, all, cumprod, cumsum
>> a= [1,2,3;4,5,6;7,8,9];
>> sum(a)
ans =
12
15
18
Operacje logiczne na macierzach
Macierz moŜe być potraktowana jako
argument podczas operacji logicznych
>>a= [1,2,3;4,5,6;7,8,9];
>>w=a>5
w=
0 0 0
0 0 1
1 1 1
>>w=a~=b;
>>w=a==c;
Operacje wykonywane dla kaŜdego
elementu macierzy – odpowiedzią jest
macierz typu logical
Indeksacja logiczna
Jest najwygodniejszą meodą dostępu
warunkowego do elementów
macierzy,
Pozwala na unikanie pętli
>>a=1:10
a=
1 2 3 4 5 6 7 8 9 10
>>w=mod(a,2)==0
0 1 0 1 0 1 0 1 0 1
>>a(w)=0
1 0 3 0 5 0 7 0 9 0
5
Testowanie i konwersja typów
Szereg funkcji pozwalająch na:
informowanie o zmiennych
length, numel, ndims, size, exist
testowanie własności zmiennych
isinteger, isfloat, ischar, islogical
iscellstr, isjava, isinf, isfinite ...(is*)
konwersje typów
double, single, int8..int64, uint8..uint64,
int2str, num2str
6

Podobne dokumenty