Metody numeryczne Ćwiczenie : „MatLab – funkcje”



Pobieranie 17.53 Kb.
Data02.05.2016
Rozmiar17.53 Kb.
Metody numeryczne

Ćwiczenie : „MatLab – funkcje”
Dowolną sekwencję instrukcji Matlab’a można zapisać w pliku tekstowym z rozszerzeniem „.m”. Powstaje w ten sposób tak zwany M–skrypt. Wpisanie w linii poleceń nazwy pliku (bez rozszerzenia) powoduje wczytanie pliku i wykonanie zawartych w nim instrukcji. Operują one zawsze na głównej przestrzeni roboczej Matlab’a i ich efekt jest identyczny, jakby wprowadzono je ręcznie z linii poleceń.
Napisz program (skrypt) obliczania trzeciej potęgi podanej liczby i zapisz do pliku "nazwisko.m":
% Program oblicza sześcian podanej liczby

disp('Obliczanie sześcianu danej liczby:');

a = input('dana liczba=');

x=a^3;


disp('szescian tej liczby=');disp(x);
Użycie M–skryptów bywa wygodne, ale w przypadku wielokrotnie używanych w różnych okolicznościach sekwencji instrukcji należy rozważyć nadanie jej postaci funkcji użytkownika, tak zwanej M–funkcji.

Zaletą Matlaba jest ogromne bogactwo gotowych funkcji z wszelakich niemal dziedzin zastosowań komputerów, jednak w razie potrzeby użytkownik może pisać własne funkcje i używać je identycznie jak funkcje Matlab'a.


Własne funkcje pisze się gdy:

1. chcemy aby program składał się z bloków funkcjonalnych o ściśle określonym działaniu – co czyni program lepiej zrozumiałym i jest szczególnie zalecane w przypadku długich programów

2. funkcja będzie przynajmniej kilkukrotnie wykorzystywana w danym programie
Definicja funkcji w Matlabie musi rozpoczynać się od linii o następującej strukturze:

function wektor_zmiennych_wynikowych = nazwa_funkcji(parametry_wejściowe)

Na przykład: function [y1, y2, y3] = fun1(x1, x2, x3, x4)


Taki nagłówek (wystarczy pierwsza linia) powoduje odmienne potraktowanie pliku. Wystąpienie nazwy pliku po raz pierwszy powoduje jego wczytanie do pamięci, a w razie wykrycia nagłówka funkcji zamianę zawartości na tak zwany p–kod, który pozostaje w pamięci aż do jawnego usunięcia poleceniem clear nazwa albo clear functions.

W stosunku do M–skryptu różnica polega na tym, ze M–funkcja ma własna przestrzeń robocza, a zmienne z głównej przestrzeni roboczej są dostępne tylko pod warunkiem jawnego zadeklarowania jako globalnych zarówno w głównej przestrzeni, jak i wewnątrz funkcji. Poza tym wszystkie zmienne mają charakter lokalny i przekazywanie wyników może odbyć się tylko poprzez parametry wyjściowe.



  1. Przykład:

Napisz funkcję (otwierając z menu File z opcji New plik M-file) wyznaczającą wartość silni n!, gdzie n jest liczbą naturalną.

  1. % Funkcja wyznacza watość n!

  2. function[wynik]=silnia(n)

  3. wynik=1;

  4. for i=1:n

  5. wynik=wynik*i;

  6. end

Zapisz ją pod nazwą silnia.m, a następnie uruchom wpisując w linii komend jej nazwę wraz z wartością argumentu n umieszczoną w nawiasie, np.:

» silnia(5)

ans = 120
Przykład (plik „fun.m”)

function y=fun(x)

%FUN - oblicza e^(x^2)+2*x-3

% funkcja obliczajaca wyrazenie e^(x^2)+2*x-3

y=exp(x.^2)+2*x-3;
Funkcję należy zapisać do pliku o takiej samej nazwie jak nazwa funkcji, a więc: fun.m.

Umieszczenie pliku o powyższej zawartości w katalogu bieżącym Matlab’a lub jednym z katalogów wymienionych na ścieżce wyszukiwania matlabpath pozwala używać tej funkcji następująco

>> fun(5)

ans = 7.2005e+010


Ponieważ w Matlabie macierze pełnią rolę zmiennych więc i tutaj wynik może być macierzą a w szczególności wektorem lub skalarem.

>> fun([0,1;2,3;4,5])

ans =

1.0e+010 *



0.0000 0.0000

0.0000 0.0000

0.0009 7.2005

>> format long e

>> fun([0,1;2,3;4,5])

ans =


-2.000000000000000e+000 1.718281828459045e+000

5.559815003314424e+001 8.106083927575384e+003

8.886115520507872e+006 7.200489934438588e+010


  1. Przykład:

function [x1, x2] = prkw(a, b, c)

% ta funkcja oblicza pierwiastki x1, x2

% rownania: a*x^2 + b*x + c = 0

delta = b*b-4*a*c;

if delta<0

% dla delta<0 podstawimy NaN = "nieokreslone"

x1=NaN; x2=NaN

else


x1=(-b-sqrt(delta))/(2*a);

x2=(-b+sqrt(delta))/(2*a);

end
Rola tej funkcji jest taka sama jak funkcji standardowych (na przykład sinus) to znaczy nie zawiera ona instrukcji wejścia/wyjścia bo wprowadzenie do niej danych następuje przez parametry (a,b,c) a wynik zostaje jak to się mówi "zwrócony" przy pomocy nazwy funkcji (prkw) pełniącej rolę parametru wyjściowego.

Funkcja może być wywołana samodzielnie (z konkretnymi parametrami) ale najczęściej opłaca się ją napisać gdy będzie używana jako cegiełka większego programu.


Przykłady bezpośredniego użycia zdefiniowanej przed chwilą funkcji i o nazwie prkw :

>> [x1, x2]=prkw(1,1,1)

x1 = NaN

x2 = NaN


W tym przypadku brak było pierwiastków rzeczywistych.

>> [x1, x2]=prkw(-1,1,1)

x1 = 1.6180

x2 = -0.6180




©absta.pl 2016
wyślij wiadomość

    Strona główna