Sum of geometric series without loop

20 Ansichten (letzte 30 Tage)
Kenan Hoyt
Kenan Hoyt am 20 Jun. 2014
Kommentiert: Roger Stafford am 21 Jun. 2014
Hey! For the function geo(r,varargin) i am trying to find the sum of the following
1 + r + r^2 + r^3 + r^4 + ... + r^n
where n = nargin.
I have searched and lurked at every corner both here and in the "help" in Matlab, but i found no way of "writing"/"setting up" the geometric series without loops, which is what i am trying to accomplish. Finding the sum i can do, but i cannot find a way to write above series without too much effort. Any ideas? What obvious built-in function am i missing?

Akzeptierte Antwort

Geoff Hayes
Geoff Hayes am 20 Jun. 2014
I'm not all that clear on why you are using n=nargin instead of just passing n into the function as the second input but maybe there is more to your function than just the series.
You can try using cumprod which returns the cumulative product of each element in the input array. For example,
cumprod([1 2 3 4 5])
returns
1 2 6 24 120
where each element (starting from second) is multiplied by the previous element. You can do something similar with r and n as follows
% create a vector with n elements all identical to r
v = r*ones(1,n);
% calculate [r r^2 r^3….r^n]
v = cumprod(v);
% sum and add one
geoSum = 1 + sum(v);
Try the above and see what happens!
  2 Kommentare
Kenan Hoyt
Kenan Hoyt am 20 Jun. 2014
It works! Thanks!
Geoff Hayes
Geoff Hayes am 20 Jun. 2014
Great!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Roger Stafford
Roger Stafford am 20 Jun. 2014
A simpler method:
result = (1-r^(n+1))/(1-r);
  2 Kommentare
Kenan Hoyt
Kenan Hoyt am 21 Jun. 2014
That's really cool. I can't understand how (yet), but it works! Thanks!
Roger Stafford
Roger Stafford am 21 Jun. 2014
It is easy to see why this works. Call the sum s:
s = 1 + r + r^2 + r^3 + r^4 + ... + r^n
Then
s*r = r + r^2 + r^3 + r^4 + r^5 + ... + r^(n+1)
Therefore when you subtract s*r from s, all the terms cancel except the first and last ones:
s - s*r = 1 - r^(n+1)
Hence if you divide both sides by 1-r you get
s = (1-r^(n+1))/(1-r)

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by