• No se han encontrado resultados

Algoritmo Para Matrices Tridiagonales

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmo Para Matrices Tridiagonales"

Copied!
10
0
0

Texto completo

(1)

 Algoritmo pa

 Algoritmo para matrices tridiago

ra matrices tridiagonales

nales

El

El

algoritmo para matrices

algoritmo para matrices

tridiagonales

tridiagonales

 o o

algoritmo de Thomas

algoritmo de Thomas

 (por (porLlewellyn ThomasLlewellyn Thomas)) es un

es un algoritmoalgoritmo del del álgebra lineal numéricaálgebra lineal numéricapara resolver para resolver matrices tridiagonalesmatrices tridiagonales de forma de forma eficiente.

eficiente.

Una matri tridiagonal se corresponde a

Una matri tridiagonal se corresponde a un sistema de ecuaciones de la un sistema de ecuaciones de la formaforma

donde

donde y y . . lo lo !ue !ue se se puede puede representarrepresentar matricialmentematricialmentecomocomo

"ara este tipo de sistemas se puede

"ara este tipo de sistemas se puede obtener con este algoritmo una soluci#n conobtener con este algoritmo una soluci#n con solo

solo operaciones operaciones en en ve ve de de las las !ue !ue re!uiere re!uiere lala eliminaci#n gaussianaeliminaci#n gaussiana.. El

El algoritmo algoritmo primero primero elimina elimina las las y y luego luego usa usa una una sustituci#n sustituci#n para para obtener obtener lala soluci#n.

soluci#n.

Este tipo de matrices suelen salir al

Este tipo de matrices suelen salir al plantear discretiaciones por métodosplantear discretiaciones por métodos de

dediferencias finitasdiferencias finitas$$ vol%menes finitosvol%menes finitos o oelementos finitoselementos finitos de problemas de problemas unidimensionales. &lgunos de los problemas f'sicos !ue se plantean as' son unidimensionales. &lgunos de los problemas f'sicos !ue se plantean as' son la

laEcuaci#n de "oissonEcuaci#n de "oisson$ la$ laecuaci#n de calor ecuaci#n de calor $ la$ laecuaci#n de ondaecuaci#n de onda o la interpolaci#n o la interpolaci#n por 

por splinessplines..

Índice

Índice

 ocultar ocultar  • • * * +é+étotododo •

• , , -mpl-mplemenementactacioneioness

o

o ,.* -mplementaci#,.* -mplementaci#n en n en 

o

o ,., -mplementaci#,., -mplementaci#n en n en "ython"ython

o

o ,./ -mplementaci#,./ -mplementaci#n en n en +atlab+atlab

o

o ,.0 -mplementaci#,.0 -mplementaci#n en n en 1ortran 231ortran 23

(2)

o /.* &lgoritmo

o /., 1#rmulas para coeficientes

• 0 5ariantes

• 6 7eferencias

• 8 Enlaces e9ternos

Método

editar 

El primer paso del método es modificar los coeficientes como sigue:

donde se marcan con super'ndice ; los nuevos coeficientes. 4e igual manera se opera:

a lo !ue se llama barrido hacia adelante. & continuaci#n se obtiene la soluci#n por sustituci#n hacia atrás:

Implementaciones

editar 

Implementación en C

editar 

La siguiente funci#n en  resolverá el sistema (aun!ue sobreescribirá el vector de entrada c en el proceso). <e ha de notar !ue a!u' los sub'ndices están basados en el cero$ es

decir donde es el n%mero de

ecuaciones:

void  solve_tridiagonal_in_place_destructive (float x[], const size_t N, const float a[], const float b[], float c[]) {

(3)

/*

solves Ax = v where A is a tridiagonal matrix consisting of vectors a, b, c

note that contents of input vector c will be modified, making this a one-time-use function x[] - initiall contains the input vector v, and returns the solution x! indexed from [", !!!, # -$]

# - number of e%uations

a[] - subdiagonal &means it is the diagonal below the main diagonal' -- indexed from [$, !!!, # - $] b[] the main diagonal, indexed from [", !!!, # -$]

c[] - superdiagonal &means it is the diagonal above the main diagonal' -- indexed from [", !!!, # - (] */ 

c[0] = c[0]  b[0]; x[0] = x[0]  b[0];

/* loop from $ to # - $ inclusive */ 

for (n = !; n " N; n##) {

float $ = !%0f  (b[n] & a[n] ' c[n & !]); if(n " (N&!)) c[n] = c[n] ' $;

x[n] = (x[n] & a[n] ' x[n & !]) ' $; 

/* loop from # - ( to " inclusive */ 

for (n = N & ; n&& * 0; ) { x[n] = x[n] & c[n] ' x[n # !]; 

La siguiente variante preserva el sistema de ecuaciones para

reutiliarlo en otras funciones. <e hacen llamadas a la biblioteca para reservar más especiao. =tras variantes usan un puntero a memoria disponible.

void  solve_tridiagonal_in_place_reusable (float x[], const size_t N, const float a[], const float b[], const float c[]) {

size_t n;

/* allocate scratch space */ 

(4)

cpri$e[0] = c[0]  b[0]; x[0] = x[0]  b[0];

/* loop from $ to # - $ inclusive */ 

for (n = !; n " N; n##) {

float $ = !%0f  (b[n] & a[n] ' cpri$e[n & !]); if(n " (N&!)) cpri$e[n] = c[n] ' $;

x[n] = (x[n] & a[n] ' x[n & !]) ' $; 

/* loop from # - ( to " inclusive */ 

for (n = N & ; n&& * 0; )

x[n] = x[n] & cpri$e[n] ' x[n # !];

/* free scratch space */ 

free(cpri$e); 

Implementación en Python

editar 

La siguiente implementaci#n usa el lengua>e de

programaci#n "ython.4e nuevo$ los sub'ndices son basados en el cero ( donde es el n%mero de inc#gnitas). def +-./olve(a, b, c, d)

n = len(d))n in the numbers is rows ) odif the first-row coefficients

c[0] = b[0] )+ivision b ero risk!

d[0] = b[0]

for i in xrange(!, n$ax)

pte$p = b[i] & (a[i] ' c[i& !]) c[i] = pte$p

d[i] = (d[i] & a[i] ' d[i& !])pte$p

)ack .ubstitution

x = [0 for i in xrange(n$ax)] x[&!] = d[&!]

for i in range(&,&n$ax&!,&!) x[i] = d[i] & c[i] ' x[i#!]

return x

Implementación en Matlab

editar 

En +atlab?=ctave el algoritmo !ueda como sigue. Esta ve los vectores están basados en el uno$ por lo !ue

(5)

function x = +-.solver(a,b,c,d)

1a, b, c are t2e colu$n vectors for t2e co$pressed tridiagonal $atrix, d is t2e rig2t vector

1 N is t2e nu$ber of ro3s N = lengt2(d);

1 -odif4 t2e first&ro3 coefficients

c(!) = c(!)  b(!); 1 ivision b4 zero ris5% d(!) = d(!)  b(!);

for n = !N

te$p = b(n) & a(n) ' c(n & !); c(n) = c(n)  te$p;

d(n) = (d(n) & a(n) ' d(n & !))  te$p; end

1 No3 bac5 substitute% x(N) = d(N);

for n = (N & !)&!!

x(n) = d(n) & c(n) ' x(n # !); end

end

Implementación en Fortran 90

editar 

1ortran usa también una nomenclatura basada en el uno$ es decir siendo el n%mero de inc#gnitas.  &lgunas veces no es deseable !ue el programa sobreescriba los

coeficientes (por e>emplo para resolver diversos sistemas !ue solo difieren en el término independiente)$ as' !ue esta implementaci#n mantiene dichos coeficientes.

subroutine solve_tridiag(a,b,c,d,x,n ) i$plicit none

 a - sub-diagonal &means it is the diagonal below  the main diagonal'

 b - the main diagonal

 c - sup-diagonal &means it is the diagonal above the main diagonal'

 d - right part  x - the answer    n - number of e%uations integer,intent(in)  n real(6),di$ension(n),intent(in)  a,b,c,d real(6),di$ension(n),intent(out)  x real(6),di$ension(n)  cp,dp

(6)

real(6)  $ integer i

 initialie c-prime and d-prime

cp(!) = c(!)b(!) dp(!) = d(!)b(!)

 solve for vectors c-prime and d-prime

do i = ,n $ = b(i)&cp(i&!)'a(i) cp(i) = c(i)$ dp(i) = (d(i)&dp(i&!)'a(i))$ enddo  initialie x  x(n) = dp(n)

 solve for x from the vectors c-prime and d-prime

do i = n&!, !, &!

x(i) = dp(i)&cp(i)'x(i#!) end do

end subroutine solve_tridiag

Derivación

editar 

Algoritmo

editar 

<e puede obtener dicho algoritmo usando la eliminaci#n gaussiana de forma genérica. <uponiendo como

inc#gnitas y con ecuaciones a resolver:

+odificando la segunda ecuaci#n a partir de la primera obtenemos:

lo !ue da:

y se ha eliminado de la segunda ecuaci#n. <i repetimos usando la segunda ecuaci#n en la tercera obtenemos:

(7)

Esta ve se ha eliminado . El

procedimiento se puede repetir hasta la fila enésima$ de>ando cada ecuaci#n con solo dos inc#gnitas menos la %ltima !ue solo tiene una inc#gnita. Entonces es inmediata la resoluci#n de esta y desde ah' la de las anteriores.

Fórmulas para coeficientes

editar 

La determinaci#n de los coeficientes en las ecuaciones generales es más complicada. E9aminando el procedimiento$ se pueden definir de forma recursiva:

"ara acelerar la resoluci#n pu ede ser dividido (si no hay

problemas por divisi#n por cero) y los nuevos coeficientes$ indicados con primas$ serán:

Print document

In order to print this document from Scribd, you'll first need to download it.

Cancel

Download And Print

(8)

Lo !ue da el siguient e sistema con las mismas inc#gnit as y los coeficie ntes definido s en funci#n de los originale s: 4onde la %ltima ecuaci#n solo afecta a una inc#gnita. 7esolviendo la podemos resolver la anterior y as' sucesivame nte:

 Variantes

edi

r 

En algunas situaciones$ particularmente con condiciones d contorno peri#dica se busca resolver una forma perturbada de la matri tridiagonal:

Print document

In order to print this document from Scribd, you'll first need to download it.

Cancel

Download And Print

(9)

"ara este caso se la 1#rmula <herm +orrison para evit operaciones adicio de una eliminaci#n gaussiana y poder seguir usando el algoritmo de Thom Este método re!ui resolver una versi c'clica del sistema la entrada y un ve correcci#n y combi los resultados. Tod se puede hacer eficientemente de ve dado !ue amb problemas compa el barrido hacia delante de la matri triangular.. En otras situacion sistema de ecuaci puede ser tridiago blo!ues$ con submatrices como elementos forman diagonales. Este ti problemas suelen cuando se !uiere e9tender los méto discretiaci#n a do dimensiones y pue verse también co matri pentadiago 5ariantes de este algoritmo se usan estas situaciones. El libro Numerical Mathematics de Auarteroni$ <acco <aleri$ recoge una versi#n modificada para multiplicacion ve de divisiones$ es %til en ciertas ar!uitectur 

Print document

In order to print this document from Scribd, you'll first need to download it.

Cancel

Download And Print

(10)

Referencias

• onte$ <.4.$ a deBoor$ . (*2C,). Eleme Numerical Ana +cDraw@ill$ GorH.-<BF 33C3* • Este art'culo in te9to del art'culo Tridiag matri9 algorith T4+& (Thoma algorithm) publ con licencia DFU en 14 wiHi • "ress$ IJ TeuHolsHy$ <&J 5etterling$ ITJ 1lannery$ B" (,33C). K<ecti ,.0. Numeric  Recipes: The Scientific Computing  (/r  edici#n). Few ambridge University "ress.-<BF 2CM@ MM38M@M.

Print document

In order to print this document from Scribd, you'll first need to download it.

Cancel

Download And Print

Referencias

Documento similar

Desarrollo de algoritmo de predicción a partir de datos en tiempo real obtenidos del Emotiv EPOC: Predicción online De manera análoga al Apartado 6.1, podemos obtener un algoritmo

c) Implementar un algoritmo que indique el n´ umero total de plazas disponibles por cada destino. La soluci´ on debe incluir la definici´ on de la estructura de datos m´ as

Podemos deducir de la profundidad de compuertas, que el orden del algoritmo es O(n 2 ) El mejor algoritmo cl´ asico para computar la transformada de Fourier discreta sobre una

También diacrónico es el segundo estudio de la obra: «El elemento gitano en el habla de Madrid (siglos xviii y xix)», en el que Javier García González se propone dar cuenta,

Las variables dependientes que se han tenido en cuenta son: Estado anímico (pre y post sesión), Malestar físico (pre y post sesión), Expresión gestual y facial (pre y post sesión),

En este trabajo se desarroll´ o un algoritmo de b´ usqueda aleatoria para optimizar algunos modelos con funciones estoc´ asticas no restringidas usando informaci´ on a priori.

Conjunto de instrucciones definidas, ordenadas y acotadas para resolver un problema o realizar una tarea, supone el paso previo a ponerse a escribir el código.. Preguntas

La gr´ afica 4.6 muestra un ejemplo en que un n´ umero de ´epocas fijo permite al algoritmo encontrar una soluci´ on mejor: Se puede observar como limitando el n´ umero de ´epocas