statisticsfortranstandardsvariancedeviation

Problem finding standard deviation and population variance correctly using Fortran


I couldn't find much when I searched for standard deviations and population variances on fortran 95. So I'm wondering if someone could help me? Thanks for your time.

Here is what I did, it compiled fine but it turned out giving wrong values:

    SUBROUTINE ComputeStats(num, sum, avg, variance, sdv)

        REAL, INTENT(IN):: num(10)
        REAL, INTENT(OUT):: sum
        REAL, INTENT(OUT):: avg, variance, sdv

        DO i=1, 10
            sum=sum+num(i)
        END DO

        avg=sum/10

        DO i=1, 10
            variance=(((num(i)-avg)**2.0)/10)
            variance=variance+i
            sdv=variance**0.5
        END DO

    END SUBROUTINE

Solution

  • You don't calculate the variance correctly.

           variance = 0
           DO i=1, 10
             variance = variance + (((num(i)-avg)**2.0)/10)
           END DO
    

    This gives you the right variance for e.g. 1,1,1,1,1,1,1,1,1,1 which is 0, not 10.