test1.f90 Source File


This file depends on

sourcefile~~test1.f90~~EfferentGraph sourcefile~test1.f90 test1.f90 sourcefile~forinv.f90 forinv.f90 sourcefile~test1.f90->sourcefile~forinv.f90

Source Code

program test1

   ! This Fortran test code demonstrates the usage of the inv function to calculate the matrix inverse&
   ! and verifies the results by comparing them with expected values obtained from MATLAB.

   use kinds                ! Import the module 'kinds' for precision types
   use forinv, only: inv    ! Import only the 'inv' function from the 'forinv' module

   implicit none

   real(rk), dimension(4,3) :: A           ! Define a 4x3 matrix A
   real(rk), dimension(3,4) :: Ainv, AinvM ! Define matrices Ainv and AinvM
   real(rk)                 :: rel_err

   !===============================================================================
   ! Initialize matrix A with values
   A(1,1) = 0.814723686393179_rk;  A(1,2) = 0.632359246225410_rk ;  A(1,3) = 0.957506835434298_rk
   A(2,1) = 0.905791937075619_rk;  A(2,2) = 0.0975404049994095_rk;  A(2,3) = 0.964888535199277_rk
   A(3,1) = 0.126986816293506_rk;  A(3,2) = 0.278498218867048_rk ;  A(3,3) = 0.157613081677548_rk
   A(4,1) = 0.913375856139019_rk;  A(4,2) = 0.546881519204984_rk ;  A(4,3) = 0.970592781760616_rk
   !===============================================================================


   !===============================================================================
   ! Define expected matrix AinvM=inv(A) from MATLAB results
   AinvM(1,1) = -11.8748418966254_rk 
   AinvM(1,2) = -1.88508351433968_rk
   AinvM(1,3) = 1.37910840173057_rk 
   AinvM(1,4) = 13.3647936345720_rk
   AinvM(2,1) = -0.232262684677810_rk
   AinvM(2,2) = -1.81026044323168_rk
   AinvM(2,3) = 1.12793815267075_rk 
   AinvM(2,4) = 1.84558847033752_rk
   AinvM(3,1) = 11.2481704396877_rk  
   AinvM(3,2) = 2.87726069020400_rk 
   AinvM(3,3) = -1.70926059704099_rk
   AinvM(3,4) = -12.6490061903496_rk
   !===============================================================================


   !===============================================================================
   ! Calculate the matrix inverse of A using the 'inv' function
   Ainv = inv(A)
   !===============================================================================


   !===============================================================================
   ! Calculate the relative error between MATLAB and Fortran results
   rel_err = norm2(Ainv - AinvM)/norm2(AinvM)

   print *, "Relative error:", rel_err
   if (rel_err < 1e-13_rk) then
      print *, "Test 1 passed."
      print*,""
   else
      print *, "Test 1 failed!"
      print*,""
   end if
   !===============================================================================

end program test1