Strona główna » Poradniki » MATLAB » Wykresy Funkcji
 

Wykresy Funkcji

Wykres funkcji

Załóżmy, że zadanie polega na narysowaniu wykresu funkcji kwadratowej . Do wygenerowania wykresu potrzebujemy dziedziny oraz zbioru wartości. Także na początek określimy dziedzinę funkcji. Przypuśćmy, że w tym przypadku wygenerujemy funkcję dla zakresu . W tym celu generujemy wektor z wymienionymi wartościami:

  1. >> D = -5:5;

Jak wiadomo funkcja to przyporządkowanie każdemu elementowi dziedziny dokładnie jednego elementu ze zbioru wartości. Także możemy przyjąć, że zbiór wartości jest równy dziedzinie, a następnie każdy element odpowiednio zmodyfikować. Tutaj chcąc wygenerować zbiór wartości wygenerujemy trzy nowe wektory: jeden z wartościami , drugi -3x, a ostatni tą samą wartością -5. Następnie dodając wszystko otrzymamy zbiór wartości:

  1. >> W1 = D.^2;
  2. >> W2 = D.*(-3);
  3. >> W3 = repmat(-5,1,11);
  4. >> ZW = W1 + W2 + W3;
  5. >> plot(D, ZW);

Tworzymy wektory: W1 zawiera każdy element dziedziny podniesiony do kwadratu, W2 - zawiera każdy element dziedziny pomnożony przez -3. Z kolei W3 zawiera same -5. Do generowania list oraz macierzy bardzo przydatna jest funkcja repmat(). Pozwala na wygenerowanie dowolnej macierzy o domyślnej dowolnej wartości. Kolejne argumenty to domyślna wartość, ilość wierszy, ilość kolumn. W przypadku nie podania trzeciego argumentu otrzymujemy macierz o wymiarach n x n, gdzie n ma wartość taką jak drugi podany argument. Wracając do generowania wykresu: ZW to lista wartości, która jest sumą W1, W2 i W3. Jest to już wektor, który zawiera zbiór wartości funkcji. Teraz wystarczy już wywołać funkcję plot() z odpowiednimi parametrami.

Niedokładny wykres liniowy

Wykres faktycznie przedstawia parabolę, ale jest wyjątkowo kanciasty. Rozwiązaniem tego problemu jest zwiększenie ilości danych w dziedzinie. Wtedy, mimo że program między kolejnymi dwoma punktami będzie prowadził linie prostą, będzie można mieć wrażenie, że tak nie jest. Spróbujmy wygenerować teraz dziedzinę i zbiór wartości z dokładnością do jednego miejsca po przecinku:

  1. >> D = -5:0.1:5;
  2. >> W1 = D.^2;
  3. >> W2 = D.*(-3);
  4. >> W3 = repmat(-5,1,101);
  5. >> ZW = W1 + W2 + W3;
  6. >> plot(D, ZW);
Dokładny wykres liniowy

Dodanie dodatkowych wartości spowodowało, że wykres wygląda znacznie lepiej. Dalsze zwiększanie ma sens tylko wtedy, gdy wykres wciąż jest kanciasty. Inaczej dodawanie kolejnych punktów nie wpłynie na jakość, a z pewnością obniży wydajność co wydłuży czas oczekiwania na wykres. Spróbujmy teraz uprościć proces generowania zbioru wartości. Naszym celem jest usunięcie potrzeby używania aż pięciu zmiennych - zostawimy tylko wektor reprezentujący dziedzinę oraz wektor reprezentujący zbiór wartości:

  1. >> D = -5:0.1:5;
  2. >> ZW = D.^2 + D.*(-3) + (-5);
  3. >> plot(D, ZW);

W ten sposób kolejne obliczenia są widoczne i nie ma potrzeby głowienia się gdzie zgubiliśmy jakąś wartość, albo co reprezentował wektor WX.

Funkcje trygonometryczne

W przypadku generowania funkcji trygonometrycznych należy pamiętać, że istnieje stała pi, którą możemy użyć w dowolnych obliczeniach:

  1. >> D = 0:pi/20:2*pi;
  2. >> plot(D,cos(D));

pi jest traktowane jako wyrażenie, dlatego należy pamiętać, że zapis 2pi jest niepoprawny. Kod znacząco się uprościł, ponieważ funkcja cos() może przyjmować wektor i zwróci wektor z odpowiednio przeliczonymi wartościami. Spróbujmy teraz wygenerować wykres, który będzie zawierał wartości dla funkcji cos() oraz sin():

  1. >> D = 0:pi/20:2*pi;
  2. >> plot(D,cos(D),D,sin(D));
Wykres funkcji cos

Funkcja hold on

Dodawanie kilku serii do wykresu może być bardzo niewygodne w przypadku wpisywania wszystkich w jednej linijce, a jak wiadomo w przypadku kolejnego wywołania funkcji plot() stary wykres zostaje wymazany i nie zostaje po nim żaden ślad. Rozwiązaniem tego problemu jest skorzystanie z funkcji hold(). Przypuśćmy, że początkowo wygenerowaliśmy wykres dla funkcji cosinus, podpisaliśmy wszystkie miejsca zerowe, dodaliśmy komentarze i chcieliśmy dorysować wykres funkcji sinus:

  1. >> D = 0:pi/20:2*pi;
  2. >> plot(D,cos(D), 'r');
  3. >> hold on
  4. >> plot(D,sin(D), '--g');
  5. >> hold off
Wykres funkcji cos i sin

Określiliśmy dziedzinę i wygenerowaliśmy wykres funkcji cosinus. Chcąc dorysować inny wykres używamy funkcji hold i ją włączamy podając wartość on. Wywołujemy ponownie funkcję plot() i zamykamy dopisywanie do wykresu wywołując funkcję hold() i podając wartość off. Każde następne wywołanie funkcji plot() spowoduje usunięcie dotychczas narysowanych wykresów.

W celu lepszego zrozumienia działania funkcji wyjaśnię poniższy kod:

  1. >> hold on
  2. >> plot(D,cos(D), 'r');
  3. >> plot(D,sin(D), '--g');
  4. >> plot(D,sin(D), 'r');
  5. >> hold off
  6. >> plot(D,cos(D), 'b');

Włączamy buforowanie wyników. W tej chwili jeśli jest wygenerowany wykres zostanie dorysowany do niego wykres funkcji cosinus (czerwoną kreską), a potem funkcji sinus (niebieską, przerywaną kreską). Potem narysowaliśmy wykres funkcji sinus czerwoną kreską. Nie usunęło to poprzedniej serii funkcji sinus, ale ją przykryło. Można to stwierdzić włączając Widok legendy. Następnie wyłączyliśmy buforowanie, więc ostatnia linijka spowoduje usunięcie dotychczasowego wykresu i narysowanie funkcji cosinus niebieską kreską.

Zadania

Zalecam wykonanie poleceń bez zaglądania do artykułu. Wskazówka: Każdy podpunkt odpowiada dokładnie jednemu poleceniu!

Zadanie 1

Przy pomocy zdobytej wiedzy narysuj wykres funkcji cosinus w przedziale . Zaznacz miejsca dla których przy pomocy czerwonych plusów.

Wykres do zadania 1