!c Description:
!c   連立方程式の解の確からしさの検証
!c
!c Current Code Owner: 
!c   sugiyama@gfd-dennou.org
!c
!c Histry: 
!c   Version    Date          Comment
!c   -------    ----------    --------
!c   1.0        2003-03-17    作成
!c
!c Copyright (C) SUGIYAMA Ko-ichiro, 2003, All rights reserved

module interface_display_residual
  interface

     subroutine display_residual(A, B, X, RR)
       implicit none
       real(8), intent(in)  :: A(:,:)           !係数行列
       real(8), intent(in)  :: B(:)             !定数行列
       real(8), intent(in)  :: X(:)             !解行列
       real(8), intent(out) :: RR(:)            !残差
     end subroutine display_residual

  end interface
end module interface_display_residual




subroutine display_residual(A, B, X, RR)
  implicit none
  real(8), intent(in)  :: A(:,:)           !係数行列
  real(8), intent(in)  :: B(:)             !定数行列
  real(8), intent(in)  :: X(:)             !解行列
  real(8), intent(out) :: RR(:)            !残差
  integer              :: N, J
  
  
!!!
!!!連立一次方程式の残差の計算
!!!
  N = size(A,1)
  do J = 1, N
     RR(J) = B(J) - dot_product(A(J,:N), X(:N))
  end do
  
  
!!!
!!! 残差等の基本統計量の表示
!!!
  write(*,100) 'サンプル数  :', N
  write(*,200) '残差の最大値:', maxval(RR)
  write(*,200) '残差の最小値:', minval(RR)
  write(*,200) '残差の平均値:', sum(RR)/N
  write(*,200) '残差の分散  :', (sum(RR**2 - sum(RR)**2/N))/N
100 format(16x, a, i15)
200 format(16x, a, es15.6)
  
end subroutine display_residual

