• Nie Znaleziono Wyników

Laboratorium komputerowe 2

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium komputerowe 2"

Copied!
5
0
0

Pełen tekst

(1)

1

Laboratorium komputerowe 2 – uzupełnienie

1. Definiowanie wektorów za pomocą operatora zakresu.

x = początek : przyrost : koniec

Operator zakresu : pozwala zdefiniować wektor, którego pierwszy element to początek, a każdy następny powstaje przez dodanie do poprzedniego wartości przyrost. Jeśli przyrost nie jest jawnie zdefiniowany, wówczas domyślnie jest równy 1. Wartość koniec stanowi górne ograniczenie dla generowanych elementów (ostatni element w wektorze jest mniejszy lub równy koniec).

x = 1:10 %możemy również zapisać x = [1:10]

wynik: [1 2 3 4 5 6 7 8 9 10]

y = 0.5:0.3:3

wynik: [0.5 0.8 1.1 1.4 1.7 2.0 2.3 2.6 2.9]

Uwagi:

Matlab/Octave pozwala wywoływać funkcje matematyczne (np. sqrt, sin, cos, tan, …) dla wektorów/macierzy. Instrukcja y = sin(x) dla wcześniej zdefiniowanego wektora x spowoduje obliczenie wartości sinusa dla każdego elementu wektora x i zapisanie wartości w wektorze y. Liczba elementów w obydwu wektorach będzie oczywiście taka sama.

length(x) – funkcja zwraca liczbę elementów w wektorze x

2. Rysowanie wykresów funkcji.

Przykład 1

Narysować wykres funkcji f(x) = sin(x) w przedziale [−𝜋, −𝜋 ] .

x = -pi:0.1:pi; % generujemy wektor x, w którym zapisujemy

% punkty z dziedziny funkcji ze skokiem 0.1 f = sin(x); % dla każdego elementu wektora x obliczamy

% wartość funkcji i zapisujemy w wektorze f plot(x,f); % funkcja rysująca wykres

Uwagi:

Aby wykres był odpowiednio gładki, należy wygenerować dostatecznie dużo punków. Funkcja plot łączy odcinkami punkty zapisane w wektorach x (współrzędne x-owe punktów) i f (współrzędne y-owe punktów). Jeśli punktów będzie za mało wykres będzie „kanciasty”.

Proszę sprawdzić zmieniając przyrost w wektorze x z 0.1 na 1, a później z powrotem na 0.1.

(2)

2 Przykład 2

Dorysować do poprzedniego przykładu wykres funkcji g(x) = x sin(x).

% do przykładu 1:

x = -pi:0.1:pi;

f = sin(x);

plot(x,f);

% dopisujemy:

hold on;

g = x.*sin(x); % x jest wektorem, sin(x) również jest wektorem

% dlatego musimy użyć operatora z kropką: .*

plot(x,g);

Uwagi

Instrukcja hold on spowoduje, że kolejny wykres zostanie dorysowany w poprzednio otwartym oknie graficznym. Gdyby tej instrukcji zabrakło, kolejne wywołanie funkcji plot spowodowałoby zamknięcie poprzedniego okna graficznego i otwarcie nowego. Wystarczy tylko raz wykonać instrukcję hold on i od tego momentu wszystkie kolejne wykresy będą rysowane w tym samym oknie graficznym, do momentu wykonania instrukcji hold off.

Na początku każdego skryptu warto wykonać, obok instrukcji clear i clc, instrukcję close all, która zamyka wcześniej otwarte okna graficzne.

W przypadku rysowania więcej niż jednego wykresu w tym samym oknie graficznym, kolejne wykresy będą miały automatycznie przypisane kolory. Oczywiście takie atrybuty jak kolor, styl linii, szerokość linii można definiować samodzielnie. Przykładowo, kolor linii można zmienić podając jako kolejny argument funkcji plot pierwszą literę angielskiej nazwy koloru (np. czerwony - 'r', zielony - 'g', niebieski - 'b', a jak zdefiniować kolor czarny?).

Szczegóły można znaleźć m.in. w dokumentacji Matlabu, dostępnej online:

https://www.mathworks.com/help/matlab/ref/plot.html Przykład 3

Sformatować wykresy i okno graficzne z poprzedniego przykładu.

% wykorzystać wcześniej napisany skrypt

x = -pi:0.1:pi;

f = sin(x);

plot(x,f,'r','linewidth',2); % kolor czerwony, szerokość linii równa 2 hold on;

g = x.*sin(x);

plot(x,g,'b--'); % kolor niebieski, linia kreskowana

grid on; % włączenie siatki

xlabel('X'); % etykieta osi x

ylabel('Y'); % etykieta osy y

title('Przyklady funkcji');

axis([-pi pi -1.2 2]); % zakres osi, odpowiednio:

%[xmin, xmax, ymin, ymax]

(3)

3 3. Instrukcja warunkowa – uzupełnienia.

3.1. Przykład: sprawdzenie, czy x należy do przedziału?

x = -5;

if -1 < x < 2

disp('Jak sprawdzić czy x należy do przedziału?');

end

Proszę wykonać powyższy skrypt dla różnych wartości zmiennej x. Można zauważyć, że niezależnie od wybranej wartości, komunikat wewnątrz instrukcji warunkowej zostanie zawsze wyświetlony! Dlaczego tak jest? Intuicja matematyczna podpowiada, że komunikat powinien być wyświetlony tylko wtedy, gdy x należy do przedziału (−1, 2). Jednak Matlab/Octave inaczej interpretuje wyrażenie logiczne -1 < x < 2. Najpierw wykonywane jest pierwsze porównanie -1 < x, a wynik tego porównanie to tak (logiczna prawda) lub nie (logiczny fałsz). Logiczna prawda jest reprezentowana jako 1, a fałsz jako 0. I właśnie wynik tego porównania (0 lub 1) jest wstawiany do drugiego porównania. Zarówno 0 < 2, jak i 1 < 2, dlatego całe wyrażenie logiczne -1 < x < 2 jest zawsze prawdziwe. Jeśli chcemy zapisać warunek, czy x należy do przedziału, musimy użyć koniunkcji dwóch warunków:

x = -5;

if -1 < x && x < 2

disp('Jak sprawdzić czy x należy do przedziału?');

end

3.2. Instrukcja warunkowa z wieloma warunkami if - elseif - else - end.

Oprócz standardowej instrukcji warunkowej if - else - end, możemy korzystać z instrukcji warunkowej z wieloma warunkami. Nie jest to konieczne, ponieważ instrukcje warunkowe można dowolnie zagnieżdżać, ale czasami łatwiej i szybciej jest skorzystać z jednej instrukcji z wieloma warunkami.

Zamiast

if warunek_1 ...

else

if warunek_2 ...

else ...

end end

(4)

4 możemy napisać

if warunek_1 ...

elseif warunek_2 % Uwaga! elseif to jedno słowo – bez spacji ...

else ...

end

W jednej instrukcji warunkowej możemy zdefiniować dowolnie wiele warunków wstawiając dowolnie wiele klauzul elseif.

Przykład

Napisać funkcję, która jest odcinkowo liniowa, osiąga wartość 0 w ±∞ oraz przechodzi przez punkty (0,0), (1,1) i (2,0) 1.

Celem zadania nie jest napisanie skryptu, który będzie rysował wykres funkcji spełniającej podane założenia, ale zdefiniowanie własnej funkcji, która dla podanego argumentu (liczby) będzie zwracała odpowiednią wartość (również liczbę). Dobrze jest rozpocząć to zadanie od sporządzenia odręcznego wykresu funkcji. Następnie możemy zapisać wzór funkcji (jeśli ktoś potrafi bez rysunku, można go pominąć). Wzór funkcji, która spełnia założenia zadania jest następujący:

𝑓(𝑥) = { 0 𝑥

−𝑥 + 2 0

𝑑𝑙𝑎 𝑥 < 0 𝑑𝑙𝑎 𝑥 ∈ [0, 1) 𝑑𝑙𝑎 𝑥 ∈ [1, 2)

𝑑𝑙𝑎 𝑥 ≥ 2

Po zapisaniu w języku Matlabu otrzymujemy:

function y = funkcja1(x) if x<0 || x>=2

y = 0;

elseif x>=0 && x<1 y = x;

else

y = -x+2;

end end

1 Zadanie nr 6 ze skryptu A. Matuszak „Programowanie dla (przyszłych) inżynierów”

(5)

5

Tak zdefiniowaną funkcję zapisujemy w pliku funkcja1.m i otrzymujemy plik funkcyjny.

Następnie możemy wywołać naszą funkcję (w Command Window, w innym skrypcie, w innej funkcji) dla różnych argumentów, sprawdzając czy działa poprawnie. Warto sprawdzić każdy z podprzedziałów, w którym funkcja opisana jest innym wzorem, przykładowo:

funkcja1(-10) funkcja1(0.7) funkcja1(1.2) funkcja1(2.1)

Powyższe rozwiązanie nie jest oczywiście jedyne. Możemy zapisać taką funkcję na wiele sposobów. Poniżej znajduje się jeszcze jedno, alternatywne rozwiązanie:

function y = funkcja1(x) if x<0

y = 0;

elseif x<1 y = x;

elseif x<2 y = -x+2;

else

y = 0;

end end

To rozwiązanie również jest poprawne. Dlaczego? Kluczem do zrozumienia jest informacja, że instrukcja warunkowa z wieloma warunkami if - elseif - else - end (która może zawierać dowolnie wiele części z elseif) sprawdza po kolei warunki i kończy sprawdzanie po znalezieniu pierwszego prawdziwego warunku. Przykładowo, x=-10 spełnia wszystkie powyższe warunki (zarówno x<0, jak i x<1 i x<2), ale po pierwszym spełnionym warunku (x<0) instrukcja nie będzie sprawdzała kolejnych.

Cytaty

Powiązane dokumenty

Drzewo mające własność rodzeństwa jest drzewem Huffmana (tw. Fallera- Gallagera)..  Budowane drzewo zawiera liść (0- węzeł ) reprezentujący wszystkie symbole, które

- dopóki nie mamy właściwej skali trudno jest usunać obserwacje odstające - może we właściwej skali te dane się symetryzują. - do chunka można dodać opcję warning=FALSE

Wariacją n–elementową bez powtórzeń ze zbioru m–elementowego nazywamy uporząd- kowany zbiór (n–wyrazowy ciąg) składający się z n różnych elementów wybranych z

Ponad- to wydaje się, że dla autora sprawa odpowiedzialności jest kluczowa dla życia współczesnego człowieka.. Mieszczą się tu takie problemy, jak życie poważ- ne, oparte na

By dziękować Panu Bogu przez błogosławionego Władysława za to, że dane jest nam żyć w tym pięknym mieście Warszawie i, z czego może mniej zdajemy sobie sprawę, że

Podaj przykªad funkcji, która.. (a) jest injekcj a, ale nie jest

1.1. Określ, jakie wartości zwracają poniższe algorytmy dla argumentu x=-2 a jakie dla x=4. Napisz odpowiednie pseudokody. Poniżej przedstawione są 3 algorytmy analizy wskaźnika

Na pierwszym miejscu należy wymienić wszystkich pracow- ników Sudańskiej Służby Starożytności z jej dyrektorem dr Abdelrahmanem Ali Mohammedem, którzy zawsze zachęcają