使用多维数组计算Fortran中的方差 - 未获得正确的值

时间:2015-10-26 19:09:24

标签: fortran fortran90

PROGRAM  Assignment_8 

IMPLICIT NONE

REAL,DIMENSION(1440,11) :: data
INTEGER :: inputstatus, openstatus, i, j 
REAL :: TempSum = 0.0, MaxVal, MinVal, MaxPrecip = 0.0, MinPrecip = 10000.00, &
TempSumsq = 0.0, TempVar, Tempsd, WindSum = 0.0, WindSumsq = 0.0, Windsd, WindVar, &
WindAvg, dailyprecip, MaxTemp, MinTemp, AvgWind, AvgTemp
REAL(8) :: Pressure, PressureSum = 0.0, PressureSumsq = 0.0, PressureAvg, Pressuresd, &
PressureVar 
INTEGER :: Count = 0
CHARACTER(20) :: filename


! Prompts the user to open the file
WRITE (*, '(1X, A)', ADVANCE = "NO") "Enter the name of the file:"
READ *, filename
! This statement will specify the unit number, and how the file will be
! opened
OPEN (UNIT = 35, FILE = filename, STATUS = "OLD", ACTION = "READ", IOSTAT = openstatus)
IF (openstatus > 0) STOP "FILE CAN'T BE OPEN" 

! Reads the opened file, places in an array, and calculates the output
DO i = 1,1440
    READ(35, *, iostat = inputstatus) data(i,:)
    if   (inputstatus > 0) STOP "Could not fill array"
ENDDO

! Calculates the output
AvgTemp = sum(data(:,6))/size(data(:,6))
AvgWind = sum(data(:,8))/size(data(:,8))
PressureAvg = sum(data(:,10))/size(data(:,10))
TempVar = (sum(data(:,6))-(sum(data(:,6))/size(data(:,6))))**2
Tempsd = (TempVar)**(.5)
WindVar = (sum(data(:,8))-(sum(data(:,8))/size(data(:,8))))**2
Windsd = (WindVar)**(.5)
PressureVar = (sum(data(:,10))-(sum(data(:,10))/size(data(:,10))))**2
Pressuresd = (PressureVar)**(.5)
MaxTemp = maxval(data(:,6))
MinTemp = minval(data(:,6))
dailyprecip = maxval(data(:,6)) - minval(data(:,6))

! Converts Pressure (Hg) to Pressure (mb)
PressureAvg = PressureAvg * 33.8639
Pressuresd = Pressuresd * 33.8639

! Displays formatted output of calculations from the data
PRINT '(1X,A30,F7.2,A20)', "Average Temperature=", AvgTemp, "Degrees Fahrenheit"
PRINT '(1X,A30,F7.2,A20)', "Temperature Variability=", Tempsd, "Degrees Fahrenheit"
PRINT '(1X,A30,F7.2,A20)', "Maximum Daily Temperature=", MaxTemp, "Degrees Fahrenheit"
PRINT '(1X,A30,F7.2,A20)', "Minimum Daily Temperature=", MinTemp, "Degrees Fahrenheit"
PRINT '(1X,A30,F7.2,A5)', "Average Wind Speed=", AvgWind, "mph"
PRINT '(1X,A30,F7.2,A5)', "Wind Speed Variability=", Windsd, "mph"
PRINT '(1X,A30,F7.2,A10)', "Average Pressure=", PressureAvg, "Millibars"
PRINT '(1X,A30,F7.2,A10)', "Pressure Variability=", Pressuresd, "Millibars"
PRINT '(1X,A40,F7.2,A10)', "Daily Accumulated Precipitation=", dailyprecip, "Inches"

CLOSE (35)

END PROGRAM assignment_8

我没有获得标准偏差的正确值。我的方差方程是否正确?

我应该在风速,压力和温度方面获得合理的变化。风速变化应为.80,压力为.85,温度为1.10

1 个答案:

答案 0 :(得分:2)

标准差为:

enter image description here

但你正在计算:

enter image description here

您在平方根下缺少1 / N的因子,您应该将求和的各个项的差异平方,而不是和本身。