program f90_KAIKI implicit none integer::i,ndata,nt real(8),allocatable::datax(:),datay(:) real(8)::aa,bb,rr ndata=8 nt=ndata allocate(datax(1:ndata),datay(1:ndata)) do i=1,ndata datax(i)=dble(i) datay(i)=dble(2*i+2) end do call KAIKI(ndata,datax,datay,aa,bb,rr,nt) write(6,'("y=aa*x+bb")') write(6,'("aa=",e15.7)') aa write(6,'("bb=",e15.7)') bb write(6,'("rr=",e15.7)') rr stop contains subroutine KAIKI(ndata,datax,datay,aa,bb,rr,nt) integer,intent(in)::ndata,nt real(8),intent(in)::datax(1:nt),datay(1:nt) real(8),intent(out)::aa,bb,rr integer::i real(8)::x1,y1,x2,xy,xm,ym,c1,c2,c3 !回帰式:y=aa*x+bb x1=0.0D0 y1=0.0D0 x2=0.0D0 xy=0.0D0 do i=1,ndata x1=x1+datax(i) y1=y1+datay(i) x2=x2+datax(i)*datax(i) xy=xy+datax(i)*datay(i) end do xm=x1/dble(ndata) ym=y1/dble(ndata) aa=(dble(ndata)*xy-x1*y1)/(dble(ndata)*x2-x1*x1) bb=(x2*y1-x1*xy)/(dble(ndata)*x2-x1*x1) c1=0.0D0 c2=0.0D0 c3=0.0D0 do i=1,ndata c1=c1+(datax(i)-xm)*(datay(i)-ym) c2=c2+(datax(i)-xm)*(datax(i)-xm) c3=c3+(datay(i)-ym)*(datay(i)-ym) end do rr=c1/sqrt(c2*c3) end subroutine KAIKI end program f90_KAIKI