Un function file di Matlab è un m-file che differisce da uno script m-file perchè comincia sempre con la parola chiave function.

Per esempio:

% spiegazione di cosa fa la funzione
% le righe che cominciano con la percentuale sono
% considerate commenti e non vengono eseguite

function [y]=fun(x)
    y=x^2+3*x^2+2;

Il nome dell'm-file che contiene la funzione deve avere lo stesso nome della funzione, quindi il file che conterrà questa funzione si chiamerà fun.m.

Per poter essere utilizzata da uno script m-file deve essere contenuto nella stessa directory.

Per esempio, l'm-file prova.m che utilizza la funzione mediariga e l'm-file mediariga.m che la contiene si devono trovare nella stessa directory.

mediariga.m

 

% La funzione mediariga esegue la media dei valori
% contenuti nel vettore v solo se questo è un vettore
% riga, altrimenti restituisce -1

function [m]=mediariga(v)
    [r,c] = size(v);
    if ( r==1 && c~=1 )
        m = mean(v);
    else
        m = -1;
    end

prova.m

 
clear
vriga = [1 23 15 -4]
m = mediariga(vriga);
str = ['La media è ',num2str(m)];
disp(str);
vcolonna = vriga.'
m = mediariga(vcolonna);
str = ['La media è ',num2str(m)];
disp(str);
L'output di prova.m è il seguente:
 
vriga =
     1    23    15    -4
La media è 8.75
vcolonna =
     1
    23
    15
    -4
La media è -1
Sintassi

La sintassi per dichiarare una funzione è:

function [out1, out2, ...] = funname(in1, in2, ...)

che definisce la funzione funname che accetta in ingresso in1, in2, ... ecc. e restituisce out1, out2, ... ecc.

A differenza di C dove le variabili sono passate per valore e strutture dati come i vettori e le matrici sono passati per riferimento, in Matlab i valori vengono sempre passati per valore, quindi vengono create copie locali (che quindi spariscono alla fine dell'esecuzione della funzione) di valori, vettori e matrici.

Un'altra differenza sostanziale rispetto a C (dove le funzioni restituiscono un solo valore numerico) è che una funzione può restituire più di un valore, ma anche vettori e matrici.

Ultime modifiche: domenica, 31 dicembre 2023, 18:09