Podstawy podstaw, czyli MATLAB w pigułce- wersja dla leniwych zapracowanych 1.WYKRESY
plot(X) – rysuje wektor X w funkcji indeksu, w przypadku macierzy traktuje je jak zestaw wektorów plot(X,Y) – wykreśla wektor Y w funkcji wektora X, Gdy X lub Y jest macierzą to wektor jest rysowany odpowiednio w funkcji kolumn lub rzędów.
plot(X,Y,S) – wykreśla jak funkcja plot(X,Y) ale dodatkowo pozwala wybierać kolor, rodzaj linii i symbole punktów.
Kolor
Symbole punktów
Rodzaj linii
y – yellow
. – point
- – ciągła
m – magenta
o – circle
: – kropkowana
c – cyan
x – x-mark
-. – kropka-kreska
r – red
+ – plus
-- – kreskowana
g – green
* – star
b – blue
s – kwadraty
w – white
d – romb
k – black
v – trójkąt w dół
^ – trójkąt w gór
< – trójkąt w lewo
> – trójkąt w prawo
p – pięciokąt
h – sześciokąt
Przykład:
>> plot(1:10,y) % wykreśla wektor od 1 do 10 w funkcji wektora y
>> plot(1:10,y, 'bx') – j.w. ale dodatkowo wykresla go w kolorze niebieskim zaznaczając punkty krzyżykami.
>> plot(1:10,x, 'bx ', 1:10,y, 'r*') – wykrela dwa wykresy na jednym fplot(F,P) – funkcja wykreśla funkcję F daną w postaci łańcucha w przedziale P.
>> fplot('2*sin(x) ',[0 2*pi])
% funkcja 2*sin(x) w przedziale od 0 do 2K
ezxplot(F,P) – funkcja wykreśla funkcję F w przedziale P.
>> ezplot(x, 2*y, [0,2*pi])
% wykres funkcji parametrycznej typu x=x(t), y=y(2t), t[0,2K]
Rysowanie wielu wykresów na wspólnym wykresie graficznym – funkcja hold:
hold on -wstrzymuje czyszczenie okna graficznego
hold off - przywraca tryb domyślny (każdorazowe czyszczenie okna) ishold -testuje tryb rysowania wykresów
figure - otwiera nowe okno graficzne
>> figure(n) % uaktywnia okno graficzne o danym parametrze,
>> close % zamyka okno aktywne lub okno z zadanym parametrem.
>> cla % czyści bieżący wykres
>> clf % czyści aktywne okno graficzne
subplot
Funkcja subplot służy do podziału okna graficznego na mniejsze fragmenty. Podziału można dokonać albo w układzie macierzowym, albo podając dokładne wymiary wykresu.
subplot(m,n,p) - dzieli okno graficzne na M kolumn i N wierszy (M,N<9). P oznacza numer aktualnego wykresu. Można też wywołać jako subplot(mnp)
line(x,y) rysuje linie łamaną łączącą wierzchołki punktów wyznaczonych przez elementy wektorów x i y fill(x,y,’c’) rysuje wielokąt o wierzchołkach w punktach wyznaczonych przez wektorów x i y, wypełniony kolorem 'c'.
S
kalowanie wykresów – funkcje ax
is i l og -i
axis(' auto' ) domylny tryb skalowania
axis([xmin, xmax, ymin, ymax]) wykreśla wykres w zadanych przedziałach osi X i Y
axis(' off' ) ukrywa osie
axis(' on' ) przywraca wyświetlanie osi
axis(' equal' ) osie mają proporcjonalne jednostki na obu osiach X i Y
loglog(x) skala logarytmiczna na obu osiach
semilogx(x) skala logarytmiczna na osi X
semilogy(x) skala logarytmiczna na osi Y
Opisywanie wykresów
plot(x,y, 'r ') - wykres funkcji
title('To jest wykres') - Tytuł wykresu
grid off - wyłączenie wyświetlania siatki
t>
%
%
dw
ylabel('o Y') - podpis osi Y
text(2,4, 'tu jest punkt') - tekst wstawiony w punkcie (2,4) Funkcja meshgrid – tworzy macierze opisujące położenie węzłów siatki prostokątnej. Służy do przygotowania danych niezbędnych do stworzenia większości wykresów 3D.
Przykład:
>> [X,Y]=meshgrid(x,y); % tworzy macierze X, Y na podstawie wektorów z węzłami siatki x, y
>> [X,Y]=meshgrid(x); % j.w. ale y=x
Funkcja mesh
mesh(X,Y,Z) – funkcja mesh rysuje siatkę opisaną przez macierze X,Y,Z. Gdzie macierze X, Y podają współrzędne punktów siatki a dane w macierzy Z określają wartość funkcji w punkcie (x,y).
Mesh(X,Y,Z,c) – c – indeksy kolorów w aktualnej mapie kolorów.
2.MACIERZE
Do generowania pewnych macierzy można stosować funkcje:
zeros(w,k):-macierz wypełniona zerami np.: A = zeros(2,3) ans =
0 0 0
0 0 0
ones(w,k):-macierz wypełniona jedynkami np.: A = ones(2,4) ans =
1 1 1 1
1 1 1 1
rand(w,k):-macierz liczb pseudolosowych o rozkładzie równomiernym np.: A = rand(2,5) ans =
0.9501 0.6068 0.8913 0.4565 0.8214
0.2311 0.4860 0.7621 0.0185 0.4447
eye(N): macierz jednostkowa (kwadratowa N x N z jedynkami na przekątnej głównej i zerami)
-Definicja macierzy przez wyliczenie elementów:
A=[2 2 2 1; 1 2 3 1]
A =
2 2 2 1
1 2 3 1
-Definicja macierzy przez wygenerowanie elementów:
A=[min:krok:max]
Polecenie generuje wektor poczynając od elementu o wartości min, kończąc na elemencie max z krokiem krok;gdy krok nie jest zdefiniowany przyjmuje wartość 1.
-Odwołanie do elementów:
A(2,3) odwołanie do elementu 3 w wierszu 2
-Odwołanie do podmacierzy, przykłady:
B=A(:,[1:3 5])- utworzenie macierzy B poprzez pobranie z macierzy A kolumn 1-3 oraz 5
B=A([1 3], 1:2:5)- utworzenie macierzy B z elementów macierzy A leżących na przecięciu 1 i 3 z kolumnami 1, 2 i 5
-Usuwanie wektora z macierzy:
» A=[1 2 3 4; 4 5 6 7]
A =
1 2 3 4
4 5 6 7
» A(2,:)=[ ] - usuwa drugi wiersz macierzy A
A =
1 2 3 4
» A(:,1:2)=[ ] - usuwa dwie pierwsze kolumny macierzy A
A =
3 4
6 7
-Jeżeli w macierzy Y w miejsce (3,2) chcemy wstawić np. 5 , to piszemy: Y(3,2)=5;
-Wymiar i wyświetlanie macierzy
• [n,m]=size(A) zwraca liczbę wierszy m i kolumn n macierzy A;
• n=length(X) - zwraca wymiar wektora X
• disp(A) lub A - pokazuje macierz A na ekranie; zrd-
Operacja macierzowa
Operacja tablicowa
Dodawanie
+
+
Odejmowanie
-
-
Mnożenie
*
.*
Dzielenie lewostronne
\
.\
Dzielenie prawostronne
/
./
Potęgowanie
^
.
inv(A) lub A^(-1) zwraca macierz odwrotną do A
A’ - transponuje macierz A
det(A) - obliczanie wyznacznika macierzy A
• eig(A) wartości własne macierzy A
• poly(A) obliczanie współczynników wielomianu charakterystycznego macierzy A
• rank(A) obliczanie rzędu macierzy A
• diag(A) wyznaczenie elementów leżących na głównej przekątnej macierzy A 3.IMPULSY
Tu wyszło moje lenistwo, po prostu wklejam kod z projektu robiący wszystko co trzeba.
%sinus
fp=20000;
dt=1/fp; %odstęp pomiędzy próbkami t=0:dt:0.5; %czas
R=1000; C=2e-6; tau=R*C; %elementy obwodu RC
kx=1/tau*exp(-t/tau); %odpowiedz impulsowa fs=0.05/tau:0.1/tau:0.15/tau %wybrane częstotliwości sygnału plot(t,kx) %wykres odpowiedzi impulsowej yk(length(t))=0; %zarezerwowany obszar na sygnał
ti=0:dt:max(t); %przedział czasowy dla sygnału niezerowego Ug=1 %napięcie pobudzenia
% pętla konieczna z uwagi na fakt, iż analiza dokonywana jest równocześnie dla fs i f.
for i=1:length(fs)
ys(i,:)=Ug*sin(2*pi*fs(i)*t);
yk(i,1:length(ti))=ys(i,1:length(ti));
s1(i,:)=dt*conv(kx,yk(i,:));
end
plot(t(1:5000),s1(i,1:5000),'r',t(1:5000),yk(i,1:5000),'b')
xlabel('t[s]'); ylabel('U[V]');
grid
figure
mesh(s1(:,1:2000)) %obraz zmian sygnału w funkcji częstotliwości end
%odpowiedź impulsowa dla sygnału prostokątnego;
fp=20000;
dt=1/fp; %odstęp pomiędzy próbkami t=0:dt:0.5; %czas
R=1000; C=2e-6; tau=R*C; %elementy obwodu RC
kx=1/tau*exp(-t/tau); %odpowiedź impulsowa plot(t,kx) %wykres odpowiedzi impulsowej yk(length(t))=0; %zarezerwowany obszar na sygnał
ti=0:dt:max(t)/5; %przedział czasowy dla sygnału niezerowego Ug=1 %napięcie pobudzenia yk(1:length(ti))=Ug;
s1=dt*conv(kx,yk);
plot(t(1:5000),s1(1:5000),'r',t(1:5000),yk(1:5000),'b')
xlabel('t[s]'); ylabel('U[V]');
grid
end
%odpowiedź układu RC dla pobudzenia sinus kluczowany;
fp=20000;
dt=1/fp; %odstęp pomiędzy próbkami t=0:dt:0.5; %czas
R=1000; C=2e-6; tau=R*C; %elementy obwodu RC
kx=1/tau*exp(-t/tau); %odpowiedź impulsowa fs=0.05/tau:0.1/tau:0.15/tau %wybrane częstotliwości sygnału plot(t,kx) %wykres odpowiedzi impulsowej yk(length(t))=0; %zarezerwowany obszar na sygnał
ti=0:dt:max(t)/5; %przedział czasowy dla sygnału niezerowego Ug=1 %napięcie pobudzenia
% pętla konieczna z uwagi na fakt, iż analiza dokonywana jest równocześnie dla fs i f.
for i=1:length(fs)
ys(i,:)=Ug*sin(2*pi*fs(i)*t);
yk(i,1:length(ti))=ys(i,1:length(ti));
s1(i,:)=dt*conv(kx,yk(i,:));
end
plot(t(1:5000),s1(i,1:5000),'r',t(1:5000),yk(i,1:5000),'b')
xlabel('t[s]'); ylabel('U[V]');
grid
figure
mesh(s1(:,1:2000)) %obraz zmian sygnału w funkcji częstotliwości end
Żeby wszystko było w jednym miejscu- Czarkowe echo:
[n0,fp,bits]=wavread('C:\matlab\ed1.wav'); %wczytanie pliku wav do macierzy n0
g=[1,zeros(1,5000),1]; % utworzenie macierzy z zerami
n1=n0(:,1); %wycięcie pierwszej kolumny z pliku wav
n2=n0(:,2); % wycięcie drugiej kolumny z pliku wav
x1=conv(n1,g);%właściwe tworzenie echa (czyli przesunięcie macierzy n1 o 5000 elementów i późniejsze sklejenie z pierwotnym n1
tak jak w dodawaniu pisemnym) dla jednego kanału
x2=conv(n2,g);%jw
x3=[x1 x2]; % robimy stereło
sound(x3,44100) % I słuchamy jak nam wyszło