회귀 분석

온도와 부피의 회귀분석

온도 : 독립변수, 부피 : 종속변수

파일에서 온도와 부피를 읽어와 처리

PROGRAM Temp_Vol

IMPLICIT NONE

INTEGER :: Count = 0, OpenStatus, InputStatus
CHARACTER(20) :: FileName
REAL :: Temperature, Volume, SumOfTemps = 0.0, SumOfTemps2 = 0.0, &
SumOfVols = 0.0, SumOfProds = 0.0, MeanTemperature, &
MeanVolume, Slope, Y_Intercept

WRITE (*, '(1X, A)', ADVANCE = "NO") "자료 파일 이름(20자 이내)을 입력하시오 : "
! 한 띄고 출력, ADVANCE = "NO"는 출력하고 그 줄바꿈 하지 않음
READ *, FileName

OPEN (UNIT = 15, FILE = FileName, STATUS = "OLD", IOSTAT = OpenStatus)
! 파일을 열어 15이라 함. STATUS = "OLD"는 기존의 존재하는 파일
! IOSTAT = OpenStatus는 파일 오픈한 결과를 할당. 0 이면 성공적으로 open, 0 초과이면 못 연 것

IF (OpenStatus > 0) THEN
STOP "*** 파일을 열 수 없음 ***"
END IF

PRINT *
PRINT '(1X, A11, A10)', "Temperature", "Volume"
PRINT '(1X, A11, A10)', "===========", "======="

DO

READ (UNIT = 15, FMT = '(4X, F4.1, T13, F4.1)', IOSTAT = InputStatus) Temperature, Volume
! 파일 15의 자료를 읽는다. IOSTAT = InputStatus는 읽은 결과를 할당. 양의 값-입력오류, 음의 값-데이터의 끝, 0-잘 읽음

IF (InputStatus > 0) THEN
STOP "*** 입력 에러 ***" ! 프로그램 종료하기
END IF

IF (InputStatus < 0) THEN
EXIT ! DO 루프 빠져나가
END IF

PRINT '(1X, F8.1, F12.1)', Temperature, Volume
Count = Count + 1
SumOfTemps = SumOfTemps + Temperature
SumOfTemps2 = SumOfTemps2 + Temperature ** 2
SumOfVols = SumOfVols + Volume
SumOfProds = SumOfProds + Temperature * Volume

END DO

CLOSE(15)
! 15번 파일을 닫는다.

MeanTemperature = SumOfTemps / REAL(Count)
MeanVolume = SumOfVols / REAL(Count)

PRINT *
PRINT '(1X, A, F6.2, A, F6.2)', "평균 온도 =", MeanTemperature, " ; 평균 부피 =", MeanVolume

Slope = (SumOfProds - SumOfTemps * MeanVolume) / (SumOfTemps2 - SumOfTemps * MeanTemperature)
Y_Intercept = MeanVolume - Slope * MeanTemperature

PRINT '(/1X, "회귀식" /1X, " y =", F5.1, "x + ", F5.1, /1X, "여기서 x는 온도, y는 부피")', Slope, Y_Intercept

END PROGRAM Temp_Vol

위 소스를 05_01_Temp_Vol.f95 로 저장

자료 파일

1200034203221015
1300038803221121
1400044803241425
1500051303201520
1600055503181665
1700061303191865
1800067503232080
1900072103282262
2000076803252564
2100083503272869
2200088903303186

위 자료 파일을 05_01_Temp_Vol.dat 로 저장

컴파일 및 프로그램 테스트



+ Recent posts