sum of series. Vectorised (no loop)

2 visualizaciones (últimos 30 días)
Mohammad Ali
Mohammad Ali el 27 de Abr. de 2021
Editada: DGM el 28 de Abr. de 2021
How can I sum n terms of
1-1/2+1/3-1/4......

Respuesta aceptada

Khalid Mahmood
Khalid Mahmood el 27 de Abr. de 2021
Editada: Khalid Mahmood el 27 de Abr. de 2021
% To reduce 2 more lines
function s=vsum(n)
if nargin<1
s=1; return
end
if mod(n,2)==0, n=n-1;end
s=1+sum(1./[3:2:n] -1./[2:2:n])
  3 comentarios
Mohammad Ali
Mohammad Ali el 28 de Abr. de 2021
Khalid's answer is perfect
DGM
DGM el 28 de Abr. de 2021
Editada: DGM el 28 de Abr. de 2021
It's perfect if you want the wrong answer 50% of the time.
This is demonstrable. Just test it.
function s=vsum(n)
if nargin<1
s=1; return
end
if mod(n,2)==0, n=n-1;end
s=1+sum(1./[3:2:n] -1./[2:2:n]);
end
Test with odd argument:
s1 = vsum(5)
s2 = 1 - 1/2 + 1/3 - 1/4 + 1/5
results match
s1 =
0.7833
s2 =
0.7833
Test with even argument:
s1 = vsum(4)
s2 = 1 - 1/2 + 1/3 - 1/4
results don't match
s1 =
0.8333
s2 =
0.5833
This whole thing looks like an attempt to make the vector lengths match when they shouldn't.
s2 = sum(1./(1:2:nt))-sum(1./(2:2:nt))
is simpler and actually correct.

Iniciar sesión para comentar.

Más respuestas (2)

Mohammad Ali
Mohammad Ali el 27 de Abr. de 2021
I hope you may want this.
function s=vsum(n)
if nargin<1
s=1; return
end
if mod(n,2)==0, n=n-1;end
nod=[3:2:n]
nev=[2:2:n]
s=1+sum(1./nod-1./nev)
  1 comentario
DGM
DGM el 27 de Abr. de 2021
This only gives the correct answer for odd inputs.

Iniciar sesión para comentar.


DGM
DGM el 27 de Abr. de 2021
Editada: DGM el 27 de Abr. de 2021
You can calculate the sum of a finite alternating harmonic series easy enough:
N = 1000;
n = 1:N;
s = sum((2*mod(n,2)-1)./n)
gives
s =
0.6926

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by