c *********************************************************************** subroutine trucodiag(a,b,c,d,e,n) c inputs: matrices b,c,d,e c output: matriz diagonal a c Operacion a realizar: a = b * c^(-1) * d + e c La matriz c va a ser invertida c Todas las matrices de entrada son diagonales excepto b c Aprovechamos esa condicion para invertir c, acelerar el calculo, y c ademas, para forzar que a sea diagonal c jul 2011 malv+fgg c *********************************************************************** real*8 a(n,n),b(n,n),c(n,n),d(n,n),e(n,n), sum integer n,i,j,k do 1,i=2,n-1 sum=0.0d0 do 2,j=2,n-1 sum=sum+ (b(i,j)) * (d(j,j)/c(j,j)) 2 continue a(i,i) = sum + e(i,i) 1 continue do k=1,n a(n,k) = 0.0d0 a(1,k) = 0.0d0 a(k,1) = 0.0d0 a(k,n) = 0.0d0 end do return end