2011-03-19 13 views
5

in MATLAB desidero inserire un valore a metà strada tra ogni elemento nel vettoreMATLAB valore inserto tra

ad esempio

v=[1,3,5,7,9] 

voglio ottenere

v=[1,2,3,4,5,6,7,8,9] 

c'è un modo veloce per farlo?

risposta

3
a = [1 3 5 7 9]; 
b = [2 4 6 8]; 
c = zeros(9,1); 
c(1:2:9) = a; c(2:2:8) = b; 
1

Dal momento che si desidera solo da inserire la media di ogni due valori, si potrebbe procedere come segue:

v = [1 3 5 7 9]; 
W = zeros(1,2*numel(v)-1); 
W(1:2:end) = v; 
W(2:2:end-1) = (W(1:2:end-2) + W(3:2:end))/2 

Se si desidera qualcosa di diverso, dare un'occhiata a interp1, che consentirà di interpolazione più avanzato .

+0

che era solo un esempio non sai quali due vettori ha. –

+1

@ d'o-o'b: non è chiaro dalla domanda, non viene menzionato nessun secondo vettore o quali dovrebbero essere i valori. Da "metà tra ogni elemento" ho pensato che voleva inserire il valore tra entrambi gli elementi, per avere un valore a metà tra i valori. – Egon

5

Una molto semplice, modo generale per farlo è con interpolazione, in particolare la funzione INTERP1:

>> v = [1 3 5 7 9] 

v = 

    1  3  5  7  9 

>> v = interp1(v,1:0.5:numel(v)) 

v = 

    1  2  3  4  5  6  7  8  9 
0

se diff (v) è una costante, come la vostra esempio [1 3 5 7 9 ], si può fare in questo modo:

>> v=[1 3 5 7 9] 
v = 
    1  3  5  7  9 
>> w=linspace(v(1),v(length(v)),2*length(v)-1) 
w = 
    1  2  3  4  5  6  7  8  9 

come il doc Guida ufficiale dice:

y = linspace(x1,x2,n) generates n points. The spacing between the points is (x2-x1)/(n-1). 

Se diff (v) non è una costante, come v = [1 3 6 8 10], è possibile prima di calcolare l'uso differenza

dv=diff(v) 

allora si può avere w

w=ones(1,2*length(v)-1) %initialize 
w(1:2:length(w))=v; % odd element 
w(2:2:length(w)-1)=v(1:length(v)-1)+diff(v)*0.5 %even element