Como posso calcular a soma de todos os inteiros positivos menores que n?

3

Eu tenho a seguinte função:

f(n) = f(n - 1) + (n - 1)
f(0) = 0
n >= 0

Eu tenho n declarado na coluna A e preciso do resultado de f(n) na coluna B.

Estou tentando encontrar a fórmula do Excel equivalente para essa função.

Resultado da amostra:

A | B
--+--
0 | 0

ou:

A | B
--+--
1 | 0

ou:

A | B
--+--
4 | 6

mas nunca :

A | B
--+--
0 | 0
1 | 0
2 | 1
...

O maior problema é que não consigo simular o valor de f(n - 1) . Portanto, fazer referência à linha anterior como o exemplo acima é inválido. Tenho quase certeza de que a resposta é trivial, não consigo encontrá-la.

    
por Adrian Godong 04.08.2009 / 01:07

8 respostas

14

Isso ajuda?

f(n) = sum of all positive integers less than n

Deveria, especialmente com a ajuda de alguma aritmética .

OK, dado que as pessoas agora estão postando respostas com funções definidas pelo usuário , aqui está a resposta

f(n) = (n-1)n/2

Atualização : Para aqueles que não podem ver que a fórmula não usa nenhuma informação de nenhuma outra linha (veja o comentário de Stan R. abaixo), alterei um pouco a ordem:

 0  =(A1-1)*A1/2    0
 9  =(A2-1)*A2/2    36
 2  =(A3-1)*A3/2    1
 4  =(A4-1)*A4/2    6
 6  =(A5-1)*A5/2    15
 5  =(A6-1)*A6/2    10
10  =(A7-1)*A7/2    45
 8  =(A8-1)*A8/2    28
 3  =(A9-1)*A9/2    3
 7  =(A10-1)*A10/2  21
 1  =(A11-1)*A11/2  0
...
    
por 04.08.2009 / 01:12
7

Você precisa resolvê-lo recursivamente? Essa certamente não é a melhor maneira de resolvê-lo:

Sum the numbers 1 to 10

   1 + 2 + 3 + 4 + 5
+ 10 + 9 + 8 + 7 + 6
  --  --  --  --  --
  11 +11 +11 +11 +11 = 55

ou, como está resumido, (n+1)(n/2) - com n = 10, isso é obviamente 11 x 5

    
por 04.08.2009 / 01:28
3

A função pode ser corrigida para eliminar a recursão.

Vamos dar alguns exemplos aqui ...

f(4)=1+2+3=6
f(5)=1+2+3+4=10
f(6)=1+2+3+4+5=15

Há um padrão aqui:

f(4)=1+2+3=6=4*1.5
f(5)=1+2+3+4=10=5*2
f(6)=1+2+3+4+5=15=6*2.5

o que significa que podemos generalizar a função para f(n)=1+2+...+n=n*(n-1)/2 para n > 1 e f(n)=0 de outra forma.

A fórmula do Excel resultante pode então ser escrita como =IF(A5>1;A5*(A5-1)/2);0) , assumindo que A5 contenha n.

Obviamente, se sua fórmula é mais complexa do que a que você deu, pode se tornar um pouco mais difícil, e pode ser muito mais rápido e mais fácil apenas escrever uma função definida pelo usuário como a sugerida por Scott e então usar isso.

    
por 04.08.2009 / 01:24
2

Não sei como fazer isso com fórmulas puras. Uma opção é uma UDF

Public Function f(n As Integer) As Integer
    If (n = 0) Then
        f = 0
        Exit Function
    End If

    If (n > 0) Then
        f = f(n - 1) + (n - 1)
    End If
End Function

e a fórmula é apenas =f(A1)

    
por 04.08.2009 / 01:21
2

O Excel tem algo chamado Array Formulas, que permite que uma função retorne um conjunto de valores. Você pode ler mais sobre eles aqui . Estes permitirão efetivamente escrever, com alguma criatividade, análogos a algoritmos recursivos. Fórmulas de matriz devem ser inseridas usando Shift-Ctrl-Enter .

Para responder à sua pergunta, faça com que uma função array retorne 1 através de n-1 e coloque-a em uma soma. Aqui, Indireto cria uma referência, e A1 contém n :

=SUM( ROW( INDIRECT("1:"&A1-1) ) )
    
por 19.01.2012 / 20:28
0

Se você entendeu corretamente, então você está tentando criar uma função recursiva e referências circulares no Excel não são permitidas. Sua melhor aposta é criar sua própria função de planilha.

Pressione Alt + F11 para ir para o VB e insira o > Module em seguida, siga Resposta de Scott .

    
por 04.08.2009 / 01:17
0

Normalmente, a maneira como isso é feito é definir suas próprias funções. No editor do VBA, insira um novo módulo em sua pasta de trabalho e cole a seguinte função:

Function f(n As Integer)
    If n <= 0 Then
        f = 0
    Else
        f = f(n - 1) + (n - 1)
    End If
End Function

Agora você pode ligar diretamente para isso:

=f(A2)
    
por 04.08.2009 / 01:30
0
=IF(MOD(A1,2)=0,(A1-1)*ROUND(A1/2,0), (A1) * ((A1-1)/2))

Eu não sei, se é isso que você está procurando.

    
por 04.08.2009 / 01:35