Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GDIGG_AMAT_2223_Practica3_vfernandc
Práctica 3. Resolución de Sistemas de Ecuaciones.
Métodos Directos
Temporalización de la práctica : Lunes 17 de octubre de 2022 (Grupo A) y Jueves 20 de octubre de 2022
(Grupo B)
Instrucciones:
Para cambiar el nombre pulsa en el título de la hoja (arriba del todo, entre el logo de Sage y el menú
"Archivo/File...")
2. Comparte la hoja de trabajo con el usuario de tu profesor mediante el botón Compartir/Share de arriba a
la derecha.
4. Cuando haya terminado, haga una copia en un único fichero PDF y ponlo en el campus virtual. Esa será
la versión que se evaluará . La hoja no se considera entregada si no se ha renombrado y compartido (pasos
1 y 2).
Para generar el PDF lo más sencillo es usar el botón Imprimir/Imprimir de arriba e imprimir la nueva
página a fichero.
5. Una vez subido el PDF al campus virtual, no podrá modificarse esta hoja de trabajo. Hacerlo conllevará
la calificación de 0 en esta práctica .
6. Los ejercicios a entregar se representan en Rojo y deben estar correctamente explicados. Los ejercicios
indicados con ** NO serán obligatorios, pero aquellos que los hagan podrán ir sumando por cada uno de
ellos 0.1 puntos adicionales en la calificación de la práctica.
En primer lugar, para crear vectores en Sage utilizamos la función vector() que permite considerar como
vector una lista de números.
v = vector([1,2,3,4]); v
(1, 2, 3, 4)
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 1/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
Como observamos se trata de un vector con números enteros, pero normalmente nos interesa trabajar con
valores reales, para ello, y de manera generalizada, se puede añadir RDF como primer argumento a la
función vector() .
v = vector(RDF,[1,2,3,4]); v
(1.0, 2.0, 3.0, 4.0)
Si queremos mostrar los vectores más elegantes, podemos utilizar la función show() .
mostrar
Por otra parte, si se quiere tomar un elemento del vector, basta indicarlo entre [] el índice de la posición que
ocupa dicho elemento. Recordemos que en Sage se comienza en 0. Además, también podemos modificar los
elementos.
Podemos operar con vectores de manera habitual. Además, observamos que los vectores Sage los muestra en
filas, para trabajar en columnas es necesario utilizar la función .column().
print 2*v
print v+2*v
vt = v.column(); show(vt)
(2.0, 6.0, 6.0, 8.0)
(3.0, 9.0, 9.0, 12.0)
()
1.0
3.0
3.0
4.0
Sin embargo, para elevar a una potencia un vector, es necesario hacerlo elemento a elemento, para ello se
utilizan las listas por comprensión.
[i^2 for i in v]
[1.0, 9.0, 9.0, 16.0]
Si se quiere aplicar funciones conocidas y programadas en Sage, se debe utilizar la función map().
map(sqrt,v)
[1.0, 1.7320508075688772, 1.7320508075688772, 2.0]
v.length()
4
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 2/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
Por otro lado, para construir matrices en Sage se emplea la función matrix(), al igual que ocurre con los
vectores si se queremos trabajar con números reales debemos situar como primer argumento el valor RDF.
Ahora bien, las matrices se crean como una lista de listas, esto es, una lista cuyos elementos serán listas que
representen los elementos de una fila.
A = matrix(RDF,[[1,2,4,3],[2,1,4,5],[3,4,1,6],[4,5,1,7]])
A
[1.0 2.0 4.0 3.0]
[2.0 1.0 4.0 5.0]
[3.0 4.0 1.0 6.0]
[4.0 5.0 1.0 7.0]
show(A)
( )
1.0 2.0 4.0 3.0
2.0 1.0 4.0 5.0
3.0 4.0 1.0 6.0
4.0 5.0 1.0 7.0
Considerando una matriz, podemos operar con ellas siempre y cuando las dimensiones coincidan. Podemos
multiplicar por escalares, sumar matrices, multiplicar matrices, pero también calcular su inversa, su
determinante, transponer matrices,...
B = 2*A; show(B)
( )
2.0 4.0 8.0 6.0
4.0 2.0 8.0 10.0
6.0 8.0 2.0 12.0
8.0 10.0 2.0 14.0
C = A*B; show(C)
( )
58.0 70.0 38.0 116.0
72.0 92.0 42.0 140.0
76.0 88.0 70.0 154.0
90.0 104.0 88.0 184.0
Para calcular la inversa de una matriz, se puede utilizar tanto la función .inverse() o A ( − 1 ) , y para calcular
su determinante se emplea la función .det().
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 3/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
( )
− 0.173913043478 0.304347826087 − 2.65217391304 2.13043478261
0.391304347826 − 0.434782608696 0.217391304348 − 0.0434782608696
0.260869565217 0.0434782608696 − 0.521739130435 0.304347826087
− 0.217391304348 0.130434782609 1.4347826087 − 1.08695652174
show(A^(-1))
( )
− 0.173913043478 0.304347826087 − 2.65217391304 2.13043478261
0.391304347826 − 0.434782608696 0.217391304348 − 0.0434782608696
0.260869565217 0.0434782608696 − 0.521739130435 0.304347826087
− 0.217391304348 0.130434782609 1.4347826087 − 1.08695652174
A.det()
-23.0
At = A.transpose(); show(At)
( )
1.0 2.0 3.0 4.0
2.0 1.0 4.0 5.0
4.0 4.0 1.0 1.0
3.0 5.0 6.0 7.0
w = A*v; show(w)
z = v*A; show(z)
Por otro lado, para hacer referencia a un elemento de una matriz, se debe indicar la posición de dicho
elemento entre corchetes, de modo que el elemento de la fila 1 y columna 1 se corresponde al valor A[0,0].
A[0,0]
1.0
A[2,2] = A[2,2] + 2^3
show(A)
( )
1.0 2.0 4.0 3.0
2.0 1.0 4.0 5.0
3.0 4.0 9.0 6.0
4.0 5.0 1.0 7.0
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 4/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
Para trabajar con filas o columnas enteras de una matriz se utiliza el símbolo : para indicar que se toman
todos los elementos según se sitúe [:,a] o [a,:] que indica seleccionar todos los elementos de la columna o de
la fila (respectivamente) a+1.
A[:,1] #Columna 2
[2.0]
[1.0]
[4.0]
[5.0]
A[1,:] #Fila 2
[2.0 1.0 4.0 5.0]
Para conocer las dimensiones de la matriz A se utiliza la función .dimensions(), que devuelve una lista con
dos valores: el primero de ellos es el número de filas y el segundo el número de columnas.
A.dimensions()
(4, 4)
Por otro lado, en Sage podemos obtener los elementos de la diagonal de la matriz empleando la función
.diagonal(), y además la función diagonal_matrix(x) permite construir una matriz diagonal cuyos elementos
se encuentran en la lista x.
( )
1.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0
0.0 0.0 9.0 0.0
0.0 0.0 0.0 7.0
Ax = b
Si la matriz A tiene inversa (esto es, su determinante es no nulo), entonces se puede obtener el vector de
incógnitas como
x = A − 1b
Como observamos para encontrar el vector de soluciones x multiplicamos por la derecha la matriz A al
vector b, por ello en Sage puede resolverse el sistema de ecuaciones lineales utilizando la función
.solve_right().
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 5/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
}
x+z =1
2x + y =2
− x + y − 2z =3
A = matrix(RDF,[[1,0,1],[2,1,0],[-1,1,-2]]); show(A)
b = vector(RDF,[1,2,3]); show(b)
( )
1.0 0.0 1.0
2.0 1.0 0.0
− 1.0 1.0 − 2.0
x = A.solve_right(b); show(x)
A*x
(0.9999999999999996, 2.0, 3.000000000000001)
Método de Gauss
El primer método para resolver sistemas de ecuaciones es el método de Gauss que se trata de un método
directo, que consiste en realizar distintas transformaciones en la matriz ampliada del sistema para obtener un
nuevo sistema de ecuaciones equivalente cuya matriz de coeficientes es triangular superior
a ij > 0, i > j
pues a partir de ella se realiza una sustitución regresiva para ir encontrando los valores de las incógnitas.
Para aplicar este método, en cada fila i, F i, se debe tomar como pivote el elemento que se encuentre en la
diagonal a ii y conseguir hacer 0's por debajo de dicho elemento, es decir, a partir de la fila i + 1. Las
transformaciones que deben realizarse en la fila k (con k > i), F k, son:
a ki
Fk − F
a ii i
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 6/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
}
x + 3z =1
2y + 4t =2
5x + 3z =3
6y + 4t =4
A = matrix(RDF,[[1,0,3,0],[0,2,0,4],[5,0,3,0],[0,6,0,4]]); show(A)
b = vector(RDF,[1,2,3,4]); show(b)
( )
1.0 0.0 3.0 0.0
0.0 2.0 0.0 4.0
5.0 0.0 3.0 0.0
0.0 6.0 0.0 4.0
Para construir la matriz ampliada a partir de A y b, se utiliza la función .augment() que permite añadir una
columna.
Aamp = A.augment(b)
show(Aamp)
( )
1.0 0.0 3.0 0.0 1.0
0.0 2.0 0.0 4.0 2.0
5.0 0.0 3.0 0.0 3.0
0.0 6.0 0.0 4.0 4.0
Vamos a aplicar ahora el método de Gauss, si nos fijamos para la fila 1, el elemento de la diagonal a 11 = 1
es no nulo, luego podemos hacer ceros en las filas 2, 3 y 4, y columna 1, mediante la fórmula
a k1
Fk − F , k = 2, 3, 4
a 11 1
Pero si nos fijamos en las filas 2 y 4 ya hay ceros, luego basta hacer cero en la fila 3 y columna 1.
Recordemos que la fila 1 se corresponde con A[:,0].
( )
1.0 0.0 3.0 0.0 1.0
0.0 2.0 0.0 4.0 2.0
0.0 0.0 − 12.0 0.0 − 2.0
0.0 6.0 0.0 4.0 4.0
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 7/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
Debemos seguir haciendo transformaciones a partir de las siguientes filas, donde el pivote será a ii para la
fila i, y k será la fila en la que haremos ceros.
i,k = 1,3
pivote = Aamp[i,i]
Aamp[k,:] = Aamp[k,:] - Aamp[k,i]/pivote*Aamp[i,:]
show(Aamp)
( )
1.0 0.0 3.0 0.0 1.0
0.0 2.0 0.0 4.0 2.0
0.0 0.0 − 12.0 0.0 − 2.0
0.0 0.0 0.0 − 8.0 − 2.0
Observamos que la matriz de coeficientes es triangular superior, ahora ya podemos aplicar una sustitución
regresiva para resolver el sistema. Para ello, vamos a crear un vector de ceros, en el que iremos recogiendo
las soluciones del sistema de ecuaciones.
n = A.dimensions()[0]
x = vector(RDF,n); show(x)
Para encontrar los valores de x, recordemos que debemos empezar de abajo a arriba, esto es, el valor de la
última incógnita será el cociente entre Aamp[3,4] y Aamp[3,3].
Ahora la tercera incógnita se obtiene al despejarla en la fila 3 de la ecuación obtenida en la matriz ampliada,
esto es,
def SustRegresiva(Aamp):
n = Aamp.dimensions()[0]
x = vector(RDF,n)
for i in [(n-1),(n-2)..0]:
for j in [(i+1)..(n-1)]:
x[i] = x[i] - Aamp[i,j]*x[j]
x[i] = x[i] + Aamp[i,n]
x[i] = x[i]/Aamp[i,i]
return x
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 8/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
SustRegresiva(Aamp)
(0.5, 0.5, 0.16666666666666666, 0.25)
def Resolver(A,b):
Aamp = A.augment(b)
dimension=A.dimensions()
print dimension
dimcol = dimension[1]
dimfil = dimension[0]
for i in [0..(dimcol-1)]:
for k in [(i+1)..(dimfil-1)]:
pivote = Aamp[i,i]
Aamp[k,:] = Aamp[k,:] - Aamp[k,i]/pivote*Aamp[i,:]
show(Aamp)
x = SustRegresiva(Aamp)
return show(Aamp),show(x)
A = matrix(RDF,[[5,-3,1,1],[1,-10,2,3],[3,-1,6,0]]); show(A)
b = vector(RDF,[1,3,0]); show(b)
Resolver (A,b)
( )
5.0 − 3.0 1.0 1.0
1.0 − 10.0 2.0 3.0
3.0 − 1.0 6.0 0.0
(3, 4)
( )
5.0 − 3.0 1.0 1.0 1.0
0.0 − 9.4 1.8 2.8 2.8
3.0 − 1.0 6.0 0.0 0.0
( )
5.0 − 3.0 1.0 1.0 1.0
0.0 − 9.4 1.8 2.8 2.8
0.0 0.8 5.4 − 0.6 − 0.6
( )
5.0 − 3.0 1.0 1.0 1.0
0.0 − 9.4 1.8 2.8 2.8
0.0 − 1.11022302463 × 10 − 16 5.55319148936 − 0.36170212766 − 0.36170212766
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 9/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
( )
5.0 − 3.0 1.0 1.0 1.0
0.0 − 9.4 1.8 2.8 2.8
0.0 − 1.11022302463 × 10 − 16 5.55319148936 − 0.36170212766 − 0.36170212766
(None, None)
print "En este ejercicio usamos el Método de Gauss para hallar a bases de
los for los ceros, y así sacar la matriz ampliada tras aplicar las
transformaciones y el vestor solución"
En este ejercicio usamos el Método de Gauss para hallar a bases de
los for los ceros, y así sacar la matriz ampliada tras aplicar las
transformaciones y el vestor solución
}
5x − 3y + z =1
x − 10y + 2z =3
3x − y + 6z =0
A = matrix(RDF,[[5,-3,1],[1,-10,2],[3,-1,6,]]); show(A)
b = vector(RDF,[1,3,0]); show(b)
Resolver (A,b)
( )
5.0 − 3.0 1.0
1.0 − 10.0 2.0
3.0 − 1.0 6.0
(3, 3)
( )
5.0 − 3.0 1.0 1.0
0.0 − 9.4 1.8 2.8
3.0 − 1.0 6.0 0.0
( )
5.0 − 3.0 1.0 1.0
0.0 − 9.4 1.8 2.8
0.0 0.8 5.4 − 0.6
( )
5.0 − 3.0 1.0 1.0
0.0 − 9.4 1.8 2.8
0.0 − 1.11022302463 × 10 − 16 5.55319148936 − 0.36170212766
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 10/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
( )
5.0 − 3.0 1.0 1.0
0.0 − 9.4 1.8 2.8
0.0 − 1.11022302463 × 10 − 16 5.55319148936 − 0.36170212766
(None, None)
print "La solución del sistema es:
(0.0268199233716,−0.310344827586,−0.0651340996169)"
La solución del sistema es:
(0.0268199233716,−0.310344827586,−0.0651340996169)
Otro método directo para resolver sistemas de ecuaciones lineales es el método de Gauss con pivoteo
parcial. Éste consiste en aplicar el método de Gauss pero eligiendo como fila pivote (y como consecuencia,
el elemento pivote) aquella cuyo elemento pivote sea el de mayor valor absoluto de su columna. Una vez
elegido el pivote se deben intercambiar ambas filas, esto puede hacerse con la función de Sage
.swap_rows(a,b) que intercambia las filas a y b.
Por ello, el primer paso de este método es encuentrar el máximo, en valor absoluto, de la columna, que será
el pivote. A continuación, se deben intercambiar las filas y posteriormente aplicar el método de Gauss ya
visto.
}
x + 3y + 3z =1
x + 2y =2
2x + 4z =4
A = matrix(RDF,[[1,3,3],[1,2,0],[2,0,4]]); show(A)
b = vector(RDF,[1,2,4]); show(b)
( )
1.0 3.0 3.0
1.0 2.0 0.0
2.0 0.0 4.0
( )
1.0 3.0 3.0 1.0
1.0 2.0 0.0 2.0
2.0 0.0 4.0 4.0
Primero buscamos el pivote utilizando la siguiente función creada que devuelve una lista con dos valores: el
primero es el máximo del vector que recibe, y el segundo es la posición que ocupa dicho máximo en el
vector.
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 11/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
def IndexMax(v):
v = map(abs,v)
max_v = max(v)
i = 0
while v[i] != max_v:
i = i+1
return max_v,i
Si aplicamos dicha función a la primera columna de la matriz Aamp, vemos que el máximo se encuentra en
la tercera fila (posición 2 para Sage).
IndexMax(Aamp[:,0])
(2.0, 2)
show(Aamp)
Aamp.swap_rows(0,IndexMax(Aamp[:,0])[1]); show(Aamp)
( )
1.0 3.0 3.0 1.0
1.0 2.0 0.0 2.0
2.0 0.0 4.0 4.0
( )
2.0 0.0 4.0 4.0
1.0 2.0 0.0 2.0
1.0 3.0 3.0 1.0
Ahora considerando el pivote mayor, podemos aplicar el método de Gauss para hacer ceros debajo del
pivote en las filas 2 y 3.
( )
2.0 0.0 4.0 4.0
0.0 2.0 − 2.0 0.0
1.0 3.0 3.0 1.0
( )
2.0 0.0 4.0 4.0
0.0 2.0 − 2.0 0.0
0.0 3.0 1.0 − 1.0
Aamp.swap_rows(1,IndexMax(Aamp[1:,1])[1]+1); show(Aamp)
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 12/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
( )
2.0 0.0 4.0 4.0
0.0 3.0 1.0 − 1.0
0.0 2.0 − 2.0 0.0
( )
2.0 0.0 4.0 4.0
0.0 3.0 1.0 − 1.0
0.0 0.0 − 2.66666666667 0.666666666667
Una vez transformada la matriz de coefientes en triangular superior, podemos aplicar la sustitución regresiva
para resolver el sistema.
SustRegresiva(Aamp)
(2.5, -0.25, -0.25)
#No me sale
Ejercicio 4. Aplica el método de Gauss con pivoteo parcial para resolver el sistema de
ecuaciones lineales :
}
5x − 3y + z =1
x − 10y + 2z =3
3x − y + 6z =0
A = matrix(RDF,[[5,-3,1],[1,-10,2],[3,-1,6,]]); show(A)
b = vector(RDF,[1,3,0]); show(b)
Aamp = A.augment(b)
show(Aamp)
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 13/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
def IndexMax(v):
v = map(abs,v)
max_v = max(v)
i = 0
while v[i] != max_v:
i = i+1
return max_v,i
print IndexMax(Aamp[:,0])
show(Aamp)
Aamp.swap_rows(0,IndexMax(Aamp[:,0])[1]); show(Aamp)
( )
5.0 − 3.0 1.0
1.0 − 10.0 2.0
3.0 − 1.0 6.0
( )
5.0 − 3.0 1.0 1.0
1.0 − 10.0 2.0 3.0
3.0 − 1.0 6.0 0.0
(5.0, 0)
( )
5.0 − 3.0 1.0 1.0
1.0 − 10.0 2.0 3.0
3.0 − 1.0 6.0 0.0
( )
5.0 − 3.0 1.0 1.0
1.0 − 10.0 2.0 3.0
3.0 − 1.0 6.0 0.0
( )
5.0 − 3.0 1.0 1.0
0.0 − 9.4 1.8 2.8
3.0 − 1.0 6.0 0.0
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 14/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
( )
5.0 − 3.0 1.0 1.0
0.0 − 9.4 1.8 2.8
0.0 0.8 5.4 − 0.6
( )
5.0 − 3.0 1.0 1.0
0.0 − 9.4 1.8 2.8
0.0 0.8 5.4 − 0.6
( )
5.0 − 3.0 1.0 1.0
0.0 − 9.4 1.8 2.8
0.0 − 1.11022302463 × 10 − 16 5.55319148936 − 0.36170212766
Ejercicio 5. Aplica el método de Gauss con pivoteo parcial para resolver el sistema de
ecuaciones lineales:
}
4x + 2y + z =2
2x + 5y − 2z = − 15
3x + 2y + 7z =3
A = matrix(RDF,[[4,2,1],[2,5,-2],[3,2,7,]]); show(A)
b = vector(RDF,[2,-15,3]); show(b)
Aamp = A.augment(b)
show(Aamp)
def IndexMax(v):
v = map(abs,v)
max_v = max(v)
i = 0
while v[i] != max_v:
i = i+1
return max_v,i
print IndexMax(Aamp[:,0])
show(Aamp)
Aamp.swap_rows(0,IndexMax(Aamp[:,0])[1]); show(Aamp)
( )
4.0 2.0 1.0
2.0 5.0 − 2.0
3.0 2.0 7.0
( )
4.0 2.0 1.0 2.0
2.0 5.0 − 2.0 − 15.0
3.0 2.0 7.0 3.0
(4.0, 0)
( )
4.0 2.0 1.0 2.0
2.0 5.0 − 2.0 − 15.0
3.0 2.0 7.0 3.0
( )
4.0 2.0 1.0 2.0
2.0 5.0 − 2.0 − 15.0
3.0 2.0 7.0 3.0
( )
4.0 2.0 1.0 2.0
0.0 4.0 − 2.5 − 16.0
3.0 2.0 7.0 3.0
( )
4.0 2.0 1.0 2.0
0.0 4.0 − 2.5 − 16.0
0.0 0.5 6.25 1.5
( )
4.0 2.0 1.0 2.0
0.0 4.0 − 2.5 − 16.0
0.0 0.5 6.25 1.5
( )
4.0 2.0 1.0 2.0
0.0 4.0 − 2.5 − 16.0
0.0 0.0 6.5625 3.5
Ejercicio 6. Aplica el método de Gauss con pivoteo parcial para resolver el sistema de
ecuaciones lineales:
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 16/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
}
3x + z =0
4x + 9y − 3z =4
− 2x + 4z =1
A = matrix(RDF,[[3,0,1],[4,9,-3],[-2,0,4]]); show(A)
b = vector(RDF,[0,4,1]); show(b)
Aamp = A.augment(b)
show(Aamp)
def IndexMax(v):
v = map(abs,v)
max_v = max(v)
i = 0
while v[i] != max_v:
i = i+1
return max_v,i
print IndexMax(Aamp[:,0])
show(Aamp)
Aamp.swap_rows(0,IndexMax(Aamp[:,0])[1]); show(Aamp)
( )
3.0 0.0 1.0
4.0 9.0 − 3.0
− 2.0 0.0 4.0
( )
3.0 0.0 1.0 0.0
4.0 9.0 − 3.0 4.0
− 2.0 0.0 4.0 1.0
(4.0, 1)
( )
3.0 0.0 1.0 0.0
4.0 9.0 − 3.0 4.0
− 2.0 0.0 4.0 1.0
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 17/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
( )
4.0 9.0 − 3.0 4.0
3.0 0.0 1.0 0.0
− 2.0 0.0 4.0 1.0
( )
4.0 9.0 − 3.0 4.0
0.0 − 6.75 3.25 − 3.0
− 2.0 0.0 4.0 1.0
( )
4.0 9.0 − 3.0 4.0
0.0 − 6.75 3.25 − 3.0
0.0 4.5 2.5 3.0
( )
4.0 9.0 − 3.0 4.0
0.0 − 6.75 3.25 − 3.0
0.0 4.5 2.5 3.0
( )
4.0 9.0 − 3.0 4.0
0.0 − 6.75 3.25 − 3.0
0.0 0.0 4.66666666667 1.0
Ejercicio 7. Sea DNI la suma de los números de tu DNI y dni = DNI / 2.9 ln ( DNI ) , aplica
el método de Gauss con pivoteo parcial para resolver el siguiente sistema de
ecuaciones:
}
(12 + dni)x − y + z =1
5x + 4y − 2z =2
− 2x + y − 6z =3
DNI = 38
dni = DNI/2.9^(ln(DNI))
A = matrix(RDF,[[(12+dni),-1,1],[5,4,-2],[-2,1,-6,]]); show(A)
b = vector(RDF,[1,2,3]); show(b)
Aamp = A.augment(b)
def IndexMax(v):
v = map(abs,v)
max_v = max(v)
i = 0
while v[i] != max_v:
i = i+1
return max_v,i
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 18/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
IndexMax(Aamp[:,0])
print IndexMax(Aamp[:,0])
Aamp[1,:] = Aamp[1,:] - Aamp[1,0]/Aamp[0,0]*Aamp[0,:]; show(Aamp)
Aamp[2,:] = Aamp[2,:] - Aamp[2,0]/Aamp[0,0]*Aamp[0,:]; show(Aamp)
IndexMax(Aamp[:,1])
print IndexMax(Aamp[:,1])
( )
12.7902618907 − 1.0 1.0
5.0 4.0 − 2.0
− 2.0 1.0 − 6.0
(12.790261890678588, 0)
( )
12.7902618907 − 1.0 1.0 1.0
0.0 4.39092240978 − 2.39092240978 1.60907759022
− 2.0 1.0 − 6.0 3.0
( )
12.7902618907 − 1.0 1.0 1.0
0.0 4.39092240978 − 2.39092240978 1.60907759022
0.0 0.843631036089 − 5.84363103609 3.15636896391
(4.390922409778329, 1)
( )
12.7902618907 − 1.0 1.0 1.0
0.0 4.39092240978 − 2.39092240978 1.60907759022
0.0 0.0 − 5.38426141815 2.84721574554
x = A.solve_right(b); show(x)
( )
12.7902618907 − 1.0 1.0
5.0 4.0 − 2.0
− 2.0 1.0 − 6.0
Utilizamos la función A.solve_right() para poder comparar los dos resultados. En este caso se cumple.
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 19/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
Ejercicio 8. Sea DNI la suma de los números de tu DNI y dni = DNI / 2.9 ln ( DNI ) , y sea el
sistema de ecuaciones lineales:
}
(4 − dni)x + 2y − z =2
6x + 8y + 3z =9
− 3x + 5y − 9z =1
b) Aplica el método de Gauss con pivoteo parcial para resolver el sistema de ecuaciones
anterior.
print "A)"
DNI = 38
dni = (DNI)/2.9^(ln(DNI))
A = matrix(RDF,[[(4-dni),2,-1],[6,8,3],[-3,5,-9,]]); show(A)
b = vector(RDF,[2,9,1]); show(b)
Resolver (A,b)
A)
( )
3.20973810932 2.0 − 1.0
6.0 8.0 3.0
− 3.0 5.0 − 9.0
(3, 3)
( )
3.20973810932 2.0 − 1.0 2.0
0.0 4.26137722416 4.86931138792 5.26137722416
− 3.0 5.0 − 9.0 1.0
( )
3.20973810932 2.0 − 1.0 2.0
0.0 4.26137722416 4.86931138792 5.26137722416
0.0 6.86931138792 − 9.93465569396 2.86931138792
( )
3.20973810932 2.0 − 1.0 2.0
0.0 4.26137722416 4.86931138792 5.26137722416
0.0 0.0 − 17.7839528599 − 5.61199326569
( )
3.20973810932 2.0 − 1.0 2.0
0.0 4.26137722416 4.86931138792 5.26137722416
0.0 0.0 − 17.7839528599 − 5.61199326569
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 20/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
(None, None)
print "B)"
DNI = 38
dni = (DNI)/2.9^(ln(DNI))
A = matrix(RDF,[[(4-dni),2,-1],[6,8,3],[-3,5,-9,]]); show(A)
b = vector(RDF,[2,9,1]); show(b)
Aamp = A.augment(b)
def IndexMax(v):
v = map(abs,v)
max_v = max(v)
i = 0
while v[i] != max_v:
i = i+1
return max_v,i
IndexMax(Aamp[:,0])
print IndexMax(Aamp[:,0])
Aamp[1,:] = Aamp[1,:] - Aamp[1,0]/Aamp[0,0]*Aamp[0,:]; show(Aamp)
Aamp[2,:] = Aamp[2,:] - Aamp[2,0]/Aamp[0,0]*Aamp[0,:]; show(Aamp)
IndexMax(Aamp[:,1])
print IndexMax(Aamp[:,1])
( )
3.20973810932 2.0 − 1.0
6.0 8.0 3.0
− 3.0 5.0 − 9.0
(6.0, 1)
( )
3.20973810932 2.0 − 1.0 2.0
0.0 4.26137722416 4.86931138792 5.26137722416
− 3.0 5.0 − 9.0 1.0
( )
3.20973810932 2.0 − 1.0 2.0
0.0 4.26137722416 4.86931138792 5.26137722416
0.0 6.86931138792 − 9.93465569396 2.86931138792
(6.8693113879214565, 2)
( )
3.20973810932 2.0 − 1.0 2.0
0.0 4.26137722416 4.86931138792 5.26137722416
0.0 0.0 − 17.7839528599 − 5.61199326569
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 21/22
27/10/22, 21:30 GDIGG_AMAT_2223_Practica3_vfernandc -- Sage
x = A.solve_right(b); show(x)
( )
3.20973810932 2.0 − 1.0
6.0 8.0 3.0
− 3.0 5.0 − 9.0
Como podemos observar la aproximación del resultado se asemeja a cualquiera de los dos métodos.
https://sage-cum.unex.es:8015/home/GDGG22vfernandc/2/print 22/22