Path: news.mathworks.com!not-for-mail
From: "Steven_Lord" <slord@mathworks.com>
Newsgroups: comp.soft-sys.matlab
Subject: Re: how to vectorize this loop
Date: Tue, 19 Apr 2011 09:41:34 -0400
Organization: MathWorks
Lines: 62
Message-ID: <iok3dr$5gg$1@fred.mathworks.com>
References: <ioinh4$f1g$1@fred.mathworks.com> <ioiqil$42j$1@fred.mathworks.com>
NNTP-Posting-Host: ah-slord.dhcp.mathworks.com
Mime-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="UTF-8";
	reply-type=response
Content-Transfer-Encoding: 7bit
X-Trace: fred.mathworks.com 1303220475 5648 172.31.44.225 (19 Apr 2011 13:41:15 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Tue, 19 Apr 2011 13:41:15 +0000 (UTC)
In-Reply-To: <ioiqil$42j$1@fred.mathworks.com>
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Newsreader: Microsoft Windows Live Mail 14.0.8089.726
X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8089.726
Xref: news.mathworks.com comp.soft-sys.matlab:722737



"Roger Stafford" <ellieandrogerxyzzy@mindspring.com.invalid> wrote in 
message news:ioiqil$42j$1@fred.mathworks.com...
> "Mateusz Gos" <webmaster24@wp.pl> wrote in message 
> <ioinh4$f1g$1@fred.mathworks.com>...
>> hi,
>> i would like to write the following loop in form of a vector, which I am 
>> guessing is possible (or not?):
>>
>> n = 1;
>> for n = 1:20
>> R = mean(measurements(1:n));
>> n = n+1;
>> end
>>
>> thanks,
>> mat
> - - - - - - - -
>  You should not have the "n = n+1;" line in there.  The for-loop with n 
> takes care of advancing n.  Also the line "n = 1;" is totally unnecessary 
> since the for-loop will start at n = 1 no matter how you set n in advance.
>
>  As your code stands at present you are taking twenty different mean 
> operations, the first one the mean of the single number 1, then the mean 
> of the two number 1 and 2, then that of 1, 2, and 3, and so forth.  Is 
> that what you had in mind?  If so, all but the last one of these means 
> from 1 to 20 have been overwritten because you placed them in the same 
> variable R without indexing it with n.
>
>  If all you want is the single mean of the numbers from 1 to 20, then do 
> this:
>
> R = mean(1:20);
>
>  If you want the twenty different means, do this:
>
> R = zeros(20,1);
> for n = 1:20
>  R(n) = mean(1:n);
> end

For this particular problem, since the mean of a vector of values is the sum 
of the elements in the vector divided by the number of elements in the 
vector, you could use CUMSUM.

% Sample data
measurements = rand(1, 20);
n = 20;

% Engine
R = cumsum(measurements(1:n))./(1:n);

% Spot check the answer
R(5) - mean(measurements(1:5))

-- 
Steve Lord
slord@mathworks.com
To contact Technical Support use the Contact Us link on 
http://www.mathworks.com