Punto in funzioni matlab con vettori

di il
2 risposte

Punto in funzioni matlab con vettori

Salve,
avrei una domanda.
Sto plottando delle funzioni attraverso Matlab.

t = linspace(0, 3);
y = 28.6*exp(-20.3*t).*cos(69.4*t - 1.7 )+4.2*exp(-2.2*t).*cos(6.6*t);
plot(t, y)

La mia domanda è: a che serve il punto prima del prodotto? Credo abbia a che fare con il prodotto di vettori (togliendolo non funziona e l'errore è INNER DIMENSIONS MUST AGREE), ma non ricordo bene cosa faccia nello specifico.

Qualcuno sa aiutarmi?

Grazie mille

2 Risposte

  • Re: Punto in funzioni matlab con vettori

    Si inserisce il "punto" prima degli operatori *, /, ^, \ quando si vuole che gli operatori stessi effettuino l'operazione relativa su vettori o matrici, elemento per elemento[/i].

    Se si omette il "punto" l'operazione viene effettuata nel senso "naturale" delle operazioni tra matrici

    Ad esempio:
    
    a=randi(10,4)
    b=randi(10,4)
    
    c=a.*b
    d=a*b
    
    a =
    
         8     7    10     8
         8     2     4     3
         3     2     6     6
         7     5     3     7
    
    
    b =
    
         9     2     9     2
        10     3     3     3
         6     9    10     7
         2     3     4     5
    
    
    c =
    
        72    14    90    16
        80     6    12     9
        18    18    60    42
        14    15    12    35
    
    
    d =
    
       218   151   225   147
       122    67   130    65
        95    84   117    84
       145    77   136    85
    
    Un caso particolare è l'utilizzo del "punto" in combinazione con l'operatore ' che effettua la trasposta[/i] di un vettore o matrice;:
    [*] nel caso gli input siano di tipo double (lo standard si MatLab) la presenza del punto è ininfluente
    [*] nel caso gli input siano di tipo complex il "punto" viene utilizzato nel caso si voglia semplicemente scambiare le righe con le colonne e non ottenere matrice trasposta coniugata
    
    a=randi(10,3)*i
    b=randi(10,3)*j
    
    c=a.'
    d=a'
    
    a =
    
       0.0000 + 5.0000i   0.0000 + 3.0000i   0.0000 + 9.0000i
       0.0000 +10.0000i   0.0000 + 2.0000i   0.0000 + 6.0000i
       0.0000 + 2.0000i   0.0000 + 2.0000i   0.0000 + 6.0000i
    
    
    b =
    
       0.0000 + 2.0000i   0.0000 + 4.0000i   0.0000 + 1.0000i
       0.0000 + 9.0000i   0.0000 + 6.0000i   0.0000 + 3.0000i
       0.0000 + 7.0000i   0.0000 + 5.0000i   0.0000 + 2.0000i
    
    
    c =
    
       0.0000 + 5.0000i   0.0000 +10.0000i   0.0000 + 2.0000i
       0.0000 + 3.0000i   0.0000 + 2.0000i   0.0000 + 2.0000i
       0.0000 + 9.0000i   0.0000 + 6.0000i   0.0000 + 6.0000i
    
    
    d =
    
       0.0000 - 5.0000i   0.0000 -10.0000i   0.0000 - 2.0000i
       0.0000 - 3.0000i   0.0000 - 2.0000i   0.0000 - 2.0000i
       0.0000 - 9.0000i   0.0000 - 6.0000i   0.0000 - 6.0000i
    
    Per maggiori informazioni:

    http://uk.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html


    A prescindere dal fatto che si usi o meno il "punto" il numero di righe e colonne degli input deve essere coerente con il tipo si operazione chi si intende fare.
    Nel tuo caso (considerando solo il primo prodotto):
    exp(-20.3*t)
    e
    cos(69.4*t - 1.7 )
    sono due vettori (1 x 100).

    Se non inserisci il "punto" prima dell'operatore * MatLab interpreta l'istruzione
    exp(-20.3*t)*cos(69.4*t - 1.7 )
    nel senso di prodotto "righe per colonne" ed essendo il numero di righe del primo fattore (1) diverso dal numero di colonne del secondo fattore (100) viene generato il messaggio di errore.

    Inserendo il "punto" MatLab interpreta l'istruzione:
    exp(-20.3*t).*cos(69.4*t - 1.7 )
    come prodotto elemento per elemento dei due vettori. Dal momento che i due vettori hanno lo stesso numero di elementi (100) non viene generato nessun errore.
  • Re: Punto in funzioni matlab con vettori

    Grazie, spiegazione chiarissima.
    Grazie mille anche per il link alla documentazione, non sapevo in che modo cercare.
Devi accedere o registrarti per scrivere nel forum
2 risposte