회귀 분석
온도와 부피의 회귀분석
온도 : 독립변수, 부피 : 종속변수
파일에서 온도와 부피를 읽어와 처리
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 로 저장
컴파일 및 프로그램 테스트
'Programming > Fortran' 카테고리의 다른 글
포아송 확률 구하기(2개의 함수, 함수에서 다른 함수 호출) (0) | 2008.09.03 |
---|---|
온도 변환(함수 - 내부 부프로그램) (0) | 2008.09.03 |
출력 서식 지정 (0) | 2008.08.29 |
온도 변환(DO WHILE, END DO) (0) | 2008.08.28 |
온도변환(DO, EXIT, CYCLE, END DO) (0) | 2008.08.28 |