2011-03-19 35 views
5

trong MATLAB tôi muốn chèn một giá trị nửa chiều giữa mọi phần tử trong vectorMATLAB giá trị chèn ở giữa

ví dụ

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

tôi muốn có được

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

là có một cách nhanh chóng để làm điều này?

Trả lời

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

Vì bạn chỉ muốn tỷ lệ trung bình của mỗi hai giá trị được chèn, bạn có thể làm như sau:

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 

Nếu bạn muốn cái gì khác, hãy nhìn vào interp1, mà sẽ cho phép nội suy cao cấp hơn .

+0

rằng chỉ là một ví dụ. bạn không biết hai vectơ anh ta có. –

+1

@ d'o-o'b: đó không phải là rõ ràng từ câu hỏi, không có vector thứ hai được đề cập hoặc những gì nó là giá trị được cho là. Từ "nửa cách giữa mọi phần tử" tôi nghĩ anh ta muốn giá trị được chèn vào giữa hai phần tử, để có giá trị nửa chừng giữa các giá trị. – Egon

5

Một rất đơn giản, cách tổng quát để làm điều này là với suy, đặc biệt là chức năng 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

nếu diff (v) là một hằng số, như ví dụ của bạn [1 3 5 7 9 ], bạn có thể làm điều đó như thế này:

>> 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 

như sự giúp đỡ chính thức doc nói:

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

Nếu diff (v) không phải là một hằng số, như v = [1 3 6 8 10], trước tiên bạn có thể tính toán việc sử dụng sự khác biệt

dv=diff(v) 

sau đó bạn có thể có 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 
Các vấn đề liên quan