³ÌÐòΪ£º
PROGRAM least_squares_fit
IMPLICIT NONE
! Êý¾Ý×ֵ䣬ÉùÃ÷³£Á¿
INTEGER,PARAMETER :: LU=18 ! I/O unit for disk I/O
! Êý¾Ý×ֵ䣬ÉùÃ÷±äÁ¿ÀàÐÍ¡¢¶¨ÒåºÍµ¥Î»
CHARACTER(len=24) :: filename
INTEGER :: ierror
INTEGER :: n=0
REAL :: slope
REAL :: sum_x=0.
REAL :: sum_x2=0.
REAL :: sum_xy=0.
REAL :: sum_y=0.
REAL :: sum_y2=0.
REAL :: x
REAL :: x_bar
REAL :: y
REAL :: y_bar
REAL :: y_int
! ÌáʾÓû§ÊäÈë²¢»ñµÃÊäÈëÎļþÃû
WRITE (*,1000)
1000 FORMAT (1x,'This program performs a least-squares fit of an ',/,&
1x,'input data set to a straitght line. Enter the name',/&
1x,'of the file containing the input (x,y) pairs: ')
READ (*,1010) filename
1010 FORMAT (A)
! ´ò¿ªÊäÈëÎļþ
OPEN (UNIT=LU,FILE=filename,STATUS='OLD',IOSTAT=ierror )
! ²é¿´OPEN²Ù×÷ÊÇ·ñʧ°Ü
errorcheck: IF (ierror>0) THEN
WRITE (*,1020) filename
1020 FORMAT(1x,'ERROR: File ',A,'does not exist! ')
ELSE
!Èç¹ûÎļþ³É¹¦´ò¿ª£¬¾Í´ÓÎļþÖжÁÈ¡Êý¾Ý¶Ô(x,y)¡£
DO
READ (LU,*,IOSTAT=ierror) x,y !»ñµÃÊý¾Ý¶Ô
IF (ierror/=0) EXIT
n=n+1
sum_x=sum_x+x
sum_y=sum_y+y
sum_x2=sum_x2+x**2
sum_xy=sum_xy+x*y
END DO
! ÏÖÔÚ¼ÆËãбÂʺͽؾࡣ
x_bar=sum_x/real(n)
y_bar=sum_y/real(n)
slope=(sum_xy-sum_x*y_bar)/(sum_x2-sum_x*x_bar)
y_int=y_bar-slope*x_bar
! ¸æÖªÓû§
WRITE (*,1030) slope,y_int,N
1030 FORMAT ('0','Regression coefficients for the least-squares line:',&
/,1x,'slope(m)=',F12.3,&
/,1x,'Intercept(b)=',F12.3,&
/,1X,'No of points=',I12)
! ¹Ø±ÕÊäÈëÎļþ²¢Í˳ö¡£
CLOSE (UNIT=LU)
END IF errorcheck
END PROGRAM least_squares_fit
ÔËÐнá¹ûΪͼƬËùʾ£¬ÎªÊ²Ã´ÔËÐкóͼƬ¼ýÍ·ËùÖ¸µÄ¡°0¡±»¹ÔÚ£¿Õâ¸ú¡°1030 FORMAT ('0','Regression coefficients for the least-squares line:',&
/,1x,'slope(m)=',F12.3,&
/,1x,'Intercept(b)=',F12.3,&
/,1X,'No of points=',I12)¡±Õâ¸öÓï¾äµÄÒâ˼²»·ûºÏ°¡£¡
²»¶®£¬´Í½Ì£¡ÎÒÓõÄCVF6.6µÄ±àÒëÆ÷£¡
![Êä³ö¸ñʽ]()
1.jpg |