Está en la página 1de 7

18/Mayo/2015

Alumno:

Instituto Politcnico Nacional

Ramos Albarrn Fernando

Profesor: Dr. David Romero Romero.

Curso: Anlisis de Sistemas Lineales.

[TAREA II. SOLUCIN DE LA MATRIZ E^A POR


SERIE DE TAYLOR]
Seccin de Estudios de Posgrado e Investigacin

Escuela Superior de Ingeniera Mecnica y Elctrica.

Sistemas Lineales.

Contenido
INTRODUCCIN .................................................................................................................................. 2
DESARROLLO ....................................................................................................................................... 2
Cdigo del programa desarrollado en ForTran 90 .......................................................................... 2
Salidas del programa desarrollado en ForTran 90 .......................................................................... 4
Usando MatLab ............................................................................................................................... 6
CONLCUSIONES ................................................................................................................................... 6
BIBLIOGRAFA ..................................................................................................................................... 6

Seccin de Estudios de Posgrado e Investigacin

Escuela Superior de Ingeniera Mecnica y Elctrica.

Sistemas Lineales.

INTRODUCCIN
Considerando () = para = 1, se tiene que (1) = . Usando expansin en serie de
Taylor, obtenemos:
= + +

2
2!

3
3!

+ + + !

(1)
1

Dnde es la matriz identidad. Adems se observa que para grandes nmeros de k, el trmino !
Hace a un valor muy pequeo. Una computadora digital puede ir aadiendo estos trminos hasta
que la suma de punto flotante se sobrecargue. Para ver esto, se expresa mediante sumatoria.

=
=0

DESARROLLO
Como una computadora tiene un nmero finito de longitud de memoria, tiene por lo tanto,
precisin finita. Para ver claramente esto, se supone:
=[

49 24
]
64 31

Se resuelve por los siguientes rangos de precisin:


1) Precisin sencilla para k=80
2) Doble precisin para k=200
3) Se aade una tercera forma, con cudruple precisin para k=400

Cdigo del programa desarrollado en ForTran 90


!********************************************************************************
!
! NOMBRE: Fernando Ramos Albarrn.
!
! PROGRAMA: exp_A
!
! OBJETIVO: Solucin numrica de la matriz exponencial e^A por serie de Taylor.
! Para cambiar la precisin se cambia sp, dp o qp; simple precisin, doble
! precisin o cudruple precisin respectivamente, en el cdigo 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 precisin

Seccin de Estudios de Posgrado e Investigacin

Escuela Superior de Ingeniera Mecnica y Elctrica.

Sistemas Lineales.

integer, parameter :: dp = selected_real_kind(15, 307) !doble precisin


integer, parameter :: qp = selected_real_kind(33, 4931) !cudruple precisin
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(*,*) 'Nmero de iteraciones:'
read (*,*) n
allocate(fact(0:n))
call factorial(n,fact)
!Define el tamao de la matriz esponencial
write(*,*) 'Tamao 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
expm(i,j)=1.0
else
expm(i,j)=0.0
end if IDENTIDAD
expm(i,j)=expm(i,j)+matrizA(i,j)

!Se construye la matriz identidad


!iniciando el sumador con 1's en la
!diagonal

!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

Seccin de Estudios de Posgrado e Investigacin

Escuela Superior de Ingeniera Mecnica y Elctrica.

Sistemas Lineales.

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


Slo se muestran las primeras salidas, algunas intermedias en las cuales la serie comienza a
converger y las ltimas.

Precisin sencilla
para k=80

Doble precisin
para k=200

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

Seccin de Estudios de Posgrado e Investigacin

Cudruple precisin
K=400
e^A =
e^A =
e^A =
e^A =
e^A =
e^A =
e^A =
e^A =
e^A =

ITERACION
2
384.500000000000000000000000000000
-192.000000000000000000000000000000
512.000000000000000000000000000000
-255.500000000000000000000000000000
ITERACION
3
-2071.66666666666666666666666666667
1036.00000000000000000000000000000
-2762.66666666666666666666666666667
1381.66666666666666666666666666667
ITERACION
4
8368.37500000000000000000000000000

Escuela Superior de Ingeniera Mecnica y Elctrica.


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

Seccin de Estudios de Posgrado e Investigacin

Sistemas Lineales.

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 Ingeniera Mecnica y Elctrica.

Sistemas Lineales.

Usando MatLab
Corroborando con la doble precisin 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 solucin numrica de con un ordenador usando la serie de Taylor es numricamente


defectuoso. Ya que como puede observarse para la precisin sencilla, es numricamente inestable.
Se requiere por lo tanto, una doble precisin. En el caso de cudruple precisin se observa que no
hay ningn problema; sin embargo, mucha precisin, a veces slo puede consumir recursos de la PC
en estar calculando algo que ya convergi.

BIBLIOGRAFA
[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)

Seccin de Estudios de Posgrado e Investigacin

También podría gustarte