| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 
 | 
 
 
 
 
 
 
 
 
 
 
 program Cholesky_decomposition
 
 implicit none
 
 
 integer::i,j,k
 real(kind=8)::summ
 real(kind=8)::S(3,3)=(/ 1.0,1.0,1.0,1.0,5.0,3.0,1.0,3.0,11.0 /)
 real(kind=8)::L(3,3),L_inv(3,3),L_inv_T(3,3),S_inv(3,3)
 real(kind=8),intrinsic::sqrt,transpose,matmul
 
 write(*,*),"S matrix"
 write(*,"(3(f12.6,2x))"),S
 
 do i=1,3
 do j=1,3
 
 if(i>j)then
 summ=0.0
 do k=1,j-1
 summ=summ+L(i,k)*L(j,k)
 end do
 L(i,j)=(S(i,j)-summ)/L(j,j)
 elseif(i==j)then
 summ=0.0
 do k=1,i-1
 summ=summ+L(i,k)**2
 end do
 L(i,j)=sqrt(S(i,j)-summ)
 else
 L(i,j)=0.0
 end if
 
 
 end do
 end do
 write(*,*)"L matrix"
 write(*,"(3(f12.6,2x))"),((L(j,i),i=1,3),j=1,3)
 
 
 do i=1,3
 do j=1,3
 if(i==j)then
 L_inv(i,j)=1/L(i,j)
 elseif(i>j)then
 summ=0.0
 do k=1,i-1
 summ=summ+L(i,k)*L_inv(k,j)
 end do
 L_inv(i,j)=-1*summ/L(i,i)
 else
 L_inv(i,j)=0.0
 end if
 end do
 end do
 write(*,*)"L_inv matrix"
 write(*,"(3(f12.6,2x))"),((L_inv(j,i),i=1,3),j=1,3)
 L_inv_T=transpose(L_inv)
 S_inv=matmul(L_inv_T,L_inv)
 write(*,*)"S_inv matrix"
 write(*,"(3(f12.6,2x))"),((S_inv(j,i),i=1,3),j=1,3)
 end program Cholesky_decomposition
 
 
 |