Está en la página 1de 18

TECNOLGICO NACIONAL DE MXICO

INSTITUTO TECNOLGICO DE CERRO AZUL


INGENIERA EN SISTEMAS
COMPUTACIONALES

MTODOS NUMRICOS
UNIDAD 3:
Mtodos de solucin de sistemas de
ecuaciones.

REPORTE DE PRCTICAS

ALUMNO:
SIERRA GONZLEZ FRANCISCO

FACILITADOR:
ING. RUSBEL BERMUDEZ RIVERA

Cerro Azul, Ver. 27 de marzo


de 2017
INTRODUCCIN

El presente reporte, correspondiente a la unidad 3 de la materia, abarca los


siguientes aspectos, llevados a cabo con ayuda del software GNU Octave:

Manipulacin de un polinomio, es decir, evaluarlo con diferentes valores


para las incgnitas, calcular su derivada, y determinar sus races.

Uso de los mtodos de Gauss-Jordan y Gauss-Seidel para encontrar las


soluciones de un sistema de ecuaciones lineales.

*Con propsitos de comprensin, las lneas codificadas se muestran resaltadas en


color prpura y los comandos utilizados en color azul.

Pgina | 2
EJERCICIO 1. Manipulacin de un polinomio

Tomando el siguiente polinomio para el ejemplo:

f(x) = x5 3.5x4 + 2.75x3 + 2.125x2 3.875x + 1.25

En GNU Octave. Primero se expresa el polinomio como un vector, insertando solo


los coeficientes al implementarlo en el Command Window.

Para evaluar el polinomio con algn valor para las incgnitas, se usa la funcin:
polyval()
Que recibe como parmetros, al polinomio y al valor en que se quiere evaluar,
separados por una coma.

Para calcular la derivada del polinomio usamos:


polyder()
Como parmetro, le pasamos el polinomio

Pgina | 2
Por ltimo, para obtener las races de dicho polinomio, se tiene la funcin:
roots()
Que recibe al polinomio en cuestin como parmetro:

EJERCICIO 2. Resolver un sistema de ecuaciones con el mtodo de Gauss-


Jordan

Para poder usar este mtodo se requiere una matriz aumentada que consta de la
combinacin de dos partes del sistema de ecuaciones lineales:

La matriz de coeficientes
Y el vector de constantes

Se utiliz el siguiente sistema de ecuaciones para el ejemplo:

Primeramente, se expresa en GNU Octave, el sistema en forma de matriz,


tomando solo los coeficientes. Las filas se separan con punto y coma. En este
caso la matriz tendr el nombre de A

Pgina | 3
Este software incluye una funcin que realiza automticamente las operaciones,
arrojando como resultado una matriz identidad y los valores de las incgnitas en el
vector de constantes. Esta funcin es:
rref()
Como parmetro se incluye la matriz en cuestin.

Ejecutamos la funcin con la matriz A como parmetro:

O podemos guardar el resultado en otra matriz, llamada en este caso B

Pgina | 4
EJERCICIO 3. Mtodo de Gauss-Jordan codificado.

Se utiliz el cdigo proporcionado por el instructor, que a continuacin se explica:

Las siguientes lneas son, un mensaje y dos entradas de datos respectivamente,


se explican por s mismas:
fprintf('Ingrese la matriz aumentada\n\n');
f=input('Cuantas filas tiene la matriz: ');
c=input('Cuantas columnas tiene la matriz: ');

Se inicia un ciclo for, desde 1 hasta el No. De iteraciones ingresado. Este llevar el
contador para recorrer las columnas de la matriz.
for k=1:c

Dentro, se abre un ciclo for adicional, comenzando en 1 hasta el No. De filas


ingresado. Esta vez es para recorrer las filas de la matriz.
for j=1:f

Se procede a insertar los coeficientes de la matriz, columna por columna.


Comienza en la fila 1
fprintf('fila : %x\n',j)

Y en la columna 1
fprintf('columna : %x',k)

El elemento a insertar se guarda en la variable r


r=input( ' Numero de la columna: ');

Despus se asigna el elemento guardado en r a la matriz a en la posicin


indicada por los contadores de los ciclos (1,1 para el primer caso)
a(j,k)=r;

Al final de este for anidado, se incrementa j en 1, lo que quiere decir que se pasa
a la siguiente fila.
j=j+1;

Se siguen insertando datos hasta terminar la columna en cuestin


end

Una vez termina de llenarse la 1er columna, pasa a la siguiente y se repite el


proceso.

Pgina | 5
k=k+1;
end
Al terminar de insertar datos en la matriz, se visualiza la misma:
a

Pgina | 6
La siguiente sentencia, pausa el programa por 1 segundo
pause(1)

El siguiente ciclo se encarga de normalizar todos los renglones, es decir convertir


todos los elementos de la diagonal principal en 1 adems de obtener la matriz
triangular inferior de ceros

Proseguimos con la parte de las operaciones que conlleva este mtodo.

Se declara un ciclo for desde 1 hasta el No. de columnas menos 1


for k=1:c-1

a(k,:) hace referencia a un rengln de la matriz, el No. de rengln depende del


contador propio del ciclo (por ejemplo, en la primera iteracin, se refiere al primer
rengln)
Por lo que la siguiente sentencia representa la normalizacin de un rengln, que,
en la iteracin inicial, es la divisin del primer rengln entre su elemento pivote.
a(k,:)=a(k,:)/a(k,k);

Se incluye un for anidado que va desde el valor de k+1 hasta el No. de filas
for j=k+1:f

La siguiente sentencia se ocupa de calcular un rengln auxiliar para despus


obtener su diferencia con un rengln original, y as convertir a 0 el elemento con
los ndices (k,j)
a(j,:)=a(j,:)-a(k,:)*a(j,k);

Se incrementa j, es decir, se pasa al elemento de la siguiente fila, mantenindose


en la columna actual.
j=j+1;

Despus se visualiza la matriz actual y se pausa el programa por 0.1 segundos


a
pause(0.1)

Termina el proceso de normalizacin y eliminacin en la 1ra columna


end

Se incrementa k, significa que se pasa a la siguiente columna para repetir el


proceso
k=k+1;

Pgina | 7
Se imprime la matriz resultante y se hace una pausa de 0.1 segundos
a
pause(0.1)

Termina el ciclo para obtener la diagonal principal de unos, con la matriz triangular
inferior de ceros.
end

Pgina | 8
Pgina | 9
El siguiente ciclo, que es la parte final del cdigo para este mtodo, se encarga de
obtener la matriz triangular superior de ceros.

Inicializamos el ciclo, que va desde el No. de filas ingresado hasta el nmero 2,


haciendo un decremento de 1 en cada iteracin.
La variable k representa la columna. Esto es para que el recorrido comience
desde la ltima columna, retrocediendo una columna en cada iteracin.
for k=f:-1:2

Este for anidado se encarga de ubicar la fila donde est el elemento a convertir en
0
for j=k-1:-1:1

La siguiente sentencia se ocupa de calcular un rengln auxiliar para despus


obtener su diferencia con un rengln original, y as convertir a 0 el elemento con
los ndices (j,k)
a(j,:)=a(j,:)-a(k,:)*a(j,k);

A continuacin, se pasa a la fila superior, se muestra la matriz actual, se pausa el


programa 0.1 segundos y se repite el proceso hasta llegar a la primer fila.
j=j-1;
a
pause(0.1)
end

Al terminar una columna, se pasa a la anterior y se repite hasta completar la matriz


triangular superior de ceros.
k=k-1;
end

Al final de todo, se imprime la matriz resultante, que consta de una matriz


identidad y un vector de constantes que contiene los valores de las incgnitas.
fprintf('resultado\n');
a

Pgina | 10
Valores de
las
incgnitas

MTODO DE GAUSS-JORDAN CDIGO COMPLETO

Pgina | 11
CONCLUSIN

EJERCICIO 4. Mtodo de Gauss-Seidel codificado.

A continuacin, se describe el cdigo proporcionado por el instructor:

Pgina | 12
Se comienza limpiando el espacio de trabajo y estableciendo las cantidades en
formato corto (4 decimales)
clear all;
format short;

Observamos una nueva funcin del lenguaje, choice se trata


de una estructura de decisin que junto a un condicional,
permite avanzar o salir del programa, segn el usuario quiera.
Tiene las ventajas de ser una opcin grfica y la posibilidad de
incluir mltiples opciones.
choice = menu ("Vende su alma?", 'yes','no')
if choice==1
continue
else
quit
end

Otra manera de decidir el flujo del programa es con la funcin yes_or_no, esta
permite elegir entre las opciones, valga la redundancia, si o no.
z = yes_or_no ("Welcome to hell \nDeseas vender tu alma?");
if z==1
continue
else
quit
end

Despus se extraen los elementos


En este cdigo de
(coeficientes) se opt por una
la matriz diferente
y cada uno manera de insertar la matriz. Esta vez se
lees
pide guardado
al usuario como
en dato
una de variable
entrada.
A=input('Entonces introduzca su matriz: ');
diferente.

Se pide %Renglon
el No. de iteraciones
1 a realizar:
cont=input('Introduzca
b1= A(1,4); el numero de iteraciones cont: ');
a13=A(1,3);
a12=A(1,2);
a11=A(1,1);
%Renglon 2
b2=A(2,4);
a23=A(2,3);
a22=A(2,2);
a21=A(2,1);
%Renglon 3
b3=A(3,4); Pgina | 13
a33=A(3,3);
a32=A(3,2);
a31=A(3,1);
Establecemos los valores iniciales
para x2 & x3
%Condiciones iniciales
x2=0;
x3=0;

Y con un ciclo for, realizamos las


iteraciones, comenzando en 1 hasta
llegar al lmite de iteraciones
ingresado por el usuario:
for i=1:cont

Se incorporan las frmulas para este


mtodo:
x1=(b1-(a12*x2)-(a13*x3))/a11;
x2=(b2-(a21*x1)-(a23*x3))/a22;
x3=(b3-(a31*x1)-(a32*x2))/a33;

Se agregan los valores obtenidos en cada frmula en una matriz llamada S


S(i,:)= [i x1 x2 x3];

Se repite el proceso. Cada valor obtenido en una frmula es usado


inmediatamente en la siguiente frmula.
end

Al final slo se imprime la matriz resultante, con un encabezado:


fprintf('\n \t i \t x1\t x2\t x3 \n')
disp(S)

MTODO DE GAUSS-SEIDEL CDIGO COMPLETO

Pgina | 14
Como informacin adicional, se incluye una pequea modificacin al cdigo
anterior, que da como resultado el programa para el Mtodo de Jacobi visto en
esta unidad 3.

Slo se modifican los valores iniciales de la siguiente manera:

Pgina | 15
%Condiciones iniciales
v1=0;
v2=0;
v3=0;

Estos valores iniciales se usan en la 1ra iteracin


for i=1:cont
x1=(b1-(a12*v2)-(a13*v3))/a11;

x2=(b2-(a21*v1)-(a23*v3))/a22;

x3=(b3-(a31*v1)-(a32*v2))/a33;

Una vez evaluadas las frmulas con dichos valores iniciales, se actualizan. Ahora
los resultados de la 1ra iteracin se guardan para ser utilizados en la siguiente, y
as sucesivamente.
v1=x1;
v2=x2;
v3=x3;

S(i,:)= [i x1 x2 x3];
end

CONCLUSIN

El uso de software matemtico para manipular ecuaciones de diferentes formas


permite ahorrar mucho tiempo y esfuerzo.

Encontrar las soluciones de sistemas de ecuaciones lineales usando solo lpiz y


papel puede ser bastante tedioso, dependiendo de la magnitud de dicho sistema.

Pgina | 16
Es por eso que software como MATLAB o GNU Octave son de bastante ayuda.
Solamente que tambin se debe tener en mente la procedencia de todos nuestros
resultados, el procedimiento a llevar a cabo para obtenerlos, esos pasos que
realiza el software automticamente. Pienso que ah se encuentra el por qu
realizar un mismo mtodo de dos formas diferentes que ofrece el software
utilizado.
Sabiendo de dnde sale todo eso podemos evitar problemas futuros (^^).

Haciendo una comparativa entre estos mtodos vistos en la prctica, en general


se puede decir que el mtodo de Gauss-Jordan conlleva mucho ms
procedimiento que los dems, hasta en la codificacin se puede observar, sin
embargo, ofrece la mejor solucin a un sistema de ecuaciones lineales.
En cuanto a Gauss-Seidel y Jacobi, ambos se aproximan ms rpido a la solucin,
pero si no se utilizan valores iniciales adecuados, puede darse el caso de que
exista divergencia.

Pgina | 17