La funzione arrayfun di Matlab e Octave

La funzione arrayfun() mi permette di eseguire una funzione su ogni elemento di un array.

=arrayfun(funzione,array)

Questa funzione ha due parametri

  • Il primo parametro è la funzione che voglio applicare. Può essere una funzione predefinita, una funzione personalizzata oppure una funzione anonima.
  • Il secondo parametro è l'array a cui applicare la funzione.

La funzione restituisce l'array con gli elementi modificati.

Nota. La funzione arrayfun() è molto utile per creare un'applicazione tra due array utilizzando una specifica funzione che viene applicata a ogni elemento di un array di origine e salva i risultati nell'array di destinazione.

    Un esempio pratico

    Esempio 1

    Creo un array composto da alcuni valori

    A = [1, 4, 9, 16, 25];

    Poi uso la funzione arrayfun per calcolare la radice quadrata di ogni elemento

    B = arrayfun(@sqrt, A);

    In questo caso uso come funzione interna la funzione predefinita sqrt() che calcola la radice quadrata di un argomento

    Nota. Quando utilizzo una funzione predefinita di Matlab come funzione interna, la devo scrivere anteponendo il simbolo @ e senza usare le parentesi tonde. Ad esempio, se voglio utilizzare la funzione sqrt() dentro arrayfun() la devo scrivere con la sintassi @sqrt.

    La funzione arrayfun() applica la funzione sqrt() a ogni elemento dell'array A e salva il risultato nell'array B

    Il risultato è un array B composto dalle radici quadrate degli elementi dell'array A

    1 2 3 4 5

    Esempio 2

    Definisco un array con alcuni valori utilizzando la costante pi greco (pi)

    A = [0, pi/2, pi, 3/2*pi, 2*pi];

    Per calcolare il seno di ogni elemento dell'array A uso la funzione arrayfun() con la funzione interna sin()

    B = arrayfun(@sqrt, A);

    In questo caso il risultato in uscita è un array B con i relativi valori del seno di ogni elemento dell'array A.

    0 1 0 -1 0

    Esempio 3 (funzioni anonime)

    Creo un array composto da alcuni valori

    A = [1, 2, 3, 4, 5];

    Poi utilizzo la funzione arrayfun per elevare al cubo gli elementi dell'array A

    B = arrayfun(@(x) x^3, A);

    In questo caso utilizzo come funzione interna la funzione anonima @(x) x^3

    La funzione arrayfun() applica la funzione anonima in ogni elemento dell'array A salvando il risultato nell'array B

    In questo modo ottengo un array B composto dagli elementi di A elevati al cubo

    1 8 27 64 125

    Esempio 4 (funzione personalizzata)

    Definisco un array A e una funzione personalizzata raddoppia()

    A = [1, 2, 3, 4, 5];
    B=arrayfun(@raddoppia, A)

    function y=raddoppia(x)
    y=2*x;
    end

    Nota. Le funzioni personalizzare in Matlab vanno definite sempre alla fine dello script.

    Poi utilizzo la funzione personalizzata raddoppia() come argomento della funzione arrayfun()

    Anche in questo caso devo scrivere la funzione raddoppia() usando la sintassi @raddoppia

    Il risultato finale della funzione composta è un array B con tutti gli elementi dell'array A moltiplicati per due

    2 4 6 8 10

    E così via.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Appunti su MATLAB

    Simulink

    Le alternative open source a Matlab