Fortran Understanding Fortran Factorials in Infinite Sums

  • Thread starter Thread starter Goatsenator
  • Start date Start date
  • Tags Tags
    Factorials Fortran
AI Thread Summary
The discussion revolves around the implementation of the binomial theorem in a programming context, specifically evaluating the infinite sum of a factorial expression. The original code attempts to compute the sum using a loop where the factorial term is updated iteratively. The user expresses confusion about how to correctly update the factorial variable and calculate the terms of the sum for each value of k. Initially, there is uncertainty about the formula used to update the factorial, with attempts to derive the correct relationship between the terms. The user realizes that the code calculates the factorial for k=3 when it should be for k=2, leading to incorrect results. After working through the calculations on paper, the user confirms that the expected output for specific values of x and n does not match the program's output. Ultimately, the user reaches an understanding of the logic behind the code and how the factorial is updated, indicating a resolution to their confusion. The discussion highlights the importance of correctly implementing mathematical concepts in programming to achieve accurate results.
Goatsenator
Messages
18
Reaction score
0
I don't understand at all how you tell the computer to evaluate a complicated factorial expression such as the one given in in the infinite sum of binomial theorem as

Ʃ [n! / k!(n-k)! ] * x^k

where n is the final value of the sum and k is where you are in the loop.

It's supposed to be

INTEGER :: k, n
REAL :: sum, fact, x

ASK INPUT (what are x and n?)

DO k = 0,n
sum = sum + fact*x**k
fact = fact * (n-k)/(k+1)
END DO

Is there a procedure to figure out what the term multiplied by the fact variable should be?
 
Technology news on Phys.org
Look at what the term are summing, for each value of k.

When k = 0, it is n! / (0! n!) so k0 = 1
When k = 1, it is n! / (1! (n-1)! so k1 = n = k0 * n / 1
When k = 2, it is n! / (2! (n-2)! so k2 = n(n-1) / 2! = k1 * (n-1) / 2
When k = 3, it is n! / (3! (n-3)! so k3 = n(n-1)(n-2) / 3! = k2 * (n-2) / 3
etc.
That is what the program is doing when it updates "fact".
 
Hmmm... then fact * (n-k)/(k+1) can't be right because it doesn't match the results of working out all the factorials like that. I checked it in command prompt and it said the sum with x = 2 and n = 2 is 5. This sum represents (1+x)^n which should be 9 in that case.

I thought fact * ( (n-k+1) / k ) would work but I'm not getting the right answer with that either.
 
disregard that. i worked it out on paper and i got 9 but for some reason the program is outputting 5...

If the k0,k1,k2 etc values are the "fact", how is (n-2)/3 = (n-k)/(k+1) for k = 3? That's why I thought it should be ( (n-k+1) / k ).
 
Last edited:
Goatsenator said:
If the k0,k1,k2 etc values are the "fact", how is (n-2)/3 = (n-k)/(k+1) for k = 3? That's why I thought it should be ( (n-k+1) / k ).

The code calculates "k3" when k = 2, not when k = 3.

Each time through the loop, it uses the current value of fact, then calculates the next value.
 
Code:
	i=n
	fact=1 
	sum=1
	DO k= 1,n
		f = f*i/k*x
		i = i-1
		s = s + f
	END DO
 
AlephZero said:
The code calculates "k3" when k = 2, not when k = 3.

Each time through the loop, it uses the current value of fact, then calculates the next value.

OH! I just realized that! It's so simple now that I understand it. Thank you for the help!
 

Similar threads

Back
Top