ANALISIS NUMERICO
Alumno :
Profesor:
ÍNDICE
1. Sistemas de Ecuaciones Lineales
2.1. Introducción
2.2 Eliminación de Gauss
2.3. Descomposición LU
3. Valores Característicos
4.1. Introducción
4.2. Forma Estándar del Problema de Valores Característicos
4.2.1 Método de Jacobi
4.2.2 Método QR (vía Householder)
4.3 Forma Generalizada del Problema de Valores Característicos
4.3.1 Método de Jacobi Generalizado
4. Integración Numérica
6.1. La Cuadratura de Gauss
Bibliografía
1.1. Introducción
Uno de los problemas mas comunes a solucionar en la programación de métodos
para el análisis numérico es el de resolver el sistema de ecuaciones lineales,
sistemas que representan cualquier fenómeno físico, y cuya aplicación en las
ciencias e ingeniería es muy amplia. Partimos de un conjunto de ecuaciones
lineales que se puede ordenar de la siguiente forma;
Donde aj* representa el j-esimo renglón de la matriz [A], osea la j-esima ecuación
lineal del sistema. Un nuevo sistema equivalente de ecuaciones puede ser
formado mediante la secuencia de operaciones elementales aplicadas al sistema
inicial. Estas operaciones elementales sobre las ecuaciones se numeran a
continuación:
1. Un Intercambio de dos filas o ecuaciones
1.3. Descomposición LU
Las dos operaciones utilizadas para reducir la matriz [A] a una matriz triangular
superior pueden concebirse como el resultado de una premultiplicacion de
matrices especificas. Extrayendo un múltiplo lji de la fila i y la columna j, donde j >
i, es el resultado de premultiplicar la matriz [A] por ;
Entonces
Obtendríamos
Donde la inversa de Mij puede mirarse fácilmente por ser una matriz triangular
Descomposición de Cholesky
Cualquier matriz cuadrada A con pivotes no nulos puede ser escrita como el
producto de una matriz triangular inferior L y una matriz triangular superior U; esto
recibe el nombre de factorización LU como se describió con anterioridad. Sin
embargo, si A es simétrica y definida positiva, se pueden escoger los factores
tales que U es la transpuesta de L, y esto se llama la descomposición o
factorización de Cholesky. Tanto la descomposición LU como la descomposición
de Cholesky son usadas para resolver sistemas de ecuaciones lineales. Cuando
es aplicable, la descomposición de Cholesky es dos veces más eficiente que la
descomposición LU.
T: V→W
Para estas funciones se utiliza la notación estándar de ellas. Por ejemplo, V se
llama dominio de T. Si v esta en w de modo que
F(v)=w
Entonces w se llama imagen de v bajo T. El conjunto de todas las imágenes de
los vectores en V se llama contradominio de T y el conjunto de todos los v en V
tales que T(v)=w se llama preimagen de w.
1. T(u+v)=T(u) + T(v)
2. T(cu)=CT(u)
Se dice que una transformación lineal conserva operaciones por que se obtiene el
miemo resultado si las operaciones de suma y multimplicacion escalar se efectúen
antes y después de la transformación lineal.
Una transformación lineal puede estar definida por una matriz, de la siguiente
forma
podemos hacer que el coeficiente de la matriz transformada ( [B] ) bjl sea igual a
cero, lo que es conveniente cuando se busca hacer cero los coeficientes que se
encuentran fuera de la diagonal principal, es decir, cuando se busca diagonalizar
una matriz.
Ahora podemos usar H para eliminar todos los coeficientes que esta debajo el
pivote ail.
2.7. Factorización QR
A menudo es útil representar una matriz A en una forma factorizada
[A] = [B][C]
A = Q1R1
donde Q1 es una matriz n × m cuyas columnas son ortonormales. Esta forma es
llamado QR "skinny" Se usa más comúnmente que uno con Q cuadrado.
Tras repetir el proceso t veces nosotros, donde t es el valor menor entre m-1 y n
(dependiendo la forma de la matriz), obtenemos una matriz [R] triangular superior
𝑯𝒏 ∗ 𝑯𝒏−𝟏 … … ∗ 𝑯𝟏 ∗ 𝑨 = [𝑹]
𝑯𝒏 ∗ 𝑯𝒏−𝟏 … … ∗ 𝑯𝟏 = [𝑸]
3. Valores Característicos
3.1. Introducción
El problema de valores característicos se puede plantear de la siguiente forma. Si
A es una matriz nxn, ¿existen vectores X diferentes de cero en Rn tales que AX
sea un múltiplo escalar de X? El escalar denotado por λ (lambda), se llama valor
característico de la matriz A, y el vector característico X diferente de cero se llama
vector característico de A correspondiente a λ.
Sea Y=AX, donde A=[aij ] , (i,j=1,2…,n),es una transformación lineal definida sobre
Rn. En general, la transformación convierte un vector X=[X1 , X2, …….Xn ] en otro
Y=[Y1 , Y2, …….Yn ], relacionado con el vector X por dicha transformación. Se
tratará en lo siguiente, la posibilidad de que ciertos vectores X se transformen en
λX, siendo λ un escalar perteneciente a Rn.
Todo vector X que se convierte mediante dicha transformación en el vector λ{X},
es decir todo vector diferente de cero tal que:
[A] {X} = λ {X}
Se denominará como un vector invariante respecto a la transformación (vector
característico).
A = QCQ-1
ó
C = Q-1AQ
donde C es diagonal. Recordemos que las matrices semejantes tienen los mismos
valores propios.
Las matrices de transición para llegar a la matriz diagonal semejante son las
matrices de rotación de Givens o de rotación de Jacobi que se discutieron con
anterioridad. La forma general de estas matrices ortogonales será;
Premultiplicando una matriz [A] por QT tiene el efecto de reemplazar las filas i y j
por una combinación lineal de el renglón original i y j y como se describió con
anterioridad c y s pueden ser escogidos de tal manera que vuelvan cero el termino
en la posición (i,j) de [A]. a pesar de esto [A] conservara sus valores propios,
estamos forzados a postmultiplicar por Qij, con lo cual conseguiremos se cambien
las columnas i y j, y la postmultiplicacion provocara normalmente que el elemento
(aji) se vuelva cero. La transformación de Jacobi puede ser representeda por
A pesar que todos los elementos in lalas filas i y j, asi como las columnas i , j
serian modificadas por la transformación, nosotros debemos estar interesados
principalmente en los nuevos valores Bji=Bij
Así, podemos obtener los valores específicos para s y c y los cuales también
satisfacen s²+c²=1
Para bij =0
Ahora, solamente las filas i y j, asi como las columnas i y j de [A] cambiaran
durante la transformación de Jacobi; aii y ajj serán los únicos coeficientes de la
diagonal que cambiaran. De esta forma
después de k iteraciones.
Formalizando lo anterior , si a cada paso o transformación de Jacobi el elemento a
convertir en cero satisface
Se satisface en aproximadamente
Iteraciones.
Después de completadas las iteraciones tendremos una matriz ortogonal Q, que
es ortogonal y la cual es igual al producto de todas las matrices de transformación
aplicadas a [A] , de igual forma obtenemos una matriz [D] que es diagonal y
semejante a [A].
3.3. Método de QR
El algoritmo más común para extraer valores propios ha demostrado ser el método
QR. Mientras que el método de potencia y el método de Jacobi requieren matrices
diagonalizables, esto restringe su uso práctico a matrices simétricas, el método
QR puede ser utilizado para matrices no simétricas. Es más simple para matrices
simétricas, porque los valores propios son reales.
Además, para matrices simétricas el almacenamiento en la computadora es
menor, los cálculos son menos y algunas transformaciones son particularmente
simples. El método QR requiere que la matriz primero se transforme en la forma
de Hessenberg superior. Una matriz se puede reducir a la forma de Hessenberg
en un número finito de transformaciones semejantes ,usando las transformaciones
ortogonales que se han descrito con anterioridad, ya sea; reflexiones de
Householder o rotaciones de Givens. La forma de Hessenberg para una matriz
simétrica es tridiagonal. La forma Hessenbergpermite un gran ahorro en los
cálculos posteriores, incluso para matrices no simétricas.
Uno de los métodos mas populares y funcional para encontrar los valores
caracteristicos de una matris real general es el método QR [Francis 1967]. Para
hacer una iteración del método QR, primero se reduce [A]HESS a una matriz
triangular superior usando transformaciones ortogonales, lo que significa
premultiplicar la matriz [A]HESS por una matriz ortogonal QT(=Q-1) , de tal forma
que Q-1A=R es una matriz triangular superior, posteriormente postmultiplicamos
por la matriz Q y la matriz vuelve a la forma de Hessemberg. La postmultiplicacion
destruye la estructura triangular superior creada por la premultiplicacion. En el
caso de matrices simétricas, donde notros iniciamos con una matriz tridiagonal la
premultiplicacion elimina la subdiagonal pero agrega una diagonal superior , la
postmultiplicacion regresa a la matriz QT [A]HESS a la forma tridiagonal.
Los términos que se encuentran fuera de la diagonal principal las dos matrices que
conforman la ecuación anterior son igualados mediante
Observaciones
1. Las ecuaciones para Ɵ₁ y Ɵ₂ han sido desarrolladas para el caso donde [M]
es positiva, llena y en banda, y esto puede demostrar que G4 siempre es
diferente de 0
2. El método generalizado de Jacobi puede también ser adoptado para el caso
donde [M] es una matriz diagonal con o sin algún cero en la diagonal.
3. Asumiendo como l la ultima iteración , entonces la convergencia archivada
si ;
4. Integracion Numerica
FIGURA 22.5
curva. Al ubicar esos puntos en forma inteligente, definiríamos una línea recta que
equilibrara los errores negativo y positivo. Así que, como en la figura 22.5b,
llegaríamos a una mejor estimación de la integral. Cuadratura de Gauss es el
nombre de una clase de técnicas para realizar tal estrategia. Las fórmulas
particulares de cuadratura de Gauss descritas en esta sección se denominan
fórmulas de Gauss-Legendre. Antes de describir el procedimiento, mostraremos
que las fórmulas de integración numérica, como la regla del trapecio, pueden
obtenerse usando el método de coeficientes indeterminados. Este método se
empleará después para desarrollar las fórmulas de Gauss-Legendre.
Y
(𝑏−𝑎)/2
𝑏−𝑎 𝑏−𝑎
−𝑐0 + 𝑐1 =∫ 𝑥 𝑑𝑥
2 2 −(𝑏−𝑎)/2
FIGURA 22.6
y
𝑏−𝑎 𝑏−𝑎
−𝑐0 + 𝑐0 =0
2 2
Éstas son dos ecuaciones con dos incógnitas que se resuelven para encontrar
𝑏−𝑎
𝑐0 = 𝑐1 =
2
que, al sustituirse en la ecuación (22.11), da
𝑏−𝑎 𝑏−𝑎
𝐼= 𝑓(𝑎) + 𝑓(𝑏)
2 2
que es equivalente a la regla del trapecio.
Desarrollo de la fórmula de Gauss-Legendre de dos puntos
Así como en el caso anterior para la obtención de la regla del trapecio, el objetivo
de la cuadratura de Gauss es determinar los coeficientes de una ecuación de la
forma
𝐼 ≅ 𝑐0 𝑓(𝑥0 ) + 𝑐1 𝑓(𝑥1 )
donde las c = los coeficientes desconocidos. Sin embargo, a diferencia de la regla
del trapecio que utiliza puntos extremos fijos a y b, los argumentos de la función x0
y x1 no están fijos en los extremos, sino que son incógnitas (figura 22.7). De esta
manera, ahora se tienen cuatro incógnitas que deben evaluarse y, en
consecuencia, se requieren cuatro condiciones para determinarlas con exactitud.
Así, como con la regla del trapecio, es posible obtener dos de esas condiciones al
suponer que la ecuación (22.12) ajusta con exactitud la integral de una constante y
de
Representación gráfica de las variables desconocidas x0 y x1 para la integración
por medio de la cuadratura de Gauss.
FIGURA 22.7
una función lineal. Después, para tener las otras dos condiciones, sólo se ampliará
este razonamiento al suponer que también ajusta la integral de una función
parabólica (y = x2) y de una cúbica (y = x3). Al hacerlo, se determinan las cuatro
incógnitas y además se obtiene una fórmula de integración lineal de dos puntos
que es exacta para cúbicas. Las cuatro ecuaciones que habrá que resolver son:
1
𝑐0 𝑓(𝑥0 ) + 𝑐1 𝑓(𝑥1 ) = ∫−1 1 𝑑𝑥 = 2 EQ.1
1
𝑐0 𝑓(𝑥0 ) + 𝑐1 𝑓(𝑥1 ) = ∫−1 𝑥 𝑑𝑥 = 0 EQ.2
1 2
𝑐0 𝑓(𝑥0 ) + 𝑐1 𝑓(𝑥1 ) = ∫−1 𝑥 2 𝑑𝑥 = EQ.3
3
1
𝑐0 𝑓(𝑥0 ) + 𝑐1 𝑓(𝑥1 ) = ∫−1 𝑥 3 𝑑𝑥 = 0EQ.4
𝑏 = 𝑎0 + 𝑎1 (−1)
Las ecuaciones anteriores podrán resolverse simultáneamente para obtener
𝑏+𝑎
𝑎0 =
2
y
𝑏−𝑎
𝑎1 =
2
que se sustituye en la ecuación [𝑥 = 𝑎0 + 𝑎1 𝑥𝑑 ] con el siguiente resultado:
(𝑏 + 𝑎) + (𝑏 − 𝑎)𝑥𝑑
𝑥=
2
Esta ecuación se diferencia para dar
𝑏−𝑎
𝑑𝑥 = 𝑑𝑥𝑑
2
Las dos ecuaciones anteriores pueden sustituirse ahora por x y dx,
respectivamente, en la ecuación que se habrá de integrar. Tales sustituciones
efectivamente transforman el intervalo de integración sin cambiar el valor de la
integral. El siguiente ejemplo ilustra cómo se hace esto en la práctica.
22.3.3 Fórmulas con más puntos
Aparte de la fórmula de dos puntos descrita en la sección anterior, se pueden
desarrollar versiones con más
puntos en la forma general
𝐼 ≅ 𝑐0 𝑓(𝑥0 ) + 𝑐1 𝑓(𝑥1 ) + ⋯
+ 𝑐𝑛−1 𝑓(𝑥𝑛−1 )
donde n = número de puntos.
Los valores de las c y las x para
fórmulas de hasta seis puntos
se resumen en la tabla 22.1.
TABLA 22.1 Factores de
ponderación c y argumentos de
la función x usados en las
fórmulas de Gauss-Legendre.
ELIMINACIÓN DE GAUSS
program EDG
implicit none
! Variables
REAL, DIMENSION (:,:),ALLOCATABLE :: A
REAL, DIMENSION (:),ALLOCATABLE :: B
REAL, DIMENSION (:),ALLOCATABLE :: X
INTEGER, DIMENSION (:), ALLOCATABLE :: IE
REAL :: MA,CRM,CRB,PIV,SUMA
INTEGER :: n
INTEGER :: i,j,k,l,CRIE
WRITE (*,*) '***************************************************** '
WRITE (*,*) '*Velazquez Cerezo Jaime Alejandro'
WRITE (*,*) '*Eliminacion de Gauss'
WRITE (*,*) '*Programa para solucionar un sistema de ecuaciones del tipo'
WRITE (*,*) ' [A]{x}={b} de dimensiones n x n , [ A ]nxn'
WRITE (*,*) '***************************************************** '
WRITE (*,*) ' '
WRITE (*,*) 'Introducir la Dimension del Sistema "n"'
WRITE (*,*) ' '
READ (*,*) n
WRITE (*,*) ' '
ALLOCATE (A(n,n))
ALLOCATE (B(n))
ALLOCATE (X(n))
ALLOCATE (IE(n))
DO i=1,n
WRITE (*,*) 'Introducir Coeficientes "a" de Ecuacion',i
DO j=1,n
READ (*,*) A(i,j)
END DO
END DO
WRITE (*,*) 'Introducir Vector de Terminos Independientes { B }'
DO i=1,n
READ (*,*) B(i)
END DO
WRITE (*,*) ' '
WRITE (*,*) '[ A ] ='
DO i=1,n
WRITE (*,*) A (i,:)
END DO
WRITE (*,*) ' '
WRITE (*,*) '{ B } ='
DO i=1,n
WRITE (*,*) B (i)
END DO
DO i=1,n
IE(i)=i
END DO
!GAUSS
DO i=1,n-1
MA= ABS(A(i,i))
l=i
DO j=i+1,n
IF (ABS(A(j,i)).GT.MA) THEN
MA=ABS(A(j,i))
l=j
END IF
END DO
!IF
DO k=1,n
CRM=A(l,k)
A(l,k)=A(i,k)
A(i,k)=CRM
END DO
CRB=B(l)
B(l)=B(i)
B(i)=CRB
CRIE=IE(l)
IE(l)=IE(i)
IE(i)=CRIE
DO j=i+1,n
PIV=A(j,i)/A(i,i)
DO k=1,n
A(j,k)=A(j,k)-PIV*A(i,k)
END DO
B(j)=B(j)-PIV*B(i)
END DO
END DO
!
X(n)=B(n)/A(n,n)
DO i=n-1,1,-1
SUMA=0.0
DO j=i+1,n
SUMA=SUMA+A(i,j)*X(j)
END DO
X(i)=(B(i)-SUMA)/A(i,i)
END DO
DO i=1,n
WRITE (*,*) IE (i)
END DO
DO i=1,n
WRITE (*,*) 'X',i,'=',X (i)
END DO
Descomposición LU
program DescLU
implicit none
! Variables
REAL, DIMENSION (:,:),ALLOCATABLE :: A
REAL, DIMENSION (:,:),ALLOCATABLE :: LO
REAL, DIMENSION (:),ALLOCATABLE :: B
REAL, DIMENSION (:),ALLOCATABLE :: X
INTEGER, DIMENSION (:), ALLOCATABLE :: IE
REAL :: MA,CRM,CRB,PIV,SUMA
INTEGER :: n
INTEGER :: i,j,k,l,CRIE
WRITE (*,*) '***************************************************** '
WRITE (*,*) '*Velazquez Cerezo Jaime Alejandro'
WRITE (*,*) '*Descomposicion LU'
WRITE (*,*) '*Programa factorizar una Matriz [A] en sus componentes'
WRITE (*,*) ' L=(matriz triangular inferior) U=Matriz triangular superior '
WRITE (*,*) '[ A ]= [ L ][ U ]'
WRITE (*,*) '***************************************************** '
WRITE (*,*) ' '
WRITE (*,*) 'Introducir la Dimension del Sistema "n"'
WRITE (*,*) ' '
READ (*,*) n
WRITE (*,*) ' '
ALLOCATE (A(n,n))
ALLOCATE (LO(n,n))
ALLOCATE (B(n))
ALLOCATE (X(n))
ALLOCATE (IE(n))
DO i=1,n
WRITE (*,*) 'Introducir Coeficientes de Escuacion',i
DO j=1,n
READ (*,*) A(i,j)
END DO
END DO
DO i=1,n
DO j=1,n
LO(i,j)=0
END DO
END DO
CRB=B(l)
B(l)=B(i)
B(i)=CRB
CRIE=IE(l)
IE(l)=IE(i)
IE(i)=CRIE
DO j=i+1,n
PIV=A(j,i)/A(i,i)
LO(j,i)=PIV
DO k=1,n
A(j,k)=A(j,k)-PIV*A(i,k)
END DO
B(j)=B(j)-PIV*B(i)
END DO
DO k=1,n
LO(k,k)=1
END DO
END DO
X(n)=B(n)/A(n,n)
DO i=n-1,1,-1
SUMA=0.0
DO j=i+1,n
SUMA=SUMA+A(i,j)*X(j)
END DO
X(i)=(B(i)-SUMA)/A(i,i)
END DO
program hous
implicit none
! Variables
REAL, DIMENSION (:,:),ALLOCATABLE :: A
REAL, DIMENSION (:,:),ALLOCATABLE :: AO
REAL, DIMENSION (:,:),ALLOCATABLE :: R
REAL, DIMENSION (:),ALLOCATABLE :: W
REAL, DIMENSION (:),ALLOCATABLE :: U
REAL, DIMENSION (:,:),ALLOCATABLE :: UU
REAL, DIMENSION (:,:),ALLOCATABLE :: P
REAL, DIMENSION (:,:),ALLOCATABLE :: PM
REAL, DIMENSION (:,:),ALLOCATABLE :: QAQ
REAL :: s,norm,UUE
INTEGER :: n
INTEGER :: i,j,k,l
WRITE (*,*) '***************************************************** '
WRITE (*,*) '*Velazquez Cerezo Jaime Alejandro'
WRITE (*,*) '*Factorizacion QR via Householder'
WRITE (*,*) '*Programa para factorizar una matriz [A ]'
WRITE (*,*) ' en un matriz ortogonal Q y una matris triangular'
WRITE (*,*) ' superior emplendo la Reflexion de Householder '
WRITE (*,*) '***************************************************** '
WRITE (*,*) ' '
WRITE (*,*) 'Introducir la Dimension de A "n"'
WRITE (*,*) ' '
READ (*,*) n
DO i=1,n
DO j=1,n
AO(i,j)=A(i,j)
END DO
END DO
DO j=1,n
DO k=1,n
if (j.EQ.k) then
PM(j,k)=1
else
PM(j,k)=0
end if
END DO
END DO
!Programa
do i=1,n-1
W=A(:,i)
s=0
do k=i,n
s=W(k)**2+s
end do
norm=sqrt(s)
W(i)=W(i)-norm
do j=1,n
U(j)=W(j)
end do
UUE=0
do j=i,n
do k=i,n
UU(j,k)=U(j)*U(k)
end do
UUE=UUE+U(j)**2
end do
do j=i,n
do k=i,n
if (j.EQ.k) then
P(j,k)=1-(2*UU(j,k)/UUE)
else
P(j,k)=-2/UUE*UU(j,k)
end if
end do
end do
A=matmul(P,A)
!reset P y acumular en PM
PM=matmul(PM,P)
DO j=1,n
DO k=1,n
if (j.EQ.k) then
P(j,k)=1
else
P(j,k)=0
end if
END DO
END DO
end do
WRITE (*,*) ' '
R=matmul(transpose(PM),AO)
!check
WRITE (*,*) ' '
WRITE (*,*) '[ Q ]'
WRITE (*,*) ' '
DO i=1,n
WRITE (*,*) PM(i,:)
END DO
WRITE (*,*) ' '
WRITE (*,*) '[ R ]'
WRITE (*,*) ' '
DO i=1,n
WRITE (*,*) R(i,:)
END DO
!!! Transformacion QT*AQ
QAQ=matmul(R,PM)
WRITE (*,*) 'QAQ'
pause
end program hous
program HESSH
implicit none
! Variables
REAL, DIMENSION (:,:),ALLOCATABLE :: A
REAL, DIMENSION (:),ALLOCATABLE :: W
REAL, DIMENSION (:),ALLOCATABLE :: U
REAL, DIMENSION (:,:),ALLOCATABLE :: UU
REAL, DIMENSION (:,:),ALLOCATABLE :: P
REAL, DIMENSION (:,:),ALLOCATABLE :: PM
REAL :: s,norm,UUE
INTEGER :: n
INTEGER :: i,j,k,l
WRITE (*,*) '***************************************************** '
WRITE (*,*) '*Velazquez Cerezo Jaime Alejandro'
WRITE (*,*) '*Transformacion de [A]-->[HESS] via Householder'
WRITE (*,*) '*Programa transformar una Matriz [A] en la forma'
WRITE (*,*) ' Hessemberg Superior [HESS] '
WRITE (*,*) '***************************************************** '
WRITE (*,*) ' '
WRITE (*,*) 'Introducir la Dimension de A "n"'
WRITE (*,*) ' '
READ (*,*) n
WRITE (*,*) ' '
ALLOCATE (A(n,n))
ALLOCATE (UU(n,n))
ALLOCATE (W(n))
ALLOCATE (U(n))
ALLOCATE (P(n,n))
ALLOCATE (PM(n,n))
! Ensamble
DO i=1,n
WRITE (*,*) 'Introducir Coeficientes de Renglon',i
DO j=1,n
READ (*,*) A(i,j)
END DO
END DO
DO j=1,n
DO k=1,n
if (j.EQ.k) then
P(j,k)=1
else
P(j,k)=0
end if
END DO
END DO
DO j=1,n
DO k=1,n
if (j.EQ.k) then
PM(j,k)=1
else
PM(j,k)=0
end if
END DO
END DO
!Programa
do i=2,n-1
W=A(:,i-1)
s=0
do k=i,n
s=W(k)**2+s
end do
norm=sqrt(s)
W(i)=W(i)-norm
do j=1,n
U(j)=W(j)
end do
UUE=0
do j=i,n
do k=i,n
UU(j,k)=U(j)*U(k)
end do
UUE=UUE+U(j)**2
end do
do j=i,n
do k=i,n
P(j,k)=P(j,k)-(2*UU(j,k)/UUE)
end do
end do
A=matmul(TRANSPOSE(P),A)
A=matmul(A,P)
!reset P y acumular en PM
PM=matmul(PM,P)
DO j=1,n
DO k=1,n
if (j.EQ.k) then
P(j,k)=1
else
P(j,k)=0
end if
END DO
END DO
end do
!check
WRITE (*,*) '[ A ]--> [HESS]'
WRITE (*,*) ' '
DO i=1,n
WRITE (*,*) A(i,:)
END DO
pause
end program HESSH
implicit none
! Variables
REAL, DIMENSION (:,:),ALLOCATABLE :: A
REAL, DIMENSION (:,:),ALLOCATABLE :: X
REAL, DIMENSION (:),ALLOCATABLE :: VC
REAL :: EPS,AT,EK,ERRLIM,THRESH,BETA,FRACT,S,C,PIK,PJK,BKI,BKJ,XKI,XKJ
INTEGER :: n
INTEGER :: i,j,k,l
WRITE (*,*) '***************************************************** '
WRITE (*,*) '*Velazquez Cerezo Jaime Alejandro'
WRITE (*,*) '*Encontrar Valores y Vectores Caracteristicos del problema estandar'
WRITE (*,*) '*[A]{X}=LAMB{X} mediante el metodo de Jacobi'
WRITE (*,*) '***************************************************** '
WRITE (*,*) ' '
EK=0
DO i=1,n
DO j=1,n
IF (i.NE.j) EK = EK + A(i,j)**2
END DO
END DO
IF (EK.LE.ERRLIM) go to 50
THRESH=0.5*EK/n/(n-1)
DO WHILE (EK.GT.ERRLIM)
DO i=1,n-1
DO 35 j=i+1,n
if (A(j,i)**2.LE.THRESH) GO TO 35
EK=EK-2*A(j,i)**2
THRESH=0.5*EK/(n*(n-1))
BETA=(A(i,i)-A(j,j))/(2.*A(j,i))
FRACT=0.5*BETA/SQRT(1.0+BETA**2)
S=SQRT(MAX(0.5-FRACT,0.D0))
C=SQRT(MAX(0.5+FRACT,0.D0))
DO k=1,n
PIK=C*A(i,k)+S*A(j,k)
PJK=-S*A(i,k)+C*A(j,k)
A(i,k)=PIK
A(j,k)=PJK
END DO
DO k=1,n
BKI=C*A(k,i)+S*A(k,j)
BKJ=-S*A(k,i)+C*A(k,j)
A(k,i)=BKI
A(k,j)=BKJ
XKI=C*X(k,i)+S*X(k,j)
XKJ=-S*X(k,i)+C*X(k,j)
X(k,i)=XKI
X(k,j)=XKJ
END DO
IF (EK.LE.ERRLIM) go to 50
35 continue
END DO
END DO
50 continue
DO i=1,n
VC(i)=A(i,i)
END DO
program IQR2
implicit none
! Variables
REAL, DIMENSION (:,:),ALLOCATABLE :: A
REAL, DIMENSION (:),ALLOCATABLE :: W
REAL, DIMENSION (:),ALLOCATABLE :: U
COMPLEX, DIMENSION (:),ALLOCATABLE :: EIG
REAL, DIMENSION (:,:),ALLOCATABLE :: UU
REAL, DIMENSION (:,:),ALLOCATABLE :: P
REAL, DIMENSION (:,:),ALLOCATABLE :: PM
REAL, DIMENSION (:,:),ALLOCATABLE :: AHESS
REAL, DIMENSION (:,:),ALLOCATABLE :: QAQ !!
REAL, DIMENSION (:,:),ALLOCATABLE :: R !!
REAL, DIMENSION (:,:),ALLOCATABLE :: COMP !!
REAL :: s,norm,UUE,AMAX,EPS,ERRLIM,DISC,TERM
INTEGER :: n
INTEGER :: i,j,k,l,ITER,NITER
WRITE (*,*) '***************************************************** '
WRITE (*,*) '*Velazquez Cerezo Jaime Alejandro'
WRITE (*,*) '*Encontrar Valores y Vectores Caracteristicos del problema estandar'
WRITE (*,*) '*[A]{X}=LAMB{X} mediante el metodo de QR Para Matrices Simetricas o No
Simetricas'
WRITE (*,*) '***************************************************** '
WRITE (*,*) ' '
DO i=1,n
WRITE (*,*) 'Introducir Coeficientes de Renglon',i
DO j=1,n
READ (*,*) A(i,j)
END DO
END DO
DO j=1,n
DO k=1,n
if (j.EQ.k) then
P(j,k)=1
else
P(j,k)=0
end if
END DO
END DO
DO j=1,n
DO k=1,n
if (j.EQ.k) then
PM(j,k)=1
else
PM(j,k)=0
end if
END DO
END DO
!Programa
do i=2,n-1
W=A(:,i-1)
s=0
do k=i,n
s=W(k)**2+s
end do
norm=sqrt(s)
W(i)=W(i)-norm
do j=1,n
U(j)=W(j)
end do
UUE=0
do j=i,n
do k=i,n
UU(j,k)=U(j)*U(k)
end do
UUE=UUE+U(j)**2
end do
do j=i,n
do k=i,n
P(j,k)=P(j,k)-(2*UU(j,k)/UUE)
end do
end do
A=matmul(TRANSPOSE(P),A)
A=matmul(A,P)
!check
!reset P y acumular en PM
PM=matmul(PM,P)
DO j=1,n
DO k=1,n
if (j.EQ.k) then
P(j,k)=1
else
P(j,k)=0
end if
END DO
END DO
end do
WRITE (*,*) ' '
COMP=matmul(transpose(PM),PM)
DO i=1,n
DO j=1,n
AHESS(i,j)=A(i,j)
END DO
END DO
WRITE (*,*) ' '
WRITE (*,*) '[HESS]'
WRITE (*,*) ' '
DO i=1,n
WRITE (*,*) AHESS(i,:)
END DO
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
!HESSENBERG
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
!QR
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DO j=1,n
DO k=1,n
if (j.EQ.k) then
PM(j,k)=1
else
PM(j,k)=0
end if
END DO
END DO
NITER=1000*n
do ITER=1,NITER
!Programa
do i=1,n-1
W=A(:,i)
s=0
do k=i,n
s=W(k)**2+s
end do
norm=sqrt(s)
W(i)=W(i)-norm
do j=1,n
U(j)=W(j)
end do
UUE=0
do j=i,n
do k=i,n
UU(j,k)=U(j)*U(k)
end do
UUE=UUE+U(j)**2
end do
do j=i,n
do k=i,n
if (j.EQ.k) then
P(j,k)=1-(2*UU(j,k)/UUE)
else
P(j,k)=-2/UUE*UU(j,k)
end if
end do
end do
A=matmul(P,A)
!check
!reset P y acumular en PM
PM=matmul(PM,P)
DO j=1,n
DO k=1,n
if (j.EQ.k) then
P(j,k)=1
else
P(j,k)=0
end if
END DO
END DO
end do
!QAQ
R=matmul(transpose(PM),AHESS)
A=matmul(R,PM)
end do
WRITE (*,*) ' '
R=matmul(transpose(PM),AHESS)
COMP=matmul(transpose(PM),PM)
QAQ=matmul(R,PM)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
!QR
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!analisis
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!**EIGEN**
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DO i=1,n
DO j=1,n
A(i,j)=QAQ(i,j)
END DO
END DO
i=1
DO WHILE (i.LE.N-1)
IF(A(i+1,i).EQ.0.0)THEN
EIG(i)=A(i,i)
i=i+1
ELSE
DISC=(A(i,i)-A(i+1,i+1))**2+4.0*A(i,i+1)*A(i+1,i)
TERM=0.5*(A(i,i)+A(i+1,i+1))
IF (DISC.GE.0.0) THEN
EIG(i)=TERM+0.5*SQRT(DISC)
EIG(i+1)=TERM-0.5*SQRT(DISC)
ELSE
EIG(i)=TERM+0.5*SQRT(-DISC)*CMPLX(0.0,1.0)
EIG(i+1)=TERM-0.5*SQRT(-DISC)*CMPLX(0.0,1.0)
END IF
i=i+2
END IF
END DO
IF(i.EQ.n) EIG(n)=A(n,n)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!**EIGEN**
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!Resultado
WRITE (*,*) ' '
WRITE (*,*) 'QAQ'
WRITE (*,*) ' '
DO i=1,n
WRITE (*,*) QAQ(i,:)
END DO
pause
end program IQR2
program JacobiG2
implicit none
! Variables
REAL, DIMENSION (:,:),ALLOCATABLE :: A
REAL, DIMENSION (:,:),ALLOCATABLE :: B
REAL, DIMENSION (:,:),ALLOCATABLE :: X
REAL, DIMENSION (:),ALLOCATABLE :: LAMB
REAL, DIMENSION (:),ALLOCATABLE :: WO
REAL, DIMENSION (:),ALLOCATABLE :: AJI
REAL, DIMENSION (:),ALLOCATABLE :: BJI
REAL, DIMENSION (:),ALLOCATABLE :: NUX
PARAMETER RTOL=10**-12,NSMAX=15
REAL :: EPS,EPTOLA,EPTOLB,NSWEEP,T1,T2,G1,G2,G3,G4,BB
REAL :: ARSQ,SQAR,JM1,KP1,KM1,AK,BK,XJ,XK,JP1,TOL,DIF,EPSA,EPSB
REAL :: HAJI,HBJI,HAIJ,HBIJ,XIJ,NUXS2
INTEGER :: n,NR
INTEGER :: i,j,k,l,jj
WRITE (*,*) '***************************************************** '
WRITE (*,*) '*Velazquez Cerezo Jaime Alejandro'
WRITE (*,*) '*Encontrar Valores y Vectores Caracteristicos del problema
Generalizado'
WRITE (*,*) '*[A]{X}=LAMB[B]{X} mediante el metodo de Jacobi Generalizado'
WRITE (*,*) '***************************************************** '
WRITE (*,*) ' '
WRITE (*,*) 'Introducir la Dimension de A "n"'
WRITE (*,*) ' '
READ (*,*) n
WRITE (*,*) ' '
ALLOCATE (A(n,n))
ALLOCATE (B(n,n))
ALLOCATE (X(n,n))
ALLOCATE (LAMB(n))
ALLOCATE (WO(n))
ALLOCATE (AJI(n))
ALLOCATE (BJI(n))
ALLOCATE (NUX(n))
! Ensamble
DO i=1,n
! Valores Iniciales
DO i=1,n
WO(i)=A(i,i)/B(i,i)
LAMB(i)=WO(i)
END DO
DO i=1,n
DO j=1,n
X(i,j)=0
END DO
X(i,i)=1
END DO
! #Ciclo
NR=n-1
NSWEEP=0
25 NSWEEP=NSWEEP+1
EPS=(0.01**NSWEEP)**2
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DO 120 j=1,NR
DO 121 k=j+1,n
EPTOLA=A(j,k)**2/(A(j,j)*A(k,k))
EPTOLB=B(j,k)**2/(B(j,j)*B(k,k))
if ((EPTOLA.LT.EPS).AND.(EPTOLB.LT.EPS)) GO TO 120
G1=A(j,j)*B(j,k)-B(j,j)*A(j,k) !AA
G2=A(k,k)*B(j,k)-B(k,k)*A(j,k) !CC
G3=A(j,j)*B(k,k)-A(k,k)*B(j,j) !BB
ARSQ=(0.5*G3)**2+G1*G2
SQAR=SQRT(ARSQ)
40 IF(G3.LT.0.0) G4=G3/2-SQAR
IF(G3.GE.0.0) G4=G3/2+SQAR
IF(G4.EQ.0.0) THEN
T1=0 !Alpha
T2=-A(j,k)/A(k,k) !Gama
ELSE
T1=G2/G4 !Alpha
T2=-G1/G4 !Gama
END IF
50 DO 65 i=1,n
IF(i.GT.k) GO TO 63
AJI(i)=A(j,i)
BJI(i)=B(j,i)
A(j,i)=A(j,i)+T2*A(i,k)
B(j,i)=B(j,i)+T2*B(i,k)
IF (i.EQ.k) A(k,i)=AJI(i)*T1+A(k,i)
IF (i.EQ.k) B(k,i)=BJI(i)*T1+B(k,i)
GO TO 65
63 HAJI=A(j,i)
HBJI=B(j,i)
A(j,i)=A(j,i)+A(k,i)*T2
B(j,i)=B(j,i)+B(k,i)*T2
A(k,i)=HAJI*T1+A(k,i)
B(k,i)=HBJI*T1+B(k,i)
65 END DO
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
AJI(k)=AJI(j)*T1+AJI(k)
BJI(k)=BJI(j)*T1+BJI(k)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
75 DO 80 i=1,k
IF(i.LE.j) GO TO 78
A(i,k)=AJI(i)*T1+A(i,k)
B(i,k)=BJI(i)*T1+B(i,k)
GO TO 80
78 HAIJ=A(i,j)
HBIJ=B(i,j)
A(i,j)=A(i,j)+A(i,k)*T2
B(i,j)=B(i,j)+B(i,k)*T2
A(i,k)=HAIJ*T1+A(i,k)
B(i,k)=HBIJ*T1+B(i,k)
80 END DO
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DO 110 i=1,n
XIJ=X(i,j)
X(i,j)=X(i,j)+X(i,k)*T2
X(i,k)=XIJ*T1+X(i,k)
110 END DO
121 END DO
120 END DO
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DO 130 i=1,n
LAMB(i)=A(i,i)/B(i,i)
130 END DO
DO 140 i=1,n
TOL=RTOL
DIF=ABS((LAMB(i)-WO(i))/WO(i))
IF (DIF.GT.TOL) GO TO 160
140 END DO
EPS=RTOL**2
DO 150 j=1,n-1
DO k=j+1,n
EPSA=(A(j,k)*A(j,k))/(A(j,j)*A(k,k))
EPSB=(B(j,k)*B(j,k))/(B(j,j)*B(k,K))
IF ((ABS(EPSA).GE.EPS).AND.(ABS(EPSB).GE.EPS)) GO TO 160
END DO
150 END DO
GO TO 300
IF(NSWEEP.LT.NSMAX) GO TO 25
300 continue
DO i=1,n
DO j=1,n
A(j,i)=A(i,j)
B(j,i)=B(i,j)
END DO
END DO
DO i=1,n
NUXS2=0
DO j=1,n
NUXS2=NUXS2+X(j,i)**2
END DO
NUX(i)=SQRT(NUXS2)
END DO
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WRITE(*,*) ' '
WRITE(*,*) ' Valores Caracteristicos'
WRITE(*,*) ' '
WRITE(*,*) LAMB
WRITE(*,*) ' '
WRITE(*,*) ' Vectores Caracteristicos'
WRITE(*,*) ' '
DO i=1,n
WRITE(*,*) X(i,:)
END DO
WRITE(*,*) ' '
WRITE(*,*) ' Matriz [A]'
WRITE(*,*) ' '
DO i=1,n
WRITE(*,*) A(i,:)
END DO
WRITE(*,*) ' '
program EDPH
implicit none
! Variables
REAL, DIMENSION (:,:),ALLOCATABLE :: W
REAL, DIMENSION (:),ALLOCATABLE :: X
REAL, DIMENSION (:),ALLOCATABLE :: FX
REAL, DIMENSION (:),ALLOCATABLE :: ti
REAL :: L,T,ALPHA,h,k,LAMB
INTEGER :: m,n
INTEGER :: i,j
WRITE (*,*) '***************************************************** '
WRITE (*,*) '*Velazquez Cerezo Jaime Alejandro'
WRITE (*,*) '*Ecuaciones Diferenciales Hiperbolicas'
WRITE (*,*) '*Programa para dar solucion numerica a la ecuacion'
WRITE (*,*) ' de la Onda para ;'
WRITE (*,*) ' u(O, t) = u( l, t) =O, para O< t,'
WRITE (*,*) ' u(x, O) = sen(PI*X) , 0<x<L , g(x) =0 0<x<L '
WRITE (*,*) '***************************************************** '
WRITE (*,*) ' '
WRITE (*,*) 'Introducir el valor del extremo "L"'
WRITE (*,*) ' '
READ (*,*) L
WRITE (*,*) ' '
WRITE (*,*) 'Introducir el valor del tiempo maximo "T"'
WRITE (*,*) ' '
READ (*,*) T
WRITE (*,*) ' '
WRITE (*,*) 'Introducir el valor de la constante "ALPHA"'
WRITE (*,*) ' '
READ (*,*) ALPHA
WRITE (*,*) ' '
WRITE (*,*) 'Introducir la dimension "m"'
WRITE (*,*) ' '
READ (*,*) m
WRITE (*,*) ' '
WRITE (*,*) 'Introducir la dimension "n"'
WRITE (*,*) ' '
READ (*,*) n
WRITE (*,*) ' '
ALLOCATE (W(m+1,n+1))
ALLOCATE (X(m+1))
ALLOCATE (FX(m+1))
ALLOCATE (ti(n+1))
h=L/(m)
k=T/(n)
LAMB=k*ALPHA/h
!Llenar X
X(1)=0
DO i=1,m+1
X(i)=(i-1)*h
END DO
!Llenar FX
DO i=1,m+1
FX(i)=sin(3.1416*X(i))
END DO
DO i=1,m+1
write(*,*) X(i)
END DO
DO i=1,m+1
write(*,*) FX(i)
END DO
DO j=2,n+1
W(1,j)=0
W(m+1,j)=0
END DO
W(1,1)=FX(1)
W(m+1,1)=FX(m+1)
DO i=2,m
W(i,1)=FX(i)
W(i,2)=(1-LAMB**2)*FX(i)+0.5*(LAMB**2)*(FX(i+1)+FX(i-1))
END DO
DO j=2,n
DO i=2,m
W(i,j+1)=2*(1-LAMB**2)*W(i,j)+(LAMB**2)*(W(i+1,j)+W(i-1,j))-W(i,j-1)
END DO
END DO
write (*,*) LAMB
write (*,*) h
write (*,*) k
DO i=1,n+1
WRITE (*,*) ' '
WRITE (*,*) 'T=',(i-1)*k
WRITE (*,*) ' '
DO j=1,m+1
WRITE (*,*) 'X=',X(j),'U=',W(j,i)
END DO
END DO
pause
end program EDPH
Bibliografía
Matrix Computations, Gene H. Golub, Charles F. Van Loan, 3th Edition 1996-The Johns Hopkins
University Press.
Computational Methods of Linear Algebra, Granville Sewell, 2nd Edition 2005-John Wiley & Sons,
Inc.
Matrix Algebra, Theory, Computations, and Applications in Statistics, James E. Gentle, 2007-
Springer Science + Business Media.
Análisis Numérico, Richard L. Burden, J. Douglas Faires, 7ma Edición 2002-International Thomson
Editores, S.A. C.V.
Matrix Analysis, Roger A. Horn, Charles R. Johnson, 2nd Edition 2013-Cambridge University Press.
Numerical Recipes in Fortran 77 The Art of Scientific Computing, William H. Press, Saul A.
Teukolsky, William T. Vetterling, Brian P. Flannery, 2nd Edition 1992-Syndicate of the University of
Cambridge.
Algebra Lineal, Stephen H. Friedberg, Arnold J. Insel, Lawrence E. Spence, 1er Edición 1982-
Publicaciones Cultural, S.A.
Linear Algebra, John B. Fraleigh, Raymond A. Beauregard, 3th Edition 1995- Addison-Wesley
Publishing Company.
Algebra Lineal y Geometría Cartesiana, Juan Burgos, 3er Edición 2000-Mc Graw Hill.
Numerical Methods for General and Structured Eigenvalue Problems, Daniel Kressner, 2000-
Springer Science + Business Media.