Strona główna » Poradniki » MATLAB » Pochodne
 

Pochodne

Pochodna

Pochodną w punkcie nazywamy . W programie MATLAB nie istnieje wbudowana metoda do obliczania pochodnych. Istnieje jednak możliwość wygenerowania zbioru wartości na podstawie zachowania funkcji f(x). W celu osiągnięcia tego skorzystamy z funkcji diff.

Funkcja diff

Jeśli funkcji diff podamy wektor w to zostanie zwrócony wektor, którego i-ta wartość będzie różnicą elementu o indeksie i+1 oraz i. Przykładowo dla wektora w:=[1, 2, 4] zostanie zwrócony [2 - 1, 4 - 2] = [1, 2]. Innymi słowy wynikiem działania funkcji jest różnica każdej pary elementów.

Z poziomu konsoli funkcję wywołujemy następująco:

  1. >> w = [1 7 6 2 5 2 3];
  2. >> diff(w);

  3. ans =

        6    -1    -4     3    -3     1

Funkcja diff ma znacznie szersze zastosowanie. Można jej używać również z macierzami. Ze względu na brak powiązania z obecnym tematem odsyłam zainteresowane osoby do pomocy programu MATLAB.

Pochodna cd.

Do obliczania pochodnej wykorzystamy algorytm Skończonych różnic. Polega on na podziale dziedziny funkcji na n części. Wartość pochodnej obliczamy dla argumentu, który znajduje sie pomiędzy końcami odcinków. Istnieje kilka wariantów tego algorytmu. Każdy z nich różni się sposobem wyboru argumentu dla którego obliczamy pochodną.

Wariant Różnic Wstecznych

Dokonujemy podziału dziedziny na n równych części. W tym przypadku ilorazy różnicowe obliczamy jako:

W ten sposób otrzymujemy przybliżone wartości pochodnej dla argumentów . Spróbujmy teraz zaimplementować to rozwiązanie w programie MATLAB. Będziemy chcieli wyznaczyć pochodną cosinusa na przedziale :

  1. >> E = 0:2*pi/20:2*pi;
  2. >> ZW = cos(E);
  3. >> ZW_ilorazy = diff (ZW(1:end-1)) ./ diff (E(1:end-1));

Na początek ustalamy dziedzinę E. W przypadku, gdy wykres nie będzie gładki należy tu zmienić różnice argumentów. Następnie wyliczamy zbiór wartość dla każdego punktu dziedziny. Ostatnie polecenie działa następująco:

  1. Wyliczamy na początek różnice funkcji na końcach każdego z n odcinków ( diff (ZW(1:end-1)) )
  2. Wyliczamy następnie różnice argumentów na końcach każdego odcinka ( diff (E(1:end-1)) )
  3. Ostatni krok polega na podzieleniu każdej wartości ( ./ ) z podpunktu 1) przez element o tym samym indeksie z podpunktu 2)

Najczęstszym błedem w przypadku korzystania z tego algorytmu jest zapominanie o dodaniu kropki . do operatora dzielenia /. Co powoduje dzielenie dwóch wektorów przez siebie, a niekoniecznie dzielenie i-tego elementu z pierwszej listy przez i-ty element z drugiej listy.

Wariant Różnic Postępujących

Dokonujemy podziału dziedziny na n równych części. Ilorazy różnicowe obliczamy następująco:

W tym przypadku implementacja w programie MATLAB będzie wyglądała następująco:

  1. >> E = 0:2*pi/20:2*pi;
  2. >> ZW = cos(E);
  3. >> ZW_ilorazy = diff (ZW(2:end)) ./ diff (E(2:end));

Wariant Różnic Centralnych

Dokonujemy podziału dziedziny na n równych części. Ilorazy różnicowe będziemy wyliczać tak:

To rozwiązanie jest jakby połączniem poprzednich dwóch wariantów. Tutaj musimy wyrzucić podczas obliczeń nie jeden, a dwa punkty dziedziny:

  1. >> E = 0:2*pi/20:2*pi;
  2. >> ZW = cos(E);
  3. >> ZW_ilorazy = diff (ZW(2:end-1)) ./ diff (E(2:end-1));

Wykres pochodnej

Spróbujmy teraz prześledzić czym jak różnią się poszczególne warianty. W tym celu wygenerujemy wykres na którym przedstawimy wartości poszczególnych wariantów:

  1. % Ustalamy dziedzinę i zbiór wartości
  2. >> E = 0:2*pi/20:2*pi;
  3. >> ZW = cos(E);
  4. % Wyliczamy wartości pochodnej dla każdego wariantu
  5. >> ZW_pwstecz = diff (ZW(1:end-1)) ./ diff (E(1:end-1));
  6. >> ZW_ppostep = diff (ZW(2:end)) ./ diff (E(2:end));
  7. >> ZW_pcentr = diff (ZW(2:end-1)) ./ diff (E(2:end-1));
  8. % Teraz narysujemy wykresy
  9. >> hold on;
  10. >> plot(pi/20:2*pi/20:2*pi-2*pi/20, ZW_pwstecz);
  11. >> plot(2*pi/20:2*pi/20:2*pi-pi/20, ZW_ppostep);
  12. >> plot(2*pi/20:2*pi/20:2*pi-3*pi/20, ZW_pcentr, '--g');
Porównanie wariantów wyliczania pochodnej funkcji

Należy pamiętać, aby dla każdego zbioru wartości pochodnych ustalić prawidłową dziedzine. Inaczej wykres nie będzie miał prawidłowego wyglądu. Analizując wykres bardzo łatwo zauważyć, że najdokładniej wylicza wariant Różnic Postępujących.

Generowanie wykresu pochodnej funkcji

W przypadku generowania pochodnej funkcji zmieniamy sposób wyliczania zbioru wartości. Należy pamiętać o odpowiednim ustaleniu dziedziny pochodnej. Ważną kwestia jest dobranie odpowiedniej różnicy pomiędzy kolejnymi argumentami. Funkcja to:

  1. >> E = -6:0.1:6;
  2. >> ZW = E.^3 + E.*(-7) + 6;
  3. >> ZW_p = diff (ZW(2:end)) ./ diff (E(2:end));
  4. >> hold on;
  5. >> grid on;
  6. >> plot(E, ZW, '--b');
  7. >> plot(E(2:end-1), ZW_p, 'r');
  8. >> hold off;
Wykres pochodnej funkcji