Actualizado el 21 de Marzo del 2018 (Publicado el 10 de Marzo del 2018)
2.092 visualizaciones desde el 10 de Marzo del 2018
70,8 KB
3 paginas
Creado hace 10a (30/01/2015)
Programaci´on:
Soluci´on de sistemas de ecuaciones lineales usando
la eliminaci´on de Gauss con pivotes diagonales
Objetivos. Programar el m´etodo de eliminaci´on de Gauss sin pivoteo (esto es, con pivotes
diagonales). Programar la soluci´on de un sistema de ecuaciones lineales.
Requisitos. Operaciones con matrices, programaci´on de operaciones elementales, susti-
tuci´on hacia atr´as.
Eliminaci´on de Gauss con pivotes diagonales
1. Algoritmo Reduce1 (pseudoc´odigo).
Entrada: matriz A.
Variables locales: B, m, n, k, i, j;
m := n´umero de renglones de A;
n := n´umero de columnas de A;
B := una copia de A;
Para p := 1, ..., m - 1:
// Comentario: usamos B[p, p] como pivote
Para i := p + 1, ..., m:
mu := - B[i, p] / B[p, p];
B[i, p] := 0;
Para j := p + 1, ..., n:
B[i, j] := B[i, j] + mu * B[p, j];
Salida: B.
2. Eliminaci´on de Gauss con pivotes diagonales. Escriba una funci´on Reduce1 de
un argumento matricial que reduzca la matriz dada.
Entrada: una matriz rectangular A de tama˜no m × n, m ≤ n.
Salida: la matriz triangular superior B que se obtiene de la matriz A al aplicar la
eliminaci´on de Gauss.
Se supone que a la matriz A se puede aplicar el m´etodo de eliminaci´on de Gauss con
pivotes diagonales, es decir, para cada p en el paso n´umero p la entrada (p, p) es no nula.
3. Comprobaci´on. Aplique la funci´on Reduce1 a la siguiente matriz:
2 −1 −2 3 1
1 −2 1 5
−2 −2 −1 4 3
4
.
A =
Respusta correcta:
2 −1 −2
3
0 −1
0
0
3 1
2 −5 3
2 7
.
Programaci´on: eliminaci´on de Gauss con pivotes diagonales, p´agina 1 de 3
Juntar datos en una matriz aumentada.
Sacar datos de una matriz aumentada
Ejemplo: primer m´etodo para juntar una matriz y un vector en la matriz au-
mentada. Construir una matriz nula y llenar sus partes usando subconjuntos de ´ındices:
a = {{1, 2}, {3, 4}}; b = {-1, -2};
aext = Table[0, {2}, {3}]
aext[[All, Range[1, 2]]] = a; aext[[All, 3]] = b; MatrixForm[aext]
Ejemplo: segundo m´etodo para juntar una matriz y un vector en la matriz
aumentada. Usar la funci´on MapThread:
a = {{1, 2}, {3, 4}}; b = {-1, -2};
aext = MapThread[Append, {a, b}]
Para comprender que hace MapThread, se recomenda probar el siguiente ejemplo:
Plus[5, 3]
MapThread[Plus, {{100, 200, 300}, {4, 5, 6}}]
Ejemplo: primer m´etodo para sacar de la matriz aumentada la matriz de
coeficientes y el vector de constantes. Usar subconjuntos de ´ındices:
aext = {{1, 2, 3, 4}, {5, 6, 7, 8}}
aext[[All, Range[1, 3]]]
aext[[All, 4]]
Ejemplo: segundo m´etodo para sacar de la matriz aumentada la matriz de
coeficientes y el vector de constantes. Aplicar las funciones Most y Last a cada fila:
aext = {{1, 2, 3, 4}, {5, 6, 7, 8}}
Map[Most, aext]
Map[Last, aext]
Programaci´on: eliminaci´on de Gauss con pivotes diagonales, p´agina 2 de 3
Soluci´on de sistemas de ecuaciones lineales
usando la eliminaci´on de Gauss con pivotes diagonales
4. Problema: LinSolve1. Escriba una funci´on LinSolve1[A , b ] que resuelva el sis-
tema de ecuaciones lineales Ax = b usando las funciones Reduce1 y SolveUT.
5. Haga la comprobaci´on de la funci´on LinSolve1 con
A =
4
b =
2 −1 −2
1 −2
−2 −2 −1
,
.
7
9
−4
La respuesta correcta es (4, −3, 2).
Comprobaci´on del m´etodo de Gauss con datos aleatorios
6. RandVector. Escriba una funci´on RandVector[n , vmin , vmax ] que construya
un vector aleatorio de longitud n con componentes reales pertenecientes al intervalo
[vmin, vmax].
7. RandMatrix. Escriba una funci´on RandMatrix[m , n , vmin , vmax ] que constru-
ya una matriz aleatoria de tama˜no m × n con entradas reales pertenecientes al intervalo
[vmin, vmax].
8. Comprobaci´on con matrices peque˜nas. Aplique la funci´on LinSolve1 a una matriz
aleatoria y un vector aleatorios de tama˜no peque˜no:
a = RandMatrix(3, 3, -5, 5); b = RandMatrix(3, -5, 5)
x = LinSolve1(a, b)
a . x
Norm[a . x - b]
9. Comprobaci´on con matrices grandes. Aplique la funci´on LinSolve1 a una matriz
aleatoria y un vector aleatorio de tama˜no grande (por ejemplo, n = 1000). Para estimar
el error, calcule Norm[a . x - b].
Programaci´on: eliminaci´on de Gauss con pivotes diagonales, p´agina 3 de 3
Comentarios de: Programación: Solución de sistemas de ecuaciones lineales usando la eliminación de Gauss con pivotes diagonales (0)
No hay comentarios