2016-09-10 4 views
2

Ich würde gerne wissen, gibt es sowieso die folgende Aussage in Matlab zu tun?dynamischer Inkrementschritt zum Definieren eines Vektors in Matlab

10: 2to power(1,2,3):18 

Ich mag folgenden Vektor erstellen, und ich brauche einen dynamischen Zuwachs Schritt haben, die 2 auf die Kraft des (1,2,3) ist.

a=[10,12,14,18] 

ich versuchte

10:2.^[1,2,3]:18 

und

10:2.^[1;2;3]:18 

aber es dauert 2^1 als Inkrement Schritt.

Antwort

2

Nein, Sie können keinen dynamischen Inkrementwert in MATLAB haben.

Der MATLAB Weg, dies zu tun, um Ihren Vektor zu erstellen wäre das Array 2.^[1 2 3] und fügen Sie es die 10 und verketten, dass mit 10 zu konstruieren.

a = [10 10 + (2.^[1 2 3])] 

% 10 12 14 18 

Wenn Sie wollten, könnten Sie eine Funktion zum Erstellen dieser Arrays schreiben.

function out = pow2increment(start_value, end_value) 
    % Figure out how many powers of 2 we need for this range 
    upper_limit = floor(log2(end_value - start_value)); 

    % Construct the array 
    out = [start_value, start_value + 2.^(1:upper_limit)]; 
end 

oder als anonyme Funktion Vielen Dank für Ihre Antwort

pow2increment = @(a,b)[a, a + 2.^(1:floor(log2(b - a)))]; 

pow2increment(10, 18) 

% 10 12 14 18 
+0

. Definitiv gibt es einfachere Möglichkeiten, diesen Vektor zu erstellen. Ich wollte wissen, ob es so etwas in Matlab gibt oder nicht. – user6276336

+0

@ user6276336 Aktualisiert, um expliziter zu sein. Es gibt keinen Weg, aber ich habe zwei Funktionen angeboten, die diese Arten von Serien für Sie erstellen können. – Suever

Verwandte Themen