Copiare un vettore

di il
5 risposte

Copiare un vettore

Buongiorno. Tramite matlab devo plottare due vettori sulla stessa figura. Ho i valori lungo X ed i valori lungo Y già definiti. Il problema è che il vettore B lo creo dal vettore A cambiando un valore. Sono riuscita in questo ma nel momento di raffigurarli insieme nella stessa figura, mi plotta solo il vettore nuovo (B) e non il vettore vecchio (A) ( quindi me lo ha sovrascritto e non ne ha creato uno uguale). Riporto qui sotto il mini pezzo di codice che pensavo andasse bene:
N.B : alpha_vet è il vettore vecchio (cioè A) ed alpha_new è il vettore nuovo (B) che voglio creare UGUALE A QUELLO VECCHIO : il valore che devo cambiare lo cambio nel seguito.

for ii=1:alpha_vet
alpha_new(ii)=alpha_vet;
end

avete idee ? grazie mille

5 Risposte

  • Re: Copiare un vettore

    Non è chiaro quello che vuoi fare.
    Perchè usare un ciclo for?


    Per copiare il vettore "alpha_vet" nel nuovo vettore "alpha_new" è sufficiente:
    
    alpha_new =alpha_vet
    
    Tra l'altro, il codice che hai scritto (se lo hai riportato esattamente) dovrebbe generare un messaggio di errore o, almeno un warning.
    I parametri del ciclo for, per come li hai scritti
    
    ii=1:alpha_vet
    
    non hanno senso se "alpha_vet" è un vettore.
    Se proprio volessi usare un ciclo for, dovresti scrivere:
    
    for ii=1:length(alpha_vet)
       alpha_new(ii)=alpha_vet(ii);
    end
    ma non c'è motivo di usare un ciclo for.
  • Re: Copiare un vettore

    Se scrivo solo alpha_new=alpha_vet poi nella figura mi visualizza solo alpha_new ( cioè ho solo una curva e non due come invece voglio )
  • Re: Copiare un vettore

    Nella prima domanda hai chiesto come copiare un vettore in un altro e che avresti voluto cambiare un valore nella nuova copia, successivamente.
    N.B : alpha_vet è il vettore vecchio (cioè A) ed alpha_new è il vettore nuovo (B) che voglio creare UGUALE A QUELLO VECCHIO : il valore che devo cambiare lo cambio nel seguito.
    Il codice che hai inserito nella domanda originale, ancorchè errato, sembrava un tentativo di copiare semplicemente il vettore "alpha_vet" nel vettore "alpha_new"; di sicuro, a parte gli errori, modifica uno o più valori del vettore originale.

    Nella prima domanda non hai specificato quale valore modificare nè come.

    Nel momento nel quale fai una copia di un vettore in un altro, ovviamente, nel grafico le due curve si sovrappongono essendo tutti i valori uguali.

    Dovresti pubblicare il codice "vero" sul quale stai lavorando (come detto, quello che hai pubblicato è errato) e spiegare quali valori vuoi modificare e come.
  • Re: Copiare un vettore

    A_vecchio=[0,0,0,0,0,0,12.1095,2.1807,0]; % il vettore iniziale
    N_a=9;
    valore_angoli=linspace(-8,8,N_a)/180*pi; %valori di angoli in gradi corrispondenti alle posizioni del vettore ( il massimo di a_vecchio è a
    4 gradi attualmente)
    %individuazione del massimo
    [~, M_index] = max(a_vecchio);

    d=0.5 %errore nello stimare il valore in gradi del massimo

    %calcolo il vero massimo tramite d
    theta_vero=valore_angoli(M_index)+d; %calcolo il valore del massimo vero tramite l'errore d
    a_nuovo=a_vecchio; %copio il vettore e ne creo un altro uguale (?)
    [~, P_index]=max(a_nuovo); %chiamo P_index la posizione del massimo di a_nuovo
    valore_angoli(P_index)=theta_vero; %impongo il valore in gradi di P_index pari a theta_vero e sarà quindi diverso dal valore in gradi di M_index
    ( a causa di d)

    %voglio raffigurare a_nuovo ed a_vecchio sulla stessa figura facendo vedere la differenza in gradi (sull'asse x): voglio quindi 2 curve (una per il vecchio ed una per il nuovo). Tuttavia vedo solo a_nuovo e quindi non vedo neanche la differenza di valori sull'asse x.
    figure;
    plot(valore_angoli,a_vecchio); hold on
    plot(valore_anogli,a_nuovo);
    xlabel('Angle(rad)','fontsize',16);
    ylabel('Alpha amplitude','fontsize',16);
    set(gca, 'Fontname', 'Times New Roman', 'Fontsize', 16);
    legend('a_vecchio','a_nuovo')
    xlim([-8 10])
    set(gca,'XTick',[-8:1:101]);
    ylim([0 15])
    set(gca,'YTick',[0:1:13]);
    grid on
  • Re: Copiare un vettore

    Alcuni errori nel codice che hai pubblicato (es. hai dichiarato A_vecchio, ma poi usi a_vecchio, nella funzione plot usi il vettore "valore_anogli" invece di "valore_angoli") fanno pensare che quello che hai pubblicato non sia il codice che stai effettivamente usando.

    La domanda fondamentale continua a non essere chiara: scrivi che vuoi fare una copia del vettore "alpha_vet" per cambiarne, in seguito un valore, ma nel codice che hai pubblicato il nuovo vettore non viene modificato.

    Quello che viene modificato è i vettore "valori_angoli"; il problema è che lo modifichi con l'istruzione
    
    valore_angoli(P_index)=theta_vero
    
    ma non ne fai una copia.
    Quando crei i grafici:
    
    plot(valore_angoli,a_vecchio); hold on
    plot(valore_anogli,a_nuovo);
    
    hai che:
    [*] i vettori "a_vecchio" e "a_nuovo sono uguali perchè sono uno la copia dell'altro e non hai modificato "a_nuovo"
    [*] il vettore "valore_angoli" è stato sì modificato, ma è usato per tutti e due i grafici

    per cui i due grafici coincidono essendo uguali tutti i dati.

    Se è effettivamente il vettore "valore_angoli" che vuoi modificare ed in base al quale vuoi vedere le differenze nei grafici, è di quello che devi fare una copia prima di modificarlo e, poi, usare quello originale nel primo grafico e quello modificato nel secondo grafico.
Devi accedere o registrarti per scrivere nel forum
5 risposte