Wprowadzenie do informatyki
Instrukcja laboratoryjna
Temat:
„Podstawy programowania w językach wysokiego
poziomu”
Wykonali:
dr inż. BANASIAK Kazimierz kpt. mgr inż. KACZMAREK Paweł
Warszawa 2019 r.
1. W
STĘP1. Utworzyć na pulpicie folder o nazwie Nazwisko_Grupa_dzień_miesiąc_rok np.
Kowalski_x1_06_11_2019. W folderze tym zapisywane będą wszystkie powstałe w trakcie ćwiczenia pliki.
Po zakończeniu ćwiczenia folder ten należy usunąć z pominięciem Kosza (shift+del).
2. Uruchomić program Matlab. Program Matlab może bezpłatnie pobrać, zainstalować i używać zgodnie z licencją każda osoba dysponująca adresem mailowym z domeny wat.edu.pl. Szczegółowa instrukcja postępowania znajduje się na stronie internetowej WAT -> Rozwój -> Dystrybucja oprogramowania.
3. W celu przygotowania się do wykonania ćwiczenia należy zapoznać się z poniższą instrukcją oraz z instrukcją zawierającą podstawowe informacje dotyczące programowania w Matlabie: Podstawy programowania w Matlabie – materiały pomocnicze do ćwiczenia laboratoryjnego.
2. Z
ADANIA DO WYKONANIA2.1. Simulink
1. W oknie Command Window po znaku zachęty >> wpisać simulink i zatwierdzić klawiszem Enter lub kliknąć ikonkę programu :
. Wybrać pusty model (blank model).
2. Otworzyć okno Simulink Library Browser poprzez wybór z paska narzędzi View->Simulink Library Browser lub poprzez wciśnięcie kombinacji klawiszy Ctrl+Shift+L. W polu
wyszukiwarki w otwartym oknie wpisać: sine wave – zaznaczyć i zapoznać się z
widocznym po chwili krótkim opisem bloku DSP System Toolbox Sine Wave. Przeciągnąć blok w pole modelu (okno główne programu) . Następnie powtórzyć tę czynność dla drugiego generatora.
3. W polu wyszukiwarki w Simulink Library Browser wpisać scope. Z dostępnych wyników wybrać bloki Scope a następnie w podobny sposób XY Graph.
4. Wskazać myszą na wyjście > genaratora ( tak by kursor myszy przyjął postać +), nacisnąć lewy klawisz myszy i przeciągnąć wyjście generatora do wejścia > bloku zobrazowania (np. XY Graph) i zwolnić klawisz myszy. Urządzenia WE i WY zostają połączone. Aby rozgałęzić połączenie należy:
- wskazać myszą miejsce rozgałęzienia sygnału (pojawi się znak +),
- wcisnąć prawy klawisz myszy i przeciągnąć połączenie do wejścia urządzenia (Scope).
Bloki połączyć tak by uzyskać schematu przedstawiony na rys. 2.2
Uwaga: Domyślnie czas symulacji to 10sek. Aby obserwować spowolnione przebiegi elektryczne na oscyloskopie należy:
- kliknąć blok generatora Sine Wawe. W otwartym oknie ( rys. 2.1 ) zmienić parametr Sample time na wartość 0.001. Na rysunku generatora sinusoida przyjmie postać funkcji schodkowej.
- podobną czynność wykonać dla drugiego generatora.
Rys. 2.1. Blok opisu i konfiguracji parametrów generatora Sine Wave
5. Zapisać przygotowany model w przygotowanym wcześniej folderze pod nazwą model1.
Uruchomić model Simulation->Run, ctrl+t lub klikając stosowną ikonkę.
6. Czynność powtórzyć klikając uprzednio na blok Scope – otworzy się dodatkowe okienko Zobrazowania przebiegów.
7. Dokonać modyfikacji modelu ( zmian częstotliwości sygnałów w generatorach)i zgodnie z poleceniami prowadzącego, celem uzyskania zobrazowania okręgu lub wybranych figur
Lissajous.
Rys. 2.2. Schemat badanego układu porównania częstotliwości dwóch generatorów Przesuń suwak w dół
aby zobaczyć dalszy opis konfiguracji parametrów sygnału sinusoidalnego
8. Zapisać przygotowany model w przygotowanym wcześniej folderze pod nazwą model1.
Uruchomić model Simulation->Run, ctrl+t lub klikając stosowną ikonkę.
9. Czynność powtórzyć klikając uprzednio na blok Scope – otworzy się dodatkowe okienko.
10. Dokonać modyfikacji modelu i otwartych okien zgodnie z poleceniami prowadzącego, celem uzyskania zobrazowania okręgu lub wybranych figur Lissajous.
2.2. Matlab- obliczenia interaktywne
Część 2 ćwiczenia obejmuje pracę interaktywną w środowisku Matlab. Można tu wprowadzać dane, podawać polecenia i uzyskiwać rezultaty wykonania nawet bez konieczności pisania programu. Celem zrozumienia istoty, zrealizujemy 5 poleceń wpisanych w oknie Command Window po tzw. znaku zachęty (>>). Każde polecenie jest wykonane po zatwierdzeniu naciśnięciem Enter.:
>> r=5.1234;
>>kat=[0: 1: 360];
>>x=r*cosd(kat);
>>y=r*sind(kat);
>> plot(x,y)
Uwaga: W powyższym zapisie uzycie sind oznacza że podajemy argument w stopniach (ang. degree). Użycie Sin oznacza, że podawany jest argument w radianach.
Efektem wykonania ostatniego polecenia plot() jest wykres koła. Polecenia kolejno wpisane to instrukcje Matlaba przygotowujące dane do wykonania wykresu ( tu dane 361 wartości- patrz okno Workspace).
Realizowane dalej punkty punkty wskaże prowadzący ćwiczenie.
1. System pomocy. Funkcje Matlaba.
Wpisz polecenia i zapamiętaj je na przyszłość.
Co jest ich wynikiem?
help elfun help matfun help specfun
Po zapoznaniu się z wynikami. wpisz polecenie:
clc
Przyjrzyj się ponownie ekranowi. Co jest wynikiem polecenia clc?
2. Wprowadzanie danych liczbowych i tekstowych oraz wektorów i macierzy. Typy zmiennych. Separatory poleceń (spacje, przecinki, średniki), sygnalizacja błędów.
Instrukcje input i disp. Zaokrąglenia liczb wyświetlanych.
a=1 b=2 c=3 % popraw zapisy jeśli błędne a=4, b=5,c=6
a=5, b=7; c=6;
d=55; e=77; f=66; dlaczego brak wyświetlenia zmiennych d, e, f ?
x=123.1234567 disp(x)
X=input('podaj x takie jak wyzej: ')
5678.123456 % W jakiej zmiennej jest wprowadzona liczba?:
Naz='Kowalski ' % zobacz zmienną Naz w oknie Workspace
Naz=input(' Podaj swoje Nazwisko: ', 's' );
A=input('Wprowadz wektor A= ') % Wpisz tu [1 3 4 5 6 7] Enter M=[1 2 3; 4 5 6; 8 9 0]
M=input('Wprowadz macierz M= ') % Wpisz tu =[1 2 3; 4 5 6; 8 9 0] Enter disp(Naz)
disp(A) disp(M)
%Sprawdź typy danych i zajętość pamięci w oknie Workspace
clear a c M Naz % sprawdz teraz w Workspace zmienne a c M Naz clear
% sprawdź teraz w Workspace zmienne, ich typy i wymiary
Napisz polecenie clear usuwające wskazane zmienne. Sprawdź jego efekt w Workspace.
clear a b c M A
Napisz samo polecenie clear. Sprawdź jego efekt w Workspace.
clear
3. Tworzenie zmiennych liczbowych. Działania arytmetyczne.
Jaka będzie wartość obliczona w poniższych działaniach?
a=5;
y=a*a y=a^2 w=y^0.5 w=y^(1/2) w=sqrt(y) c1=sin(pi/2) c2=sind(90)
Co zawierają zmienne c1 i c2?
W jakich jednostkach należy podawać argumenty dla funkcji trygonometrycznych?
a=3; b=7; c=2;
delta=bb -4ac % popraw zapis delta=b^2 -4*a*c
Teraz załóż że powyższe a, b, c i delta to to parametry równania ax2+ bx+c. Zapisz wzory i oblicz w Matlabie wartości x1 i x2. Oblicz „ręcznie” i oceń wyniki.
x1=………..….
x2=………….
4. Wyświetlanie informacji na ekranie- instrukcje disp i sprintf. Zmienne tekstowe.
Konwersja num2str liczb na kod znakowy (ASCII). Łączenie informacji tekstowej i liczbowej przy jej wyświetlaniu w jednej linii.
clc
x= 144.1234567, y=sqrt(x)
%Utwórz zmienną tekstową i dołącz do niej wartość:
Tx=[ 'Dla x= ', num2str(x) ] % łączenie opisu i liczby disp(Tx)
Ty= [ 'wartosc y= ' , num2str(y) ] Wynik=[Tx, ' ' , Ty]
Wynik=[Tx, blanks(10) , Ty]
disp(Wynik)
% ----%.4f – format floating point, 5 m-c po przecinku sprintf(' dla x= %.5f wartosc y=%.5f ', x, y);
Przeanalizuj zmienne i ich opisy w oknie Workspace a następnie usuń zmienne.
5. Liczby zespolone, prezentacja graficzna –prezentacja clc
W=sqrt(-1) L1=5+7*j compass(L1)
L1=5+7i % TU MOŻNA POMINĄĆ ZNAK " * "
L2=3-2j
% zobacz interpretację L1, L2 i ich sumy Z=[L1, L2, L1+L2]
compass(Z)
6. Wpisz liczbę L i sprawdź co jest wynikiem funkcji wbudowanych:
clc, clear L=5+7.77j compass(L);
kat= angle(L) a=abs(L) s= conj(L)
compass([L,s] ) % liczba zespolona i sprzężona
% możesz sprawdzić też: phase(L), imag(L), real(L)
7. Sprawdź na przykładach działanie funkcji wbudowanych:
A=[1 3 4 5 6 7] %wektor wierszowy
n= length(A) % ilość liczb w wektorze (liczba kolumn)
n=numel(A)
[w ,k]=size(A) % w- liczba wierszy, k-liczb kolumn T=A' % wektor A transponowany K=[1; 3; 4; 5; 6; 7] % wektor K kolumnowy [w ,k]=size(A)
M=[1 2 3; 4 5 6] % Macierz wektor K kolumnowy [w ,k]=size(M)
sprintf(' Macierz ma: %d wiersze i % d kolumny ', w,k)
Mt=M' % Macierz M transponowana
8. Tworzenie wektorów zawierających ciągi liczb np. o strukturze min:krok:max.
Wizualizacja wektorów poleceniem plot.
A= [0: 1.7 : 10]
C=[0:10]
plot(A) % wizualizacja wektora A x= [-10: 2 : 8]
f=2*x.^2 + 7*x + 1 %wstawienie wektora do wyrazenia plot(x, f ,'*') % wizualizacja punktów funkcji f(x)
Napisz polecenie:
ezplot( '2*x^2 +5*x -14' ) a następnie polecenie:
ezplot( '2*x^2 +5*x -14' , [-5 12])
Wybierz z menu Tools otwartego okna figure polecenie Basic Fitting. Zanacz opcję Show equations. Dla jakiego stopnia wielomianu (polynomial) uzyskano najbliższe oryginałowi odwzorowanie przebiegu funkcji.
ezplot( '2*x^2 +5*x -14' , [-5 12])
Wybierz z menu Tools otwartego okna figure polecenie Basic Fitting. Zanacz opcję Show equations. Dla jakiego stopnia wielomianu (polynomial) uzyskano najbliższe oryginałowi odwzorowanie przebiegu funkcji.
figure(2)
ezplot('abs(sin(x)/x)', [-6 6, -0.1 1.1])
9. Funkcje generujące oraz funkcje statystyczne i histogramy wektorów i macierzy obliczające:
wartość minimalną - min() wartość maksymalną – max() wartość średnią - mean() odchylenie standardowe- std() mediana - median() sortowania - sort()
histogram rozkładu wartości -hist() np.: hist(A, Liczba_przedzialow) generacja liczb losowych równomiernie z przedziału [0,1]- rand() generacja liczb losowych z rozkładu normalnego N(0,1) - randn()
Sposób użycia poleceń:.
W=rand(1,6) % generacja wektora 6 liczb z przedziału [0,1]
M=rand(3,6) % generacja macierzy liczb % poniżej obowiązkowo średnik ; na końcu!
A=randn(1, 1000000) ; % generacja miliona liczb losowych z rozkładu normalnego hist(A,25)
Wmin= min(A); generacja liczb losowych równomiernie z przedziału [0,1]- rand() [Wmin, Poz]=min(A)
Srednia=mean(A)
10. Suma i różnica macierzy A=[1 2 3; 4 5 6]
B=[7 8 9; 3 5 1]
C=A+B D=A-B
11. Mnożenie macierzy – NIE JEST PRZEMIENNE A=[1 2 3; 4 5 6]
B=[1 2; 4 5; 6 2]
IloczynAB=A*B IloczynBA=B*A
12. Generowanie charakterystycznych macierzy –funkcje wbudowane Z=zeros(3,4)
O=ones(3,4) E=eye(4) E5=eye(4)+4 M=magic(3)
Sprawdź sumy elementów: w wierszach np. sum(M(1,1:3)), kolumnach np. sum(N(1:3,1)) i na głównej przekątnej diag(M).
13. Tworzenie i użycie macierzy pustej, dopisywanie wartości. Łączenie wektorów.
A=[]
A=[A,15]
A=[A,17]
Co się dzieje z zawartością wektora A?
B=[7 8 9 ] C=[A,B]
14. Generowanie macierzy na podstawie innych macierzy A=[1 4 1; 2 0 1]
B=[3 1; 4 1]
C=[1 2 2 0 1; 2 4 7 1 0]
D=[A B; C]
15. Generowanie macierzy – technika mieszana A=[1 2 3; 4 5 6]
B=[A, [1;2]; 1:4]
16. Sprawdź w menu help znaczenie terminów int8, int16, single, double.
Napisz polecenie: clear a następnie:
N=magic(4) K=int8(magic(4))
Sprawdź czy macierz ma podobne własności jak poprzednia M? Ile zajmuje bajtów?.
17. Mnożenie tablicowe (element po elemencie) ze znakiem : .*
A=[1 2; 4 5]
B=[3 4; 2 3]
Mnozenie_tablicowe=A.*B
18. Dzielenie tablicowe (element po elemencie) A=[6 4; 8 2]
B=[3 2; 4 1]
Dzielenie_tablicowe=A./B
19. Dostęp do elementów macierzy A=[1 2 3; 4 5 6; 7 8 9]
E =A(2,3) % element (2,3) P =A(1:2, 1:2) % podmacierz
el_w2 =A(2, 1:2) % drugi wiersz, pierwsze 2 elementy W2 =A(2, : ) % cały drugi wiersz
W13=A([1 3], : ) % cały pierwszy i trzeci wiersz K2 =A(: , 2) % cala 2 kolumna
20. Powołaj poniższe zmienne i zastanów się nad uzyskanymi wynikami. Co to jest kod ASCII?
W1='abcd…z ABCD…Z' A1=double(W1)
W2= char(A1) Imie= 'Ala ' Nazw= 'Ładna '
ImNaz=[Imie, ' ' , Nazw]
ImNaz=[Imie, ' ' , Nazw]
char(W2) W3=[W1 W2]
W4=[W1,’ ‘, W2]
21. Wizualizacja wektorów lub ich części A=randn(1,300);
subplot(3,1,1) plot(A)
S=sort(A);
subplot(3,1,2) plot(S)
subplot(3,1,3) plot(A(50:200))
22. Wprowadzanie danych- instrukcje WE A=input('Wprowadź wartość zmiennej A: ') Wprowadzenie wektora danych
A=input('Wprowadź wektor […] A:') %polecenie
Wprowadź wektor […] A:[ 1 3 2 4 6 7]% wykonanie polecenia
23. Instrukcje języka Matlab. Wprowadzanie danych w pętli i ich zapis w wektorze A.
Utwórz nowy plik .m poprzez kombinację klawiszy ctrl+n lub poprzez wybranie z menu polecenia New Script. W otwartym pliku edytora wpisz:
A=[];
for j=1: 5 % tu będzie 5 liczb T=['Podaj L', num2str(j), '= '];
L=input(T);
A(j)=L; %lub A=[A,L];
end
Nadaj skryptowi nazwę Program1. Zapisz plik w folderze utworzonym na początku zajęć i uruchom poprzez ikonkę Run lub klawisz F5.
24. Instrukcje języka Matlab. Instrukcja warunkowa if W=input('Podaj liczbę: ');
if W==1
disp('Wybrałeś 1') elseif W==2
disp('Wybrałeś 2') elseif W==3
disp('Wybrałeś 3') else
disp('Wybrałeś inną liczbe niż 1, 2 czy 3') end
25. Napisz skrypt rozwiązujący wskazane przez prowadzącego zadanie (z zadań zamieszczonych w drugiej części instrukcji)