2016-05-08 11 views
0

Ich habe diese beiden Vektoren, mit 9 Elementen jeweils:Matlab: Warum dieses Stück Code funktioniert (erwartet ein Fehler)

>> length(a) 

ans = 

    9 

>> length(c) 

ans = 

    9 

diesen Code:

z=0; 
s=0; 
temp=0; 
for K = 1:length(c) 
    temp=c(K)*a(K); 
    z=prod(1-a(K+1:end)); 
    s=s+temp*z; 
end 

Der Vektor ist eine Indizierung erfolgt über K itterator. Ich würde erwarten, dass dieser Index blasen würde. Fehle ich hier etwas?

+2

Warum erwarten Sie, dass es scheitert? Da "Länge (a)" und "Länge (c)" gleich sind, wird "K" nicht für "a" außer Kraft gesetzt. Vielleicht denken Sie über Iteratoren als Zeiger wie in C++, aber in MATLAB haben wir das nicht: 'K 'ist einfach eine Zahl, die von' 1: length (c)' ausgeht, und Sie indexieren die Matrizen 'a' und' c' mit dieser Nummer. –

+2

@Steve Heim, Sie betrachten nur die 'temp = c (K) * a (K)' -Zeile, nicht die 'a (K + 1: end)' Indizierung. –

Antwort

5

Es macht keinen Fehler, weil

prod([]) = 1 

So nach K+110 wird, a wird [] und der Ausgang wird

z = prod(1-[]) 
z = 1 

hoffe, das hilft!

+0

Bezüglich * why * ist es ein leeres Array, siehe die Dokumentation für ['end'] (http://www.mathworks.com/help/matlab/ref/end.html):' Die End-Funktion dient auch als letzte Index in einem Indexierungsausdruck. In diesem Kontext ist das Ende dasselbe wie die Größe (X, k), wenn es als Teil des k-ten Indexes in das Array X. verwendet wird – excaza

Verwandte Themen