Generare una matrice di esponenziali con un unico for

di il
2 risposte

Generare una matrice di esponenziali con un unico for

Ciao a tutti,

io ho due vettori di dimensione differente t e f e a partire da questi devo generare una matrice che contiene nelle colonne gli esponenziali complessi corrispondenti al vettore f, cioè in M(h,k) c'è il valore exp(-1i*2*pi*f(k)*t(h))

Mi si richiede di utilizzare un solo ciclo for. Utilizzandone due andrebbe bene fare cosi?
dt=0.01;
t=-10:dt:10;
df=0.01;
f=-15:df:15;

for h=1:length(t)
    for k=1:length(f)
    M(h,k)=exp(-1i*2*pi*f(k)*t(h));
    end
end
Dopodichè devo definire due vettori e trasformarli usando la matrice M, sfruttando il prodotto righe per colonne, e io farei:
X=x*M
dove x è uno dei due vettori però mi dà che le dimensioni tra i due sono diverse...

Grazie

2 Risposte

  • Re: Generare una matrice di esponenziali con un unico for

    La domanda non è molto chiara.

    Se i vettori "t" ed "f" hanno lunghezza diversa, come è possibile usare un solo ciclo for?

    Nel codice che hai pubblicato, la "i" che compare nell'espressione
    exp(-1i*2*pi*f(k)*t(h))
    viene interpretata come la variabile complessa 0 + 1.0000i mentre, stando al testo della domanda
    exp(-j*2*pi*f(j)*t(i))
    sembrerebbe che debba essere uno scalare intero visto che viene usata come indice del vettore "f".

    Nella seconda parte della domanda Dopodichè devo definire due vettori e trasformarli usando la matrice M ...
    fai riferimento alla matrice M mentre nell'esempio che segue "X=x*E" usi "E "?
    Inoltre, come hai definito i due vettori?

    Quando scrivi dove x è uno dei due vettori però mi dà che le dimensioni tra i due sono diverse ...

    chi sono "i due"? che hanno dimensioni diverse?
  • Re: Generare una matrice di esponenziali con un unico for

    Ho modificato il testo iniziale. Sono giunto a questo codice:
    dt=0.01;
    t=-10:dt:10;
    df=0.01;
    f=-15:df:15;
    
    for k=1:length(f)
        M(:,k)=exp(-1i*2*pi*f(k)*t);
    end
    
    x1=sin(pi/2*t);
    x2=exp(-pi*t.^2);
    
    X1=x1*M;
    X2=x2*M;
    
    figure(1),plot(f,abs(X1));
    figure(2),plot(f,abs(X2));

    In sostanza devo implementare la trasformata di fourier continua facendo il prodotto tra un segnale funzione del tempo con l'esponenziale complesso corrispondente nelle colonne di M.

    Con questo codice mi esce la trasformata ma con ampiezza 100 volte più grande. Non capisco come mai...
Devi accedere o registrarti per scrivere nel forum
2 risposte