How do I create a vector of n exponentially increasing values from a to b?

113 visualizaciones (últimos 30 días)
I know how to calculate the growth factor, but not how to turn it all into a vector. Here's the start of my code: -
n = 4
a = 1
b = 10
gf = (b/a)^(1/n - 1)
  1 comentario
Tom
Tom el 4 de Abr. de 2013
I think I've done it with a for loop: -
n = 4
a = 1
b = 10
gf = (b/a)^(1/(n - 1))
for k = 1:n
y(k) = a*gf^(k-1);
end
Does anyone know how I could do it using a non-for loop method?

Iniciar sesión para comentar.

Respuesta aceptada

the cyclist
the cyclist el 4 de Abr. de 2013
k = 1:n;
y = a*gf.^(k-1);
or, even simpler
y = a*gf.^((1:n)-1);
  3 comentarios
Ramm
Ramm el 13 de Ag. de 2018
Editada: Ramm el 13 de Ag. de 2018
Is this a specific module that I need to add? In my case it doesn't work:
n = 4;
a = 1;
b = 10;
K>>
K>> k = 1:n;
K>> y = a*gf.^(k-1);
Error using .^ (line 1000)
Sizes of x, y don't match.
K>> y = a*gf.^((1:n)-1);
Error using .^ (line 1000)
Sizes of x, y don't match.
Stephen23
Stephen23 el 13 de Ag. de 2018
Editada: Stephen23 el 13 de Ag. de 2018
@Ramm: That error message is telling you what the problem is. It does not mention that you need any "specific module". It shows that your gf is non-scalar and is not the same size as k, thus you will get this error. The code in this answer works perfectly, as long as you define a scalar growth factor (exactly as the question shows):
>> n = 4;
>> a = 1;
>> b = 10;
>> gf = (b/a)^(1/n-1)
gf = 0.17783
>> k = 1:n;
>> y = a*gf.^(k-1)
y =
1.0000000 0.1778279 0.0316228 0.0056234

Iniciar sesión para comentar.

Más respuestas (1)

Carlos
Carlos el 4 de Abr. de 2013
>> y=zeros(4,1);
>> n=1:1:4;
>> y(1:4)= a*gf.^(n(1:4)-1);
>> y
y =
1.0000
2.1544
4.6416
10.0000
  3 comentarios
Stephen23
Stephen23 el 13 de Ag. de 2018
@Ramm: although that n usage is a bit dodgy, it also works.

Iniciar sesión para comentar.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by