2017-01-31 6 views
0

ich einen einfachen Zweifel haben, möchte ich einen Vektor in Matlab erweitern:Extend Vektor in Matlab

a = [1 2 3 4 n]; 

auf folgende Weise:

b = [1 1.5 2 2.5 3 3.5 4 ... n]; 

Das bedeutet, einen neuen Vektor mit der machen doppelte Größe des vorherigen, aber die neuen addierten Werte müssen der Mittelwert der vorherigen und der nächsten Zahl sein.

Irgendeine Idee einer Schleife, um dieses Problem zu lösen?

Antwort

2

Eine mögliche Lösung

b(1:2:2*numel(a)-1)=a 
b(2:2:end) = a(1:end-1)+diff(a)/2 
0

ohne Annahme auf Bestellung

a = [1 2 5 9 17]; 
d=[diff(a),0] 
a2=[a;a+d/2] 
b=a2(1:end-1) 
1

Sie lineare Interpolation verwenden können (interp1) Um dieses Problem zu lösen. Unter Verwendung des Vektors a können wir Werte an und zwischen jedem der Elemente interpolieren.

a = [1 2 3 4 17]; 

b = interp1(a, linspace(1, numel(a), numel(a) * 2 - 1), 'linear'); 
% 1 1.5 2 2.5 3 3.5 4 10.5 17 

Erklärung

Was das bedeutet ist, setzt voraus, dass Sie eine Funktion f(x) wo x = [1 2 3 4 5] und f(x) = a haben. Was Sie letztendlich wollen, ist der Wert von f(x) wo x = [1 1.5 2 2.5 3 3.5 4 4.5 5] (das heißt die Werte und die Werte in-zwischen Werte. Wenn wir die 'linear' Option verwenden, dann wird die in-zwischen Werten wird mit dem Durchschnitt der seinen Nachbarn ersetzt werden.