Trabajo Final Metodos Numericos (Crout-Jacobi)
Trabajo Final Metodos Numericos (Crout-Jacobi)
Trabajo Final Metodos Numericos (Crout-Jacobi)
Facultad de Ingeniería
Escuela Civil
Ejercicio 1:
Realice un programa en Fortran y Python , que obtenga las
soluciones de un sistema [A]*[X]=[B] ,considerando a la matriz
[A]nxn que es dE tipo banda pentadimensional (5 diagonales de
banda),mediante el método de Crout optimizado para este tipo de
matriz.
a) PROGRAMA EN FORTRAN.
program crout_optimizado
integer::n,i,j
real::a(100,100),u(100,100),l(100,100),b(100),x(100),z(100)
write(*,*)"metodo de crout para una matriz banda de ancho 5"
write(*,*)"ingrese la dimension de la matriz"
read(*,*)n
!entrada de datos
do i=1,n
if (i.le.3) then
do j=1,(2+i)
write(*,*)"ingrese el valor de la matriz "
read(*,*)a(i,j)
end do
else
if ((2+i).le.n) then
do j=i-2,2+i
write(*,*)"ingrese el valor de la matriz "
read(*,*)a(i,j)
end do
else
do j=i-2,n
write(*,*)"ingrese el valor de la matriz "
read(*,*)a(i,j)
end do
end if
end if
end do
if (abs (l(i,i)).lt.0.0001)then
write(*,*)"la factorizacion no se puede crear"
stop
end if
if (i+3.ge.n)then
do j=i+1,i+3
if (abs(i-j).eq.2)then
u(i,j)=a(i,j)/l(i,i)
l(j,i)=a(j,i)
else
k=i-1
sum1=0.0
sum2=0.0
sum1=sum1+l(i,k)*u(k,j)
u(i,j)=(a(i,j)-sum1)/l(i,i)
sum2=sum2+l(j,k)*u(k,i)
l(j,i)=(a(j,i)-sum2)
end if
end do
else
do j=i+1,n !para no tomar en cuenta los ceros y disminuir
operaciones
if (abs(i-j).eq.2)then
u(i,j)=a(i,j)/l(i,i)
l(j,i)=a(j,i)
else
k=i-1
sum1=0.0
sum2=0.0
sum1=sum1+l(i,k)*u(k,j)
u(i,j)=(a(i,j)-sum1)/l(i,i)
sum2=sum2+l(j,k)*u(k,i)
l(j,i)=(a(j,i)-sum2)
end if
end do
end if
end do
! para encontrar los valores de z y los valores solucion x
do i=1,n
x(i)=0.0
z(i)=0.0
end do
z(1)=b(1)/l(1,1)
z(2)=(b(2)-l(2,1)*z(1))/l(2,2)
do i=3,n
suma=0.0
do j=i-2,i
suma=suma+l(i,j)*z(j)
end do
z(i)=(b(i)-suma)/l(i,i)
end do
x(n-1)=z(n-1)
x(n-2)=z(n-2)-(u(n-2,n-1)*x(n-1))
do i=n-3,-1,-1
sum=0.0
do j=i+1,i+3
sum=sum+u(i,j)*x(j)
end do
x(i)=z(i)-sum
end do
write(*,*)"la matriz a factorizar es:"
do i=1,n
write(*,*)(a(i,j),j=1,n)
end do
write(*,*)"la matriz l es:"
do i=1,n
write(*,*)(l(i,j),j=1,n)
end do
write(*,*)"la matriz u es:"
do i=1,n
write(*,*)(u(i,j),j=1,n)
end do
write(*,*)"el valor de la incognita es: "
do i=1,n
write(*,*)x(i)
end do
read(*,*)
end program
b) PROGRAMA EN PYTHON.
from numpy import*
import numpy
import sys
El método de Crout es uno de los mejores métodos que se puede aplicar a matrices
generales, ya que mediante el mismo podemos esperar resultados bastante aproximados,
existe una pequeña variación en cuanto a los resultados, el programa creado fue optimizado
para la resolución de una matriz banda pentagonal sin hacer operaciones innecesarias.
Por otra parte, si hablamos del método iterativo para la resolución de sistemas lineales
existen dos que se parecen mucho, los cuales son: M. de Jacobi y M. Gauss-Seidel, los
cuales convergen rápidamente a la respuesta mediante k iteraciones, estos métodos son de
mucha utilidad para matrices con muchos ceros.
Bibliografia