sum of series. Vectorised (no loop)
    13 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
Respuesta aceptada
  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
  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.
Más respuestas (2)
Ver también
Categorías
				Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


