2015-10-26 154 views
0
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 

我沒有得到標準偏差的正確值。我的方差方程是否正確?使用多維數組計算Fortran中的方差 - 未得到正確值

我應該獲得風速,壓力和溫度的合理變化。風速的變化應該是0.80,在壓力.85和溫度在1.10

+0

歡迎來到SO!我爲你格式化了這個問題......但是,還是有一些重要的東西遺漏了:你得到了什麼輸出?你期望什麼?你試圖解決什麼問題?你是否啓用了所有的編譯器警告和檢查?另外,請提供可編譯的內容。請閱讀[問]和[如何創建一個最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve)。 –

+0

因爲我們看不到輸入數據文件,所以還要注意'inputstatus> 0'不足以檢測讀取是否成功:在文件/記錄條件結束時出現負值。 – francescalus

+0

編輯問題 – Ageisler

回答

2

標準偏差爲:

enter image description here

,但你計算:

enter image description here

你是在平方根下缺少1/N的因子,你應該求和求和的個別項,而不是求和本身。