7
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]

Tarea II Solución de la Matriz e^A por serie de Taylor FINAL

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

Page 1: Tarea II Solución de la Matriz e^A por serie de Taylor FINAL

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]

Page 2: Tarea II Solución de la Matriz e^A por serie de Taylor FINAL

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

Page 3: Tarea II Solución de la Matriz e^A por serie de Taylor FINAL

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

Page 4: Tarea II Solución de la Matriz e^A por serie de Taylor FINAL

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

Page 5: Tarea II Solución de la Matriz e^A por serie de Taylor FINAL

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

Page 6: Tarea II Solución de la Matriz e^A por serie de Taylor FINAL

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

Page 7: Tarea II Solución de la Matriz e^A por serie de Taylor FINAL

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)