Upload
fernando-ramos-albarran
View
31
Download
0
Embed Size (px)
DESCRIPTION
Solución de la Matriz e^A por serie de Taylor FINALSistemas Lineales, Instituto Politécnico Nacional. Fernando Ramos Albarrán
Citation preview
Instituto Politécnico Nacional
Profesor: Dr. David Romero Romero.
Curso: Análisis de Sistemas Lineales.
Sección de Estudios de Posgrado e Investigación
18/Mayo/2015
Alumno: Ramos Albarrán Fernando
[TAREA II. SOLUCIÓN DE LA MATRIZ E^A POR
SERIE DE TAYLOR]
Escuela Superior de Ingeniería Mecánica y Eléctrica. Sistemas Lineales.
Sección de Estudios de Posgrado e Investigación 1
Contenido
INTRODUCCIÓN .................................................................................................................................. 2
DESARROLLO ....................................................................................................................................... 2
Código del programa desarrollado en ForTran 90 .......................................................................... 2
Salidas del programa desarrollado en ForTran 90 .......................................................................... 4
Usando MatLab ............................................................................................................................... 6
CONLCUSIONES ................................................................................................................................... 6
BIBLIOGRAFÍA ..................................................................................................................................... 6
Escuela Superior de Ingeniería Mecánica y Eléctrica. Sistemas Lineales.
Sección de Estudios de Posgrado e Investigación 2
INTRODUCCIÓN
Considerando Φ(𝑡) = 𝑒𝐴𝑡 para 𝑡 = 1, se tiene que Φ(1) = 𝑒𝐴. Usando expansión en serie de
Taylor, obtenemos:
𝑒𝐴 = 𝐼 + 𝐴 +𝐴2
2!+
𝐴3
3!+⋯++
𝐴𝑘
𝑘! (1)
Dónde 𝐼 es la matriz identidad. Además se observa que para grandes números de k, el término 1
𝑘!
Hace a 𝐴𝑘 un valor muy pequeño. Una computadora digital puede ir añadiendo estos términos hasta
que la suma de punto flotante se sobrecargue. Para ver esto, se expresa mediante sumatoria.
𝑒𝐴 =∑𝐴𝑗
𝑗!
𝑘
𝑗=0
DESARROLLO Como una computadora tiene un número finito de longitud de memoria, tiene por lo tanto,
precisión finita. Para ver claramente esto, se supone:
𝐴 = [−49 24−64 31
]
Se resuelve por los siguientes rangos de precisión:
1) Precisión sencilla para k=80
2) Doble precisión para k=200
3) Se añade una tercera forma, con cuádruple precisión para k=400
Código del programa desarrollado en ForTran 90 !******************************************************************************** ! ! NOMBRE: Fernando Ramos Albarrán. ! ! PROGRAMA: exp_A ! ! OBJETIVO: Solución numérica de la matriz exponencial e^A por serie de Taylor. ! Para cambiar la precisión se cambia sp, dp o qp; simple precisión, doble ! precisión o cuádruple precisión respectivamente, en el código fuera de module ! precision ! !******************************************************************************** module precision ! ----------------------------------------------------- ! SP : simple precision de la norma IEEE 754 ! DP : doble precision de la norma IEEE 754 ! ----------------------------------------------------- integer, parameter :: sp = selected_real_kind(7,37) !simple precisión
Escuela Superior de Ingeniería Mecánica y Eléctrica. Sistemas Lineales.
Sección de Estudios de Posgrado e Investigación 3
integer, parameter :: dp = selected_real_kind(15, 307) !doble precisión integer, parameter :: qp = selected_real_kind(33, 4931) !cuádruple precisión end module precision program exp_A use precision implicit none real(qp), dimension(:), allocatable :: fact real (qp), dimension (:,:),allocatable :: expm, matrizA, AUX, A real (qp) :: fact_aux, elemento, factden integer :: i,j,n,m,k,l character (len=20):: archivo write(*,*) 'Número de iteraciones:' read (*,*) n allocate(fact(0:n)) call factorial(n,fact) !Define el tamaño de la matriz esponencial write(*,*) 'Tamaño de la matriz cuadrada' read (*,*) m allocate(expm(m,m),matrizA(m,m),AUX(m,m),A(m,m)) call leematriz(m,matrizA) !Guardando en archivo write( *, *) 'Dame nombre del archivo:' read (*, *) archivo open(7,FILE=archivo) 200 FORMAT(1X,A,1X,E9.2) !Inicializando matrices en cero do i=1,m do j=1,m AUX(i,j)=0.0 IDENTIDAD:if (i==j) then !Se construye la matriz identidad expm(i,j)=1.0 !iniciando el sumador con 1's en la else !diagonal expm(i,j)=0.0 end if IDENTIDAD expm(i,j)=expm(i,j)+matrizA(i,j) !Los primeros 2 elementos de la !serie I + A end do end do !Icinializa el producto de matrices del segundo elemento de la serie AUX=matmul(matrizA,matrizA) !A^2 !Construye la matriz exponencial do k=2,n write(7,*) 'ITERACION',k do i=1,m do j=1,m expm(i,j)=expm(i,j)+(AUX(i,j)/(fact(k))) write(7,*) 'e^A =', expm(i,j) end do end do AUX=matmul(AUX,matrizA) !Se acumula el producto para el !siguiente elemento de la serie end do
Escuela Superior de Ingeniería Mecánica y Eléctrica. Sistemas Lineales.
Sección de Estudios de Posgrado e Investigación 4
end program exp_A subroutine factorial(n,vector) use precision implicit none real(qp) :: vector(0:n) real (qp) :: fact_aux integer :: i,j,n !CALCULA LOS FACTORIALES DE LA SERIE vector(0)=1 !Factorial de cero es 1 do i=1,n fact_aux=1 do j=1,i fact_aux = fact_aux*j end do vector(i)=fact_aux end do end subroutine factorial subroutine leematriz(m,matriz) use precision implicit none integer :: i,j,m real (qp), dimension (m,m) :: matriz !Lee la matriz do i=1,m do j=1,m write (*,*) 'Elemento[',i,',',j,']=' read (*,*) matriz(i,j) end do end do end subroutine leematriz
Salidas del programa desarrollado en ForTran 90
Sólo se muestran las primeras salidas, algunas intermedias en las cuales la serie comienza a
converger y las últimas.
Precisión sencilla para k=80
Doble precisión para k=200
Cuádruple precisión K=400
ITERACION 2 e^A = 384.5000 e^A = -192.0000 e^A = 512.0000 e^A = -255.5000
ITERACION 3 e^A = -2071.667 e^A = 1036.000 e^A = -2762.667 e^A = 1381.667
ITERACION 4 e^A = 8368.375
ITERACION 2 e^A = 384.500000000000 e^A = -192.000000000000 e^A = 512.000000000000 e^A = -255.500000000000
ITERACION 3 e^A = -2071.66666666667 e^A = 1036.00000000000 e^A = -2762.66666666667 e^A = 1381.66666666667
ITERACION 4 e^A = 8368.37500000000
ITERACION 2 e^A = 384.500000000000000000000000000000 e^A = -192.000000000000000000000000000000 e^A = 512.000000000000000000000000000000 e^A = -255.500000000000000000000000000000
ITERACION 3 e^A = -2071.66666666666666666666666666667 e^A = 1036.00000000000000000000000000000 e^A = -2762.66666666666666666666666666667 e^A = 1381.66666666666666666666666666667
ITERACION 4 e^A = 8368.37500000000000000000000000000
Escuela Superior de Ingeniería Mecánica y Eléctrica. Sistemas Lineales.
Sección de Estudios de Posgrado e Investigación 5
e^A = -4184.000 e^A = 11157.33 e^A = -5578.292
ITERACION 5 e^A = -27128.04 e^A = 13564.20 e^A = -36171.20 e^A = 18085.96
ITERACION 6 e^A = 73445.17 e^A = -36722.40 e^A = 97926.39 e^A = -48962.83
.
. ITERACION 29 e^A = -59608.84 e^A = 29805.21 e^A = -79478.16 e^A = 39739.59
ITERACION 30 e^A = 33058.91 e^A = -16528.66 e^A = 44078.68 e^A = -22038.82
ITERACION 31 e^A = NaN e^A = NaN e^A = NaN e^A = NaN
ITERACION 32 e^A = NaN e^A = NaN e^A = NaN e^A = NaN
ITERACION 33 e^A = NaN e^A = NaN e^A = NaN e^A = NaN
e^A = -4184.00000000000 e^A = 11157.3333333333 e^A = -5578.29166666667
ITERACION 5 e^A = -27128.0333333333 e^A = 13564.2000000000 e^A = -36171.2000000000 e^A = 18085.9666666667
.
. ITERACION 45
e^A = -0.895151866808233 e^A = 0.631515652191651 e^A = -1.68404174368147 e^A = 1.20990031375638
ITERACION 46 e^A = -0.677780695629625 e^A = 0.522830066602347 e^A = -1.39421351544332 e^A = 1.06498619963731
ITERACION 47 e^A = -0.756404310736781 e^A = 0.562141874155925 e^A = -1.49904500225286 e^A = 1.11740194304208
.
. ITERACION 198
e^A = -0.735758757930781 e^A = 0.551819097752925 e^A = -1.47151759851153 e^A = 1.10363824117141
ITERACION 199 e^A = -0.735758757930781 e^A = 0.551819097752925 e^A = -1.47151759851153 e^A = 1.10363824117141
ITERACION 200 e^A = -0.735758757930781 e^A = 0.551819097752925 e^A = -1.47151759851153 e^A = 1.10363824117141
e^A = -4184.00000000000000000000000000000 e^A = 11157.3333333333333333333333333333 e^A = -5578.29166666666666666666666666667
ITERACION 5 e^A = -27128.0333333333333333333333333333 e^A = 13564.2000000000000000000000000000 e^A = -36171.2000000000000000000000000000 e^A = 18085.9666666666666666666666666667
.
. ITERACION 45
e^A = -0.895151867022205340677237609184987 e^A = 0.631515654096823831136380689770560 e^A = -1.68404174425819688303034850446153 e^A = 1.20990031330054076311069802348163
ITERACION 46 e^A = -0.677780695843596980705200839739214 e^A = 0.522830068507519651150362305047673 e^A = -1.39421351602005240306763281186717 e^A = 1.06498619918146852312934017718445
ITERACION 47 e^A = -0.756404310950753196014235415921728 e^A = 0.562141876061097758804879593138930 e^A = -1.49904500282959402347967891344385 e^A = 1.11740194258623933333536322797279
.
. ITERACION 398
e^A = -0.735758758144753079636047750354125 e^A = 0.551819099658097700615785760355128 e^A = -1.47151759908826053497542869268705 e^A = 1.10363824071557258908323811759439
ITERACION 399 e^A = -0.735758758144753079636047750354125 e^A = 0.551819099658097700615785760355128 e^A = -1.47151759908826053497542869268705 e^A = 1.10363824071557258908323811759439
ITERACION 400 e^A = -0.735758758144753079636047750354125 e^A = 0.551819099658097700615785760355128 e^A = -1.47151759908826053497542869268705 e^A = 1.10363824071557258908323811759439
Escuela Superior de Ingeniería Mecánica y Eléctrica. Sistemas Lineales.
Sección de Estudios de Posgrado e Investigación 6
Usando MatLab
Corroborando con la doble precisión que maneja MatLab, en la ventana de comandos se obtiene
lo siguiente, mediante la subrutina expm
>> A=[-49 24; -64 31]
A =
-49 24
-64 31
>> expm(A)
ans =
-0.7358 0.5518
-1.4715 1.1036
CONLCUSIONES Encontrar la solución numérica de 𝑒𝐴 con un ordenador usando la serie de Taylor es numéricamente
defectuoso. Ya que como puede observarse para la precisión sencilla, es numéricamente inestable.
Se requiere por lo tanto, una doble precisión. En el caso de cuádruple precisión se observa que no
hay ningún problema; sin embargo, mucha precisión, a veces sólo puede consumir recursos de la PC
en estar calculando algo que ya convergió.
BIBLIOGRAFÍA
[1] Computer-Aided Analysis of Electronic Circuits, Algorithms and Computational Techniques, by
Leon O. Ch. (1975).
[2] Numerical Methods for Engineers by Steven Chapra and Raymond Canale (Jan 24, 2014).
[3] Introduction to Programming with Fortran: With Coverage of Fortran 90, 95, 2003, 2008 and 77 by ian chivers and Jane Sleightholme (Feb 9, 2012).
[4] Linear Systems; A State Variable Approach with Numerical Implementation. Raymond A. DeCarlo. Prentice Hall (14 Mar 1989)