Beruflich Dokumente
Kultur Dokumente
Proyecto 1
Ciertas propiedades de una matriz A R, pueden ser usadas para mejorar la eficiencia del
mtodo de eliminacin de Gauss para resolver un sistema del tipo Ax = b. En particular, si
A Rnn es una matriz simtrica y positiva definida, el trabajo computacional se reduce
a la mitad, lo que representa una mejora de eficiencia dramtica. El objetivo de este
proyecto, es el de explorar la naturaleza de un algoritmo que explota ambas propiedades
de una matriz: que sea simtrica y positiva definida. a continuacin, se definen las matrices
a usar: una matriz A Rnn es simtrica si aij = aji i, j {1, 2, . . . , n}, es decir
A = AT . El conjunto de todas las matrices simtricas es Rnn
sym . Una matriz es positiva
T
n
definida si x Ax > 0 para todo vector x R \ {0}. Las matrices positivas definidas,
poseen ciertas caractersticas que se pueden explotar para resolver sistemas lineales donde
ellas estn involucradas. En particular, si n 2 y A Rnn
sym , entonces:
Todos los elementos de la diagonal son positivos.
Todos los valores propios de A son reales y positivos.
El determinante de A es positivo.
a2ij < aii ajj i, j {1, 2, . . . , n} i 6= j.
Una matriz simtrica, tiene un conjunto ortonormal de vectores propios, cada uno
distinto de cero, adems, los valores propios correspondientes son todos reales, por lo que
un vector x Rn \ {0}, puede expresarse como una combinacin lineal de los vectores
propios de A. Si A es simtrica y positiva definida, se puede obtener una factorizacin
A = LU , donde U = LT . (estas propiedades, pueden estudiarse ms a fondo en la referencia
[4]) La deduccin del algoritmo, est incluida en las referencias: . Por motivos prcticos,
se incluye una generalizacin del mismo a partir del clculo de la factorizacin para una
matriz A R44 .
u11 0
0
0
u11 u12 u13 u14
a11 a12 a13 a14
a21 a22 a23 a24 u21 u22 0
0 u22 u23 u24
a31 a32 a33 a34 = u31 u32 u33 0 0
0 u33 u34
a41 a42 a43 a44
u41 u42 u43 u44
0
0
0 u44
u211
u11 u12
u11 u13
u11 u14
u12 u11
u212 + u222
u12 u13 + u22 u23
u12 u14 + u22 u24
=
2
3
2
u13 u11 u13 u12 + u23 u22
u13 + u23 + u33
u13 u14 + u23 u24 + u33 u34
u13 u11 u14 u12 + u24 u22 u14 u13 + u24 u23 + u34 u33
u214 + u224 + u234 + u244
Algoritmo. Clculos algebraicos basados en la igualdad de matrices y la multiplicacin matricial, y en los clculos realizados para la matriz de dimensin 4 4
(ilustracin original en la referencia [3]), sugieren lo siguiente:
ukk
h
i
v
P
u
k1
akm k1
(u
u
)
u
X
im
ik
i=1
= takk
(u2ik ) ukm =
ukk
i=1
(
k {1, . . . , N }
m {k + 1, . . . , N }
Una primera aproximacin sencilla al algoritmo dadas las frmulas obtenidas por
medio de la generalizacin, se muestra a continuacin:
Algorithm 1 Cholesky factorization based on formulas above
Require: A Rnn
sym A is positive definite
Ensure: L is lower triangular LT L = A
1: procedure Cholesky
2:
L Rnn
3:
for k 1 q
. . . n do
P
2
4:
Lkk akk k1
s=1 (lks )
5:
for i (k + 1) . . . n do
P
[a k1 (uis uks )]
6:
Lik ik s=1
lkk
return L
Para aproximar el algoritmo 1, a una implementacin sobre una mquina digital
usando un lenguaje de programacin real, se puede reescribir de esta forma (considerando error en la forma de la matriz).
Algorithm 2 Cholesky factorization for real implementation
Require: A Rnn
Ensure: L is lower triangular LT L = A iff A is positive definite.
1: procedure Cholesky
2:
for i 1 . . .P
n do
2
3:
t aii i1
j=1 lji
4:
if t 0 then
5:
A is not positive definite return error
6:
lii t
7:
for j (i + 1)
. . . n do
P
8:
lij
return L
aij
i1
k=1 lki lkj
lii
function L = cholesky(A)
% given a matrix, it tries hard to find the Cholesky decomposition of a
% matrix, iff the matrix is positive definite, otherwise, it fails and
% return an error.
5
6
7
%
%
Arguments:
A: a square matrix
%
%
%
USAGE:
L = cholesky(A);
assert L' * L = A
8
9
10
11
12
13
14
n = size(A, 1);
L = zeros(n, n);
matrix
15
16
% matrix dimension
% allocating space for the lower triangular
17
for i=1:n
% test if the matrix is positive definite
tmp = A(i, i) L(1:(i 1), i)'* L(1:(i 1), i);
% if fail the test, report it immediately
if(tmp <= 0)
error('A should be a positive definite matrix');
end;
L(i, i) = sqrt(tmp); % the diagonal, as computed in the
derivation
% popoulate L(i, j) where i <> j
for j = (i+1):n
sum = L(1:(i 1), i)' * L(1:(i 1), j);
L(i, j) = (A(i, j) sum) / L(i, i);
end;
end;
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
end
4 2 4
2
2 1 2 1
2 10 2 7
L = 0 3 0 2
A=
4 2 8
4
0 0 2 1
2 7 4
7
0 0 0 1
Le ejecucin de estas lineas:
1
2
A = [4 2 4 2 ; 2 10 2 7 ; 4 2 8 4 ; 2 7 4 7];
L = cholesky(A);
Da como resultado:
2 1 2 1
0 3 0 2
L=
0 0 2 1
0 0 0 1
Ahora, se valida haciendo uso de una matriz tridiagonal con valor 4 en la diagonal
principal, y -1 en las diagonales adyacentes. Con esta descripcin, se generan matrices de tamao 10, 20 y 30, se calcula la factorizacin de Cholesky con el mtodo
implementado
cholesky,
y con la funcin de Matlab chol, se comparan ambos re
sultados (
LT T A
) a partir de su efectividad. Para esto, se tiene el siguiente
script que genera la matriz segn su tamao:
1
2
function A = genmatrix(n)
A = diag(4*ones(1,n),0)+diag(1*ones(1,n1),1)+diag(1*ones(1,n1)
,1);
end
4 1 0
0
0
1 4 1 0
0
A = 0 1 4 1 0
0
0 1 4 1
0
0
0 1 4
4
Ahora, se ejecuta el siguiente script para validar la ejecucin de la funcin implementada y contrastar sus resultados con los de la librera estndar de Matlab. De esta
manera, se obtiene una comparacin entre el comportamiento y desempeo numrico
de ambas funciones.
2
3
4
5
6
7
8
9
10
11
12
i = 1;
while i <= iter
A = genmatrix(ns(i)); LM = chol(A); LO = cholesky(A);
em = norm(LM' * LM A); om = norm(LO' * LO A);
merrors(i) = em; oerrors(i) = om;
i = i + 1;
end;
Proyecto 2
Un polinomio, es una estructura algebraica o ecuacin de la forma:
Pn (x) : a0 xn + a1 xn1 + a2 xn2 + + ak xnk + + an1 x + an = 0
Donde los coeficientes ai , son nmeros especficos en Z, Q, R, o C. Para resolver este
tipo de ecuaciones, es necesario hallar otro nmero puntual x que satisfaga la ecuacin. Es
decir, dado un polinomio Pn (x), solucionar el polinomio, es encontrar el conjunto X:
X = {x C | Pn (x) = 0}
El nmero n, es denominado orden del polinomio, este determina la cardinalidad de
X, de manera ms especfica, n, o |X|, es el nmero de races del polinomio, es decir, cada
uno de los elementos pertenecientes a X, los cuales, por definicin satisfacen Pn (X) = 0.
Conocer de antemano la cantidad de races de un polinomio, es un hecho matemtico de
fundamental importancia para la solucin computacional del polinomio. Otra deduccin
matemtica fundamental para esta tarea, es el teorema fundamental del lgebra, el cual,
se presta para deducir que si un numero complejo a + ib pertenece a X, entonces el numero
complejo a ib, tambin lo hace.
Los polinomios, son una estructura fundamental en la computacin cientfica, al igual
que las matrices, muchos problemas de computacin cientfica, pueden reducirse a ecuaciones no lineales polinomiales. Por esta razn, es importante el diseo de algoritmos
numricos para la solucin de este tipo de ecuaciones. Si n 3, el problema es trivial,
en el caso de n = 1, el problema se resuelve con dos multiplicaciones y una divisin. Si
n = 2, existe la famosa frmula para hallar las dos races. Si n = 3 , se puede recurrir a
las frmulas de Cardano. Para grados mayores a 3, existe una dificultad inherente a las
estructuras matemticas comprometidas en la solucin y estructura de los polinomios (los
artilugios del lgebra abstracta). Para mitigar esto, se presenta un mtodo para la solucin
numrica de un polinomio Pn (x). A continuacin, se presenta un mtodo para la solucin
no analtica de un polinomio (La exposicin referida, es presentada de manera formal en la
referencia [2]. Una derivacin alternativa y ms cercana al clculo matricial, es presentada
en la referencia [1]).
Un polinomio de la forma Pn (x) =
Pn
i=0 ai x
ni ,
b1 = a1 p
b2 = a2 pb1 q
bi = ai pbi1 qbi2
i = 1 . . . (n 2)
S
q
S
p
R
q
R
p
J
q (n+1) = q (n) +
J
R S S R
Donde J =
p q
p q
Dado que R y S son funciones de b1, b2, b3 , . . . , bn2 , los cuales a su vez dependen
de p y de q, es necesario hallar las derivaras parciales respecto a p y a q de los coeficientes
b1, b2, b3 , . . . , bn2 , R, y S. A continuacin, se halla cada derivada parcial:
b1 (p, q) = [c1 , d1 ] = [1, 0]
b1
b1
b2 (p, q) = [c2 , d2 ] = b1 p
, p
1 = [b1 + p, 1]
p
q
bi1
bi2
bi1
bi2
bi (p, q) = [ci , di ] = bi1 p
q
, p
bi2 q
p
p
q
q
= [b1 + p, 1] i = 3 . . . (n 2)
bn2
bn3
bn2
bn3
R(p, q) = bn2 p
q
, p
bn3 q
p
p
q
q
bn2
bn2
S(p, q) = q
, bn2 q
p
q
7
Haciendo uso de los coeficientes ci y di , es posible reescribir los trminos R(p, q),
S(p, q), bi=1...(n2) (p, q) de la siguiente manera:
b1 (p, q) = [c1 , d1 ] = [1, 0]
b2 (p, q) = [c2 , d2 ] = [b1 + p, 1]
bi (p, q) = [ci , di ] = [bi1 pci1 qci2 , bi2 pdi1 qdi2 ]
i = 3 . . . (n 2)
R S
S R
q
q
R S
S R
p
p
p, q p
, q+
J
J
n2
n3
return p, q, x
+ b1 x
+ b2 xn4 + + bk xn2k + . . . bn3 x + bn2
Algoritmo. El aparato terico expuesto anteriormente, permite plantear un algoritmo para hallar la factorizacin de un polinomio Pn (x) donde n 4. Es decir,
pado un polinomio Pn (x), se pretende disear un algoritmo que calcule p, q, trminos
necesarios para el trmino cuadrtico, y bi , que garanticen que R y S, se encuentren
en un radio muy pequeo cuyo centro es cero. El algoritmo de Bairstow, es usado
para hallar la factorizacin cuadrtica de un polinomio Pn (x). Dicha factorizacin
es: (x2 +px+q)(xn2 +b1 xn3 +b2 xn4 + +bk xn2k +. . . bn3 x+bn2 )+Rx+S,
tal que R y S sean tan pequeos como se requiera (computacionalmente hablando),
dependiendo de un error .
El algoritmo 3, asigna los valores pertinentes (los cuales fueron deducidos anteriormente) a los coeficientes b1 , b2 , . . . , bi , y finalmente a p y a q segn las igualdades
expuestas en la deduccin matemtica. Este proceso, se repite hasta que |R + S|.
Cuando esto se cumpla, se cuenta con valores de p, q, bi , para formar la expresin
(x2 + px + q)(xn2 + b1 xn3 + + bk xn2k + . . . bn3 x + bn2 ), que sea igual
a Pn (x). Con esta factorizacin, se obtienen las dos primeras races del polinomio
original Pn (x):
x
(1)
p +
p
p2 4q
2
(2)
p
p2 4q
2
travs de la funcin Solve, el cual para polinomios de grado 1 debe despejar x, para
polinomios de grado 2 debe calcular X haciendo uso de la frmula cuadrtica, y para
polinomios cbicos, debe usar el mtodo de Cardano. Esta sugerencia, se adopta de
la referencia [2].
Definicin: Sea Ne = {n N+ | k N+ ; n = 2k}, sea No = N+ \ Ne .
Dado Pn (x), si n es par, n Ne . Por el lema de Zorn, se sabe que n est contenido
en un conjunto E = {2, 4, . . . , n, 2(n + 1)}. De manera equivalente, si n No ,
O No tal que O = {1, 3, . . . , n, 2n + 1}. Sea predA una funcin con tipo
pred : A \ {min A} A, que para cada elemento en A \ {min A}, retorne el predecesor absoluto bajo una ordenacin isomorfa a la N. Es decir, predE : E \ {2} E,
retorna el par anterior a n. Una construccin anloga para los nmeros impares, permite deducir que la aplicacin finita y sucesiva de pred a algn n sobre el conjunto
al cual pertenezca (E, u O), terminara en 2 o en 3, dependiendo si n es par o impar
respectivamente.
La anterior deduccin, aunque un tanto formal, es til para demostrar que al salir del
loop de la linea 10 del algoritmo 4, Pn (x), sera tal que n 3, la aplicacin sucesiva
descendiente de pred, mas que la condicin de parada, sirven para demostrar la
terminacin del algoritmo en cuestin. Suponiendo que el algoritmo 3, termina, se
ha diseado un algoritmo capaz de hallar con cierto error o tolerancia, las races de
un polinomio de grado arbitrario.
Implementacin. La implementacin del algoritmo 4, en una mquina digital por
medio de un lenguaje de programacin de alto nivel como Matlab, requiere contemplar el desarrollo de la formula cuadrtica y del mtodo de Cardano para la
solucin algebraica de polinomios de grados que as lo permitan (Galois y Abel).
A continuacin, se muestran documentados los archivos de Matlab, que permiten
la materializacin del algoritmo 4, se muestran, de orden de relevancia, es decir,
se muestra de ultimo el algoritmo final, antes de este, se muestran las funciones
necesarias para su realizacin.
Script 2:
1
2
3
4
5
un polinomio cuadrtico.
function x = quadratic(polynomial)
% fetch the roots of a second degree polynomial over the complex field:
% size(polynomial) = 3
% let pol be polynomial in
% pol(1) != 0 /\ pol(1)x^2 + pol(2)x + pol(3) = 0
6
7
8
%
%
Arguments:
polynomial: A complex valued quadratic polynomial [a b c]
%
%
%
%
USAGE:
x = quadratic(polynomial)
x(1) /\ x(2) are the unique values that satisfies:
forall x in [x(1), x(2)] polyval(polynomial, x) = 0
9
10
11
12
13
10
14
15
16
% Coefficients
a = polynomial(1); b = polynomial(2); c = polynomial(3);
17
18
19
20
21
22
23
24
end
function x = cardano(polynomial)
% fetch the roots of a cubic polynomial over the real field.
% size(polynomial) = 4
% let pol be polynomial in
% pol(1) != 0 /\ pol(1)x^3 + pol(2)x^2 + pol(3)x + pol(4) = 0
6
7
8
%
%
Arguments:
polynomial: A complex valued quadratic polynomial [a b c]
%
%
%
%
USAGE:
x = cardano(polynomial)
x(1) /\ x(2) /\ x(3) are the unique values that satisfies:
forall x in [x(1), x(2), x(3)] polyval(polynomial, x) = 0
9
10
11
12
13
14
15
16
17
% Written by: Nam Sun Wang, University or?f Maryland, College Park,
2006c
% Taken from: https://raw.githubusercontent.com/LCAV/edmbox/master/
cubicfcnroots.m
% Formula used are given in Tuma, Engineering Mathematics Handbook
18
19
20
21
% Coefficients
a = polynomial(1); b = polynomial(2);
c = polynomial(3); d = polynomial(4);
22
23
24
p
q
= c/a b*b/a/a/3. ;
= (2.*b*b*b/a/a/a 9.*b*c/a/a + 27.*d/a) / 27. ;
25
26
DD = p*p*p/27. + q*q/4. ;
27
28
29
30
11
y1 = temp1*cos(phi/3.); y2 = temp1*cos((phi+pi)/3.);
y3 = temp1*cos((phipi)/3.);
else
temp1 = q/2. + sqrt(DD);
temp2 = q/2. sqrt(DD);
u = abs(temp1)^(1./3.); v = abs(temp2)^(1./3.);
if (temp1 < 0.) u = u; end
if (temp2 < 0.) v=v; end
y1 = u + v; y2r = (u+v)/2.; y2i = (uv)*sqrt(3.)/2.;
end
31
32
33
34
35
36
37
38
39
40
41
temp1 = b/a/3.;
y1 = y1temp1;
if (DD < 0.) y2 = y2temp1; y3 = y3temp1; else y2r=y2rtemp1; end
42
43
44
45
46
47
48
49
50
51
52
53
end
function x = basecase(polynomial)
% fetch the roots of a polynomial of degree <= 3, by using auxiliary
% methods (quadratic equation formula, Cardano fomulae)
% size(polynomial) <= 3
% let pol be polynomial in
% pol(1) != 0 /\ polyval(polynomial, x) = 0
10
%
%
%
11
Arguments:
polynomial: A real valued quadratic polynomial [a b c d?]
if d is give, it solves a cubic equation, otherwise, it solves
a
quadratic equation.
%
%
%
USAGE:
x = basecase(polynomial)
polyval(polynomial, x) = 0
8
9
12
13
14
15
16
17
18
12
19
20
21
22
23
24
25
end
4
5
6
%
%
Arguments:
pol: A real valued polynomial of any degree
%
%
%
%
USAGE:
polynomial2 = normalized(polynomial1)
polynomial2(1) = 1 /\ roots(polynomial1) = roots(polynomial2)
forall x in R, then polynomial1(x) = polynomial2(x)
7
8
9
10
11
12
13
14
n = size(pol, 2);
polynomial = zeros(1, n);
of
15
16
17
coef = pol(1);
with
18
% The degree
% Allocating space for the new version
% the polynomil
% The coefficient to perform division
19
20
21
end
13
5
6
7
13
%
%
14
Arguments:
polynomial: A real valued polynomial, whose degree is
determined by
the size of this matrix.
error: The tolerance required for iterating changing the
paramters
p, q, and b
%
%
%
USAGE:
[p, q, b] = bairstow(polynomial, error)
(x^2 + px + q)(b(x)) = polyomial + (Rx + S + error) = 0
10
11
12
%
%
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
% Recurrence relation
for i = 3:(n 2)
b(i) = polynomial(i) p * b(i 1) q * b(i 2);
14
38
39
40
41
42
43
44
45
46
47
48
49
50
51
%
J
p
q
52
53
54
55
q
* drdq;
dsdq S * drdq);
dsdp S * drdp);
56
end;
57
58
end
4
5
10
%
%
11
Arguments:
polynomial: A real valued polynomial, whose degree is
determined by
the size of this matrix.
error: The tolerance required for iterating changing the
paramters
p, q, and b
%
%
%
USAGE:
roots = nroots(polynomial, error)
forall r in roots => polyval(polynomial, r) = 0
7
8
%
%
12
13
14
15
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
end
16
Validacin. Como primer medida de validacin, se pueden tomar los ejemplos de los
textos citados ([2], [1]). A continuacin, se muestran dos polinomios con sus races
respectivas (segn los textos), adems, se muestra la ejecucin del cdigo escrito
sobre la representacin de los mismos polinomios:
Ejemplo tomado de la referencia [1]:
P6 (x) : 5x6 30x5 + 56x4 96x3 + 131x2 18x + 24 = 0
R = {5.3091 1018 0.44721j, 4.7003X1017 1.7321j, 4, 2}
La ejecucin de estas lineas:
1
2
Da como resultado:
rs = [0.0000 + 0.4472i
0.0000 - 0.4472i
-0.0000 + 1.7321i
-0.0000 - 1.7321i
4.0000 + 0.0000i
2.0000 + 0.0000i]
Ejemplo tomado de la referencia [2]:
P7 (x) : x7 4 x6 + 25 x5 + 30 x4 185 x3 + 428 x2 257 x 870 = 0
R = {1, 3, 1 2j, 2 5j, 2}
La ejecucin de estas lineas:
1
2
Da como resultado:
rs = [2.0000 + 0.0000i
-1.0000 + 0.0000i
1.0000 + 2.0000i
1.0000 - 2.0000i
-3.0000 + 0.0000i
2.0000 + 5.0000i
2.0000 5.0000i]
Para proceder con la validacin del algoritmos, sobre polinomios de grado arbitrario,
se ejecuta un script que calcule las races haciendo uso del mtodo implementado, y
de la funcin nativa de Matlab, roots. A partir de esto, se ordenan los resultados
y para cada uno de ellos, se mide que tan lejos esta la evaluacin del polinomio de
cero, para cada raz y por cada mtodo. Para cada grado del polinomio, se determina
el error total, y este, se toma como medida para evaluar el desempeo del algoritmo.
El siguiente script, realiza estos clculos:
17
1
2
3
4
5
6
degrees = [3 5 6 8 13 15 17 20];
iter = 8;
epsilon = 0.00001;
7
8
9
10
11
12
13
14
15
i = 1;
while i <= iter
comparisson
current = degrees(i);
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
% evaluate each root at the polynomial, and measure how far this
% value is from zero. Register each for each method
for j = 1:current
matlabroot = matlabroots(j);
bairstowroot = bairstowroots(j);
32
33
34
35
36
37
38
39
40
41
42
43
44
18
19
Figura. 3: Medida el error absoluto para el clculo de las races de un polinomio aleatorio
dado su grado. Cada medida, corresponde a la suma de las distancias de cada raz al
cero, es decir, el valor real de la evaluacin del polinomio en una raz. Esto, para cada
mtodo. Para la ejecucin del script nroots, se us una tolerancia de 0.001, este determina
completamente el error obtenido, por lo que se afina este con el objetivo de reducir el error
absoluto (Ver figura 2).
Como puede verse, las limitaciones de la mquina, del lenguaje y del algoritmo,
inducen a la presencia de error en el calculo de las races de un polinomio, sin embargo,
este error aunque no siempre mejor que el de la funcin nativa, el error es bajo, y
puede considerarse un mtodo estable para valores relativamente pequeos de grados
de polinomios .
20
Bibliografa
[1] Miller, G. Numerical Analysis for Engineers and Scientists. 2014. Cambridge University
Press. Pags. 175 - 178.
[2] Rosloniec, S. Fundamental Numerical Methods for Electrical Engineering. 2008. Lecture
Notes in Electrical Engineering - Springer Berlin Heidelberg. Pags. 30 - 35.
[3] Yang, W.Y. and Cao, W. and Chung, T.S. and Morris, J. Applied Numerical Methods
Using MATLAB. 2005. Wiley. Pags. 111 - 112.
[4] Suli, E. and Mayers, D.F. An Introduction to Numerical Analysis. 2003. Cambridge
University Press. Pags. 87 - 93.
[5] Cheney, E. and Kincaid, D. Numerical Mathematics and Computing. 2007. International student edition - Cengage Learning. Pags. 305 - 306.
[6] Gander, W. and Gander, M.J. and Kwok, F. Scientific Computing - An Introduction
using Maple and MATLAB. 2014. Texts in Computational Science and Engineering Springer International Publishing. Pags. 88 - 94.
[7] Watkins, D.S. Fundamentals of Matrix Computations. 2004. Pure and Applied Mathematics: A Wiley Series of Texts, Monographs and Tracts - Wiley. Pags. 32 - 48.
[8] Ford, W. Numerical Linear Algebra with Applications: Using MATLAB. 2014. Elsevier
Science. Pags. 267 - 280.
21