Está en la página 1de 76

INSTITUTO POLITÉCNICO NACIONAL

Escuela Superior De Ingeniería Mecánica y Eléctrica


Unidad Zacatenco

MÉTODOS NUMÉRICOS

“MÉTODO DE BISECCIÓN”

Prof. Manuel Torres Sabino

Integrantes del equipo:


Amaro Sánchez Ricardo Daniel
Gutiérrez Rosales Germán
Ramírez Ramos Jocelyn Marie

GRUPO: 2SM1

ING. EN SISTEMAS AUTOMOTRICES EQUIPO NO. 1


OBJETIVO(S):

1. Al terminar el estudio del método de bisección el alumno deberá tener el


suficiente dominio para poder solucionar con éxito una amplia variedad de
problemas de ingeniería (adaptables al método), relacionados con las
raíces de ecuaciones.
2. Hacer uso de la interpretación gráfica para corroborar los resultados
obtenidos mediante el método de bisección.
3. Entender el concepto de convergencia y saber por qué el método de
bisección (método cerrado) siempre converge.
4. Analizar los resultados obtenidos a través del programa para poder realizar
una comparación con los obtenidos manualmente.
5. Ser capaz de explicar el por qué difieren los resultados por medio de la
programación y los manuales en caso de existir alguna discrepancia.
MÉTODO DE BISECCIÓN
Sea f una función continua en un intervalo [a, b], y f(a)∙f(b) < 0. Por teorema del
valor intermedio para funciones continuas, existe al menos una raíz, tal
que f(α) = 0.

Este método consiste en dividir sucesivamente el intervalo [a, b], por la mitad,


hasta que la longitud del subintervalo que contiene a la raíz α sea menor que
alguna tolerancia especificada ε.

VENTAJAS: 

– Siempre converge.
– Útil como aproximación inicial de otros métodos.

DESVENTAJAS: 

– No tiene en cuenta la magnitud de los valores de la función en las


aproximaciones calculadas Xn, solo tiene en cuenta el signo de f(x), lo que
hace que una aproximación intermedia, mejor que la respuesta final, pase
desapercibida. 
– Convergencia lenta.

¿EN QUÉ CONSISTE EL MÉTODO DE BISECCIÓN?

Este método consiste en obtener una mejor aproximación de la raíz a partir de un


intervalo inicial (a, b) en el cual hay un cambio de signo en la función, es decir:
f(a)∙f(b)<0.

Se obtiene el punto medio:


Xm es la nueva aproximación a la raíz, y se vuelve a tomar un intervalo, pero ahora
más pequeño, considerando que siga existiendo un cambio de signo en la función,
es decir, el nuevo intervalo queda determinado por:

no

El método termina cuando se cumple con alguna condición de paro, en este


programa la condición es la tolerancia:

Los pasos del método son los siguientes: 

1.- Localizar un intervalo que contenga al menos una raíz.

2.- Dividir el intervalo en dos partes iguales reteniendo la mitad en donde f(x)
cambia de signo, para conservar al menos una raíz.

3.- Repetir el proceso varias veces hasta cumplir con la tolerancia deseada.

si:

      f(m) f(b)<0 entonces conservar (m, b) como el semi intervalo que contiene al
menos una raíz.
A cada paso se le llama “iteración” y reduce el intervalo a la mitad.

Después de cada iteración el intervalo se reduce a la mitad, después de n


iteraciones, el intervalo original se había reducido 2 n veces, por lo tanto, si el
intervalo original es de tamaño “a” y el criterio de convergencia aplicado al valor
absoluto de la diferencia de dos Xm consecutivas es “   ”, entonces se requerían
“n” iteraciones donde “n” se calcula con la igualdad de la expresión:

de donde:          iteraciones que se requieren.


SISTEMA A RESOLVER
Determine las raíces de f ( x )=−26+85 x−91 x 2+ 44 x 3−8 x 4 + x 5 utilizando el método
de bisección para localizar la raíz más grande con un ε s=10 % . Utilice

Xl=0.5 Xu=1 . Anexe la gráfica de dicha función para corroborar los resultados.

i=1
Xl=0.5 Xu=1
f ( Xl ) f ( Xu ) < 0
f ( Xl ) =f ( 0.5 ) =−1.21
f ( Xu )=f ( 1.0 ) =5

f (−1.21 ) f ( 5 ) =−6.05
Por lo tanto existe al menos una raíz en el intervalodado

Xl + Xu 0.5+1
Xr= = =0.75
2 2

0.75−0
ε a 1=│ │∗100 %=100 %
0.75

f ( Xr )=f ( 0.75 ) =2.38

f ( Xl ) f ( Xr ) =f ( 0.5 ) f ( 0.75 ) =(−1.21 )( 2.38 )=−3.42

Por lo tanto se asigna Xr =Xu=0.75

i=2
Xl=0.5 Xu=0.75

Xl + Xu 0.5+0.75
Xr= = =0.625
2 2

0.625−0.75
ε a 2=│ │∗100 %=20 %
0.625

f ( Xr )=f ( 0.625 ) =1.19


f ( Xl ) f ( Xr ) =f ( 0.5 ) f ( 0.625 ) =(−1.21 )( 1.19 ) =−1.44
Por lo tanto se asigna Xr =Xu=0.625

i=3
Xl=0.5 Xu=0.625

Xl + Xu 0.5+0.625
Xr= = =0.5625
2 2

0.5625−0.625
ε a 3=│ │∗100 %=11.11 %
0.5625

f ( Xr )=f ( 0.5625 ) =0.105

f ( Xl ) f ( Xr ) =f ( 0.5 ) f ( 0.5625 ) =(−1.21 )( 0.105 )=−0.127


Por lo tanto se asigna Xr =Xu=0.5625

i=4
Xl=0.5 Xu=0.5625

Xl + Xu 0.5+0.5625
Xr= = =0.53125
2 2

0.53125−0.5625
ε a 4=│ │∗100 %=5.88 %
0.53125

Por lo tantola raíz es Xr=0.53125 con un porcentaje de error de ε a =5.88 %


f ( x )=−26+85 x−91 x 2+ 44 x 3−8 x 4 + x 5

Iteración Xl Xu Xr ε a (%)
1 0.5 1.0 0.75 100
2 0.5 0.75 0.625 20
3 0.5 0.625 0.5625 11.11
4 0.5 0.5625 0.53125 5.88
ALGORITMO
1) Elija valores iniciales inferiores (Xl) y superiores (Xu) que encierren la raíz.
Tal que f(Xl)∙f(Xu) < 0

2) Una aproximación a la raíz se determina mediante:

Xl + Xu
Xr=
2
3) Realice las siguientes evaluaciones para determinar en que subintervalo
está la raíz.

a) Si f(Xl)∙f(Xr) < 0, entonces la raíz se encuentra dentro del subintervalo


izquierdo. Por lo tanto, haga Xu=Xr y vuelva al paso 2.

b) Si f(Xl)∙f(Xr) > 0, entonces la raíz se encuentra dentro del subintervalo


derecho. Por lo tanto, haga Xl=Xr y vuelva al paso 2.

c) Si f(Xl)∙f(Xr) = 0, entonces la raíz es igual a Xr; termina el cálculo.


DIAGRAMA DE FLUJO
CÓDIGO
//PRÁCTICA 1. MÉTODO DE BISECCIÓN

#include <stdlib.h>
#include <math.h>
#include <stdio.h>

int main ()
{
//DECLARACIÓN DE VARIABLES
double Xl,Xu,Es,FXl=0.0,FXu=0.0, Xrant=0.0,Xr=0.0,FXr=0.0,Ea=0.0;
int i=1;

//SE IMPRIME EL MÉTODO Y LA FUNCIÓN QUE SE ESTA EVALUANDO


printf ("\nCALCULO DE RAICES DE UNA FUNCION POR EL METODO DE BISECCION\n");
printf ("\nf(x)= -26 + 85x - 91x^2 + 44x^3 - 8x^4 + x^5 Xl=0.5 Xu=1.0
Es=10%\n\n");

//LEE Xl, Xu y Es
printf ("\nIngrese el valor del intervalo inferior: ");scanf ("%lf",&Xl);
printf ("\nIngrese el valor del intervalo superior: ");scanf ("%lf",&Xu);
printf ("\nIngrese el error estimado para el calculo de la raiz: ") ;
scanf("%lf",&Es);

//EVALUACIÓN DE LA FUNCIÓN
FXl= -26 + 85*Xl - 91*pow(Xl,2) + 44*pow(Xl,3) - 8*pow(Xl,4) + pow(Xl,5);
FXu= -26 + 85*Xu - 91*pow(Xu,2) + 44*pow(Xu,3) - 8*pow(Xu,4) + pow(Xu,5);

//SE EVALUA LA CONDICIÓN PARA VER SI EXISTE RAÍZ


system("cls");
system("color 0B");
if ((FXl*FXu)<0)
{
printf ("\n\t\t\t\tEXISTE AL MENOS UNA RAIZ EN EL INTERVALO\n\n");
printf("Iteracion\t Xl\t\t Xu\t\t Xr\t\t Ea(%%)\n\n");

//INICIO DEL PROCESO ITERATIVO


do
{
printf(" %d \t\t %0.6lf \t %0.6lf", i, Xl, Xu);
Xrant=Xr;
Xr= (Xl + Xu)/2;
FXr= -26 + 85*Xr - 91*pow(Xr,2) + 44*pow(Xr,3) - 8*pow(Xr,4) +
pow(Xr,5);

//EVALUA LAS CONDICIONES DEL METODO DE BISECCIÓN


if ((FXl*FXr)<0)
{
Xu=Xr;
}
if ((FXl*FXr)>0)
{
Xl=Xr;
}

//CALCULO DEL ERROR


Ea=(fabs((Xr-Xrant)/Xr))*100;

//MUESTRA DE RESULTADOS
printf("\t %0.6lf \t %.6lf \n", Xr, Ea);
i=i+1;//CONTADOR PARA LAS ITERACIONES

}
while (Es<Ea); //CONDICIÓN DE PARO PARA EL PROCESO ITERATIVO
}

else//SI NO EXISTE RAÍZ


{
printf ("\nNO EXISTE RAIZ EN EL INTERVALO DADO\n");
}
printf ("\nLa aproximacion de la raiz es %lf con un error de %lf
porciento\n",Xr,Ea);

return 0;
}
RESULTADOS

Se muestra en pantalla el nombre del método y la ecuación a resolver. También se pide


al usuario ingresar Xl, Xu y Es.

Se dan a conocer los resultados a través de una tabla que contiene el número de
iteraciones, los intervalos inferiores(Xl) y superiores (Xu) en cada iteración, así como su
correspondiente porcentaje de error aproximado. Por último, se muestra en pantalla el
resultado a la aproximación de la raíz con su respectivo error aproximado (inferior o igual
al error estimado).
CONCLUSIONES
 Según los resultados obtenidos mediante la programación y los realizados
manualmente, se concluye que el método de bisección al ser un método cerrado
siempre va a converger dando una solución al sistema propuesto, esta solución será
cada vez más aproximada a la raíz verdadera dependiendo del número de
iteraciones, es decir, entre más iteraciones mejores resultados.
 En lo que respecta al trabajo manual para resolución de problemas con este método,
se puede decir que conlleva relativamente mucho tiempo por lo que la programación
ayuda mucho a una mejor eficiencia en cuestión de ahorro de tiempo, aparte de que
es un código sencillo de programar.
Ramírez Ramos Jocelyn Marie.
 El método de bisección es utilizado para encontrar una aproximación precisa a las
raíces de una función. Este método pertenece a los métodos cerrados pues se
necesitan mínimo dos puntos donde se encuentre dicha raíz para poder hacer los
cálculos.
Amaro Sánchez Ricardo Daniel.
 De acuerdo con los resultados obtenidos durante el ejemplo costeado y de estudio e
investigación del método de Bisección, pude darme cuenta de que es un método de
lenta convergencia a comparación de otros métodos presentados posteriormente,
además de que es un método cerrado.
 A pasar de lo anterior, este método presenta una fácil comprensión y realización de
su procedimiento.
Gutiérrez Rosales Germán
Referencias
1. http://aprendeenlinea.udea.edu.co/lms/moodle/mod/page/view.php?id=24501, 31 de
marzo 2018
2. http://aprendeenlinea.udea.edu.co/lms/moodle/mod/page/view.php?id=24501, 31 de
marzo 2018
INSTITUTO POLITÉCNICO NACIONAL

Escuela Superior De Ingeniería Mecánica y Eléctrica


Unidad Zacatenco

MÉTODOS NUMÉRICOS

“MÉTODO DE LA TANGENTE”

Prof. Manuel Torres Sabino

Integrantes del equipo:


Amaro Sánchez Ricardo Daniel
Gutiérrez Rosales Germán
Ramírez Ramos Jocelyn Marie

GRUPO: 2SM1

ING. EN SISTEMAS AUTOMOTRICES EQUIPO NO. 1


OBJETIVO(S):
1. El alumno tendrá el conocimiento teórico de la aplicación del método de la
tangente para la resolución de problemas para el que sean aplicables.

2. Será capaz de identificar los problemas que se pueden solucionar por dicho
método y a los que se deberá aplicar otro método.

3. El alumno aplicará el método de la tangente o Newton-Raphson para la


obtención de raíces y las empleará en la solución de problemas de
ingeniería
Método de la Tangente
Este método es uno de los más utilizados para localizar raíces ya que en general
es muy eficiente y siempre converge para una función polinomial.
Se requiere que las funciones sean diferenciables y, por tanto, continuas para
poder aplicar este método.
Se debe partir de un valor inicial para la raíz: xi , este puede ser cualquier valor, el
método convergirá a la raíz más cercana.

Si se extiende una tangente desde el punto   , el punto donde esta


tangente cruza al eje x representa una aproximación mejorada de la raíz.
 

La fórmula de Newton-Raphson se deduce a partir de la fórmula de la pendiente


de una recta.
Pendiente de una recta:

  
Se define la derivada de una función en un punto dado como la pendiente a la
recta tangente de dicho punto, por lo tanto:

Hay que determinar un número máximo de iteraciones, normalmente esto se hace


considerando una “tolerancia”, esto es:

El valor absoluto de la diferencia de la   debe ser menor que la tolerancia o


el resultado de alguna fórmula de error debe ser menor que la tolerancia dada.
Una de las fórmulas de error más útiles es la del error relativo porcentual
aproximado:

x 100 %
El método de Newton-Raphson es convergente cuadráticamente, es decir, el error
es aproximadamente al cuadrado del error anterior.
Esto significa que el número de cifras decimales correctas se duplica
aproximadamente en cada interacción.
Cuando el método de Newton-Raphson converge, se obtienen resultados en
relativamente pocas interacciones, ya que para raíces no repetidas este método
converge con orden 2 y el error E i+1 es proporcional al cuadrado del resultado
anterior Ei
Supóngase que el error en una iteración es 10 -n el error en la siguiente, (que es
proporcional al cuadrado del error anterior) es entonces aproximadamente 10 -2n, el
que sigue será aproximadamente 10-4n etc.
De esto puede afirmarse que de cada iteración duplica aproximadamente el
número de dígitos correctos.
Sin embargo, el método de Newton-Raphson algunas veces no converge, sino que
oscila. Esto ocurre si no hay raíz real, si la raíz es un punto de inflexión o si el
valor inicial está muy alejado de la raíz buscada y alguna otra parte de la función
“atrapa” la iteración. (3)

Desventajas del Método de Newton-Raphson:


- Lenta convergencia debida a la naturaleza de una función en particular. 
- Cuando un punto de inflexión, f’’(x) = 0, ocurre en la vecindad de una raíz. 
- No existe un criterio general de convergencia.
- Evaluación de la derivada.
SISTEMA A RESOLVER:
Utilice el método de Newton-Raphson para calcular la raíz de f ( x )=e−x −x
empleando como valor inicial x o=0 .

f ( x )=e−x −x f ' ( x )=−e− x −1


x 0=0

i=0 f ( x 0 ) =1 f ' ( x 0 )=−2


f ( x0 ) 1 x −x 0.5−0
x 1=x 0− '
f ( x0)
=0+ =0.5ϵa= 1 0 × 100=
2 x1 0.5 | |
× 100=100 % | |
i=1 f ( x 1 ) =0.1065 f ' ( x 1 )=−1.6
f ( x1 ) 0.1065
x 2=x 1− '
=0.5+ =0.566562
f ( x1 ) −1.6

x 2−x 1 0.566562−0.5
ϵa= | | x2
×100= |
0.566562
×100=11.54 % |
i=2 f ( x 2 ) =0.000911 f ' ( x 2 )=−1.56
f ( x2 ) 0.000911
x 3=x 2− '
=0.566562− =0.567146
f ( x 2) −1.56

x 3−x 2 0.567146−0.566562
ϵa= | | x3
× 100= |
0.567146
×100=0.1 % |
i=3 f ( x 3 ) =−0.000004 f ' ( x 3 )=−1.56
f ( x3 ) −0.000004
x 4 =x3 − '
=0.567146− =0.567143
f ( x3 ) −1.56

x 4 −x3 0.567143−0.567146
ϵa= | | x4
×100= |
0.567143
×100=0.0005 % |
i=4 f ( x 4 )=0.000000 f ' ( x 4 ) =−1.56
f ( x4) 0.000000
x 5=x 4 − '
=0.567143− =0.567143
f ( x4 ) −1.56
x 5−x 4 0.567143−0.567143
ϵa= | | x5
×100=| 0.567143 |
×100=0.0 %

¿ La raíz es x=0.567143 conun error del 0.0 %

f ( x )=e−x −x

i Xi X i +1 ∈a (%)
0 0 0.5 100
1 0.5 0.566311 11.74
2 0.566311 0.567146 0.14
3 0.567146 0.567143 0.0005
4 0.567143 0.557143 0
ALGORITMO
1. Elija un número inicial x0.
2. Calcular f (xi) y f’ (xi) y sustituirlos en la ecuación de NEWTON-RAPHSON
f (x i)
x i+1=x i−
f ' ( x i)

3. Si ¿
entonces xi+1 es la raíz
de otra forma pasar al paso 2.
DIAGRAMA DE FLUJO
CODIGO
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ()
{
float x=0.0, fx=0.0, fpx=0.0, xa=0.0, Ea=0.0, Es=0.0;
int i=0, r=0, con=0, imax=0;
printf ("\n\tMETODO DE NEWTON - RAPHSON\n");
printf ("\nf(x)= (e^-x) - x Xi=0 Es=0%\n\n");
printf ("Inserte valores iniciales:\n");
printf ("X0=\t"); scanf ("%f",&x) ;
printf ("Es=\t"); scanf ("%f",&Es);
system("cls");system("color 1F");
printf ("\ti\tXi\t\tX(i+1)\t\tEa(%c)\n",37);
//Iteraciones
do
{
fx=exp(-x)-x;
fpx=-exp(-x)-1;
xa=x;
x=xa-(fx/fpx);
printf ("\t%d\t%f\t%f",i,xa,x);
//Porcentaje de error
Ea=fabs((x-xa)/x)*100;
printf ("\t%0.2f\n",Ea);
i++;
} while (Ea>Es);//condición de paro
//Resultado
printf ("\n\tLa aproximacion a la raiz es %f con un error de %f",x,Ea,37);
return 0;
}
RESULTADOS

El programa pedirá al usuario que inserte los valores iniciales de X0 y el


porcentaje de error que desea obtener.

El programa imprimirá en forma de tabla los resultados de cada iteración realizada


y el resultado final con el error obtenido.
CONCLUSIONES
 Después de haber analizado el método de la tangente o también llamado
“Newton Raphson” se puede concluir que al ser un método abierto algunas
veces puede divergir, para esto la convergencia en los métodos abiertos es más
segura si el valor inicial está cercano a la raíz verdadera.

 En lo que respecta a la programación, es un método nada complicado para


codificar y además muestra resultados altamente precisos.

Ramírez Ramos Jocelyn Marie

 El método de Newton Raphson pertenece a los métodos abiertos puesto que


es un método que requiere como datos iniciales únicamente un punto y un
porcentaje de error.

 Se puede considerar que este método es de los más efectivos para aplicarlos
en la programación pues su código es más simple que el del método de
bisección.

Amaro Sánchez Ricardo Daniel

 Este método es de más rápida convergencia a comparación del anterior, es


más práctico y entendible, las únicas dificultades que considero podrían influir
en la utilización de este sería encontrar la derivada de las funciones que se
nos presenten, más aún en funciones de alta complejidad, y también el hecho
de que al ser un método que utiliza una línea recta tangente tocando curvas
de las funciones estas pueden no ser tan exactas al momento finalizar el
método iterativo.

Gutiérrez Rosales Germán


Referencias
1. http://test.cua.uam.mx/MN/Methods/Raices/NewtonRaphson/NewtonRaphs
on.php, 31 de marzo 2018
2. http://aprendeenlinea.udea.edu.co/lms/moodle/mod/page/view.php?
id=24504&inpopup=1, 31 de marzo 2018
Instituto Politécnico Nacional
Escuela Superior De Ingeniería Mecánica y Eléctrica
Unidad Zacatenco

MÉTODOS NUMÉRICOS

MÉTODO DE LA SECANTE

Docente:
Manuel Torres Sabino

Integrantes de Equipo:
Gutiérrez Rosales Germán
Amaro Sánchez Ricardo Daniel
Ramírez Ramos Jocelyn Marie

Grupo: 2SM1

Ing. En Sistemas Automotrices Equipo No. 1


OBJETIVO(S):
1. El alumno aprenderá las fórmulas que se aplican en el método de la
secante y cuáles son sus ventajas sobre los otros métodos.

2. Entenderá la secuencia de dicho método y lo podrá aplicar en el lenguaje


computacional.

3. Aplicará el método de la secante para la solución numérica de ecuaciones,


su obtención de raíces y las empleará en la solución de problemas
Método de la Secante
En análisis numérico el método de la secante es un método para encontrar los
ceros de una función de forma iterativa. Uno de los objetivos de este método es
eliminar el problema de la derivada de la función, ya que existen funciones que
describen fenómenos físicos en la vida real, cuya derivada es muy compleja. El
método de la secante es muy similar al de Newton con la diferencia principal que
en este método de la secante no requiere de la segunda derivada. El método se
basa en obtener la ecuación de la recta que pasa por los puntos (xn−1), f(xn−1)) y
(xn, f(xn)). A dicha recta se le llama secante por cortar la gráfica de la función.
Posteriormente se escoge como siguiente elemento de la relación de recurrencia,
xn+1, la intersección de la recta secante con el eje de abscisas obteniendo la
fórmula.

El principal inconveniente del método de Newton estriba en que requiere conocer


el valor de la primera derivada de la función en el punto. Sin embargo, la forma
funcional de f(x) dificulta en ocasiones el cálculo de la derivada. En estos casos es
más útil emplear el método de la secante.
El método de la secante parte de dos puntos (y no sólo uno como el método de
Newton) y estima la tangente (es decir, la pendiente de la recta) por una
aproximación de acuerdo con la expresión:

(1)
 

Sustituyendo esta expresión en la ecuación del método de


Newton, obtenemos la expresión del método de la secante que nos proporciona el
siguiente punto de iteración:

(2)
 

 
Figure: Representación geométrica del
método de la secante.

En la siguiente iteración, emplearemos los puntos x1 y x2para estimar un nuevo


punto más próximo a la raíz de acuerdo con la ecuación (2). En la figura se
representa geométricamente este método.
En general, el método de la secante presenta las mismas ventajas y limitaciones
que el método de Newton-Raphson explicado anteriormente.
El método de la secante es un método que permite evaluar las raíces defunciones
cuya derivada es difícil de calcular. En dichos casos, la derivada se puede
aproximar mediante una diferencia neta dividida hacia atrás. Y se obtiene de este
modo la fórmula iterativa.
SISTEMA A RESOLVER
2

Utilice el método de la secante para calcular la raíz de f ( x )=e−x −x empleando


como valor inicial x o=0 y x 1=1 hasta que ∈a <1 %.

f ( x )=e−x −x
x 0=0 x 1=1
∈a <1 %.
i=1 f ( x 1 ) =−0.632121f ( x 0 ) =−2
f ( x 1 )( x 0 −x1 ) (−0.632121)(0−1)
x 2=x 1− =1− =0.6127
f ( x 0 )−f ( x1 ) 1−(−0.632121)

x 2−x 1 0.6127−1
ϵa= | | x2
×100=
0.6127 | |
×100=63.21 %

i=2 f ( x 2 ) =0.074314
f ( x 2 ) ( x1 −x2 ) (0.074314 )( 1−0.6127)
x 3=x 2− =0.6127− =0.653442
f ( x 1 )−f ( x2 ) −0.632121−0.074314

x 3−x 2 0.653442−0.6127
ϵa= | | x3
× 100= |
0.653442
×100=6.23 % |
i=3 f ( x 3 ) =0.00097

f ( x3 ) ( x 2−x 3 ) (−0.00097)(0. .6127−0.653442)


x 4 =x3 − =0.0653442− =0.652917
f ( x2 ) −f ( x 3 ) 0.074314−(−0.00097)

x 4 −x3 0.652917−0.6534427
ϵa= | | x4
×100= | 0.652917 |
×100=0.08 %

¿ La raíz es x=0.652917 con un error del 0.08 %

i X i−1 Xi X i +1 ∈a (%)
1 0 1 0.6127 63.21
2 1 0.6127 0.653442 6.23
3 0.6127 0.653442 0.5652917 0.08
ALGORITMO
1. Dar valores iniciales a x0 y x1.
2. Calcular f(x0) y f(x1) para sustituirlos en:
f ( x i)( x i−1−x i)
x i+1=x i−
f ( xi −1 ) −f ( xi )

empezar con i =1.


3. Si el error relativo porcentual εa <= εs Entonces x i+1 es la raíz De otra forma
pasar al punto 2.
DIAGRAMA DE FLUJO
CÓDIGO
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ()
{ float x=0.0, fxa=0.0, xa=0.0, Ea=0.0, Es=0.0, xp=0.0, fxp=0.0;
int i=0, r=0, con=0, imax=0;
printf ("\n\t\tMETODO DE LA SECANTE\n ");
printf ("\n\tf(X)=(e^-x^2)-x Xo=0 X1=1 Es= 1.0%\n\n");
printf ("Inserte valores iniciales:\n");
printf ("X0=\t"); scanf ("%f",&xp);
printf ("X1=\t"); scanf ("%f",&xa) ;
printf ("Es=\t"); scanf ("%f",&Es);
system("cls");system("color 5B");
printf("Iteracion\t Xi-1\t\t Xi\t\t Xi+1\t\t Ea(%%)\n\n");
//Iteraciones
do
{ fxa=exp(-pow(xa,2))-xa;
fxp=exp(-pow(xp,2))-xp;
x=xa-((fxa*(xp-xa))/(fxp-fxa));
printf ("\t%d\t%0.6f\t%0.6f\t%0.6f",i,xp,xa,x);
Ea=fabs((x-xa)/x)*100;
xp=xa;
xa=x;
printf ("\t%0.6f\n",Ea);
i++;
} while (Ea>Es);
//Resultado
printf ("\n\tLa aproximacion a la raiz es %f con un error de %f
%c\n\n",x,Ea,37);
return 0;
}
RESULTADOS

El programa pedirá al usuario que inserte los valores iniciales de X0, X1 y el


porcentaje de error con el que se desea trabajar.

Se imprimirá en pantalla una tabla con los resultados correspondientes de las


iteraciones realizadas.
CONCLUSIONES
 El método de la secante proporciona una alternativa viable en caso de
presentar funciones que sean muy difíciles de manipular ya que emplea una
representación en diferencias finitas de la derivada. Debido a la aproximación
en diferencias finitas, la velocidad de convergencia del método de la secante
es al principio más lento que el método de Newton-Raphson (por ejemplo). Sin
embargo, conforme se mejora la estimación de la raíz, la aproximación por
diferencias se vuelve una mejor representación de la derivada verdadera y, en
consecuencia, se acelera rápidamente la convergencia.

Ramírez Ramos Jocelyn Marie

 La aplicación de este método se vuelve efectiva cuando tenemos funciones


difíciles de derivar para poder usar el método de la tangente. Es un método
abierto que toma como referencia dos puntos y un valor de porcentaje de
error. Aunque podría parecer que el método no es tan efectivo como el de la
tangente conforme aumenta el número de iteraciones se acerca rápidamente
al valor aproximado de la raíz.

Amaro Sánchez Ricardo Daniel

 El método de la secante, a mi parecer, es uno de los métodos más exactos y


rápidos que se pueden utilizar, aunque es posible que la persona que lo utiliza
se confunda debido a que se usa una mayor cantidad de datos y se hacen
más operaciones con los mismos.

 Este método es muy bueno para obtener resultados de manera rápida y precisa
si se hace manualmente y, por lo que se pudo observar al momento de
programar, de igual manera es más fácil de manipular y realizar su código.

Gutiérrez Rosales Germán


Referencias
1. https://es.scribd.com/document/38428907/Metodos-numericos-Metodo-de-
la-secante-en-matlab, 01 de abril 2018
2. https://www.uv.es/~diaz/mn/node21.html, 01 de abril 2018
3. http://www.sp.sepi.esimez.ipn.mx/pluginfile.php/931/mod_resource/content/
1/SECANTE_ALUMNOS.pdf, 01 de abril 2018
INSTITUTO POLITÉCNICO NACIONAL

Escuela Superior De Ingeniería Mecánica y Eléctrica


Unidad Zacatenco

MÉTODOS NUMÉRICOS

“MÉTODO DE GAUSS - JORDAN”

Prof. Manuel Torres Sabino

Integrantes del equipo:


Amaro Sánchez Ricardo Daniel
Gutiérrez Rosales Germán
Ramírez Ramos Jocelyn Marie

GRUPO: 2SM1

ING. EN SISTEMAS AUTOMOTRICES EQUIPO NO. 1


OBJETIVO(S):

1) Ser capaz de resolver problemas con ecuaciones algebraicas lineales y de valorar


la aplicación de esas ecuaciones en muchos campos de la ingeniería.

2) Dominar la técnica del método y su confiabilidad, así como conocer las ventajas y
desventajas de este para seleccionar de forma oportuna diversos problemas
particulares aplicables al método.

3) Comprender las ventajas del pivoteo.

4) Analizar los resultados obtenidos a través del programa para poder realizar una
comparación con los obtenidos manualmente.

5) Ser capaz de generar una matriz identidad a partir de una matriz ingresada por el
usuario.
MÉTODO DE GAUSS-JORDAN
Este método debe su nombre a Carl Friedrich Gauss y a Wilhelm Jordan. Se trata de una
serie de algoritmos del algebra lineal para determinar los resultados de un sistema de
ecuaciones lineales y así hallar matrices e inversas. El sistema de Gauss se utiliza para
resolver un sistema de ecuaciones y obtener las soluciones por medio de la reducción
del sistema dado a otro que sea equivalente en el cual cada una de las ecuaciones
tendrá una incógnita menos que la anterior. La matriz que resulta de este proceso lleva
el nombre que se conoce como forma escalonada.

El método de Gauss-Jordan es una variación de la eliminación de Gauss. La principal


diferencia consiste en que cuando una incógnita se elimina en el método de Gauss-
Jordan, ésta es eliminada de todas las otras ecuaciones, no solo de las subsecuentes.
Además, todos los renglones se normalizan al dividirlos entre su elemento pivote. De
esta forma, el paso de eliminación genera una matriz identidad que, en vez de una
triangular, como se ve en la representación matricial que se muestra a continuación. En
consecuencia, no es necesario hacer la sustitución hacia atrás para obtener la solución.

Para resolver sistemas de ecuaciones lineales con el método Gauss Jordan, debemos
en primer lugar anotar los coeficientes de las variables del sistema de ecuaciones
lineales con la notación matricial, también se le llama matriz aumentada.

Luego, realizado lo anterior procederemos a transformar dicha matriz en una matriz


identidad, o sea una matriz equivalente a la inicial, de la forma:

Logramos esto aplicando a las distintas columnas y


filas de las matrices, restas, sumas,
multiplicaciones y divisiones. Debemos tener en
cuenta que las operaciones utilizadas se aplicarán
en todos los elementos de la fila.

En dicha matriz identidad no vemos los términos


independientes. Esto sucede ya que cuando la
matriz original alcance la matriz identidad, los
términos serán la solución del sistema y verificarán la igualdad para cada variable que se
corresponderán de la forma siguiente:

- d1 = x
- d2 = y
- d3 = z

Nota: El superíndice (n) significa que los elementos del vector del lado derecho se han
modificado n veces (en este caso 3).

SISTEMA A RESOLVER.
Dado el siguiente sistema de ecuaciones, resuelva por el método de Gauss – Jordan.

2 x1 −6 x 2 −x3 ¿−38
−3 x1 −x 2 +7x 3 ¿−34
−8 x1 +x 2 −2x 3 ¿−20

2 −6 −1 ¿−38
−3 −1 +7 ¿−34 R1 ÷ 2 →R1
−8 +1 −2 ¿−20

R1(3) + R2 →R2
1 −3 −0.5 ¿−19
−3 −1 +7 ¿−34
−8 +1 −2 ¿−20
R1(8) + R3→R3

1 −3 −0.5 ¿−19
0 −10 5.5 ¿−91 R2 ÷ -10
0 −23 −6 ¿−172

1 −3 −0.5 ¿−19 R2(3) + R1 →R1


0 1 −0.55 ¿ 9.1
0 −23 −6 ¿−172
R2(23) + R3 →R3

1 0 −2.15 ¿8.3
0 1 −0.55 ¿9.1
0 0 −18.65 ¿37.3 R3 ÷ -18.65

1 0 −2.15 ¿8.3 R3(2.15) + R1 →R1


0 1 −0.55 ¿9.1 R3(0.55) + R2 →R2
0 0 1 ¿−2

1 0 0 ¿4 x1=4
0 1 0 ¿8 x2=8
x3=−2
0 0 1 ¿−2
ALGORITMO
El Algoritmo de Gauss-Jordan consta de los siguientes pasos:
1) Asegúrese de que la primera columna (a la izquierda) no sea cero.
2) Si el primer elemento de la columna es cero, intercámbielo por un renglón
que no tenga cero. Multiplicando apropiadamente el renglón, hágalo 1. Este
primer 1 será llamado 1 pivote.
3) Obtenga ceros arriba y abajo del 1 pivote sumando múltiplos adecuados a
los renglones debajo de renglón pivote en la matriz completa.
4) Cubra la columna y el renglón de trabajo y repita el proceso comenzando
en el paso 1 con la columna siguiente.
Es importante observar que en el método de Gauss-Jordan: En la idea general, la matriz
se va escalonando y reduciendo a la vez. En el paso 2, si el elemento no es cero no se
realiza intercambio. En el paso 3, los elementos que se hacen cero no solo son los
inferiores al pivote (Eliminación Gaussiana) sino también los superiores.
DIAGRAMA DE FLUJO
CODIGO
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main ()
{
//DECLARACIÓN DE LA MATRIZ
double MatA[100][100],aux[100],pivote=0.0;
//DECLARACIÓN DE LAS VARIABLES
int fil,i,j,k,n,m;
//SE IMPRIME EL MÉTODO DE RESOLUCIÓN
printf ("\n\tRESOLUCION DE SISTEMAS ECUACIONES POR EL METODO DE GAUSS -
JORDAN\n");
//LEE EL NUMERO DE FILAS Y DE COLUMNAS DEL SISTEMA DE ECUACIONES
printf("\nIngrese el numero de ecuaciones del sistema: ");scanf("%d",&fil);

printf("\n\n\t\tLLENADO DEL SISTEMA DE ECUACIONES");


//INICIO DEL PROCESO ITERATIVO PARA LLENAR EL SISTEMA
for (i=0;i<fil;i++)//recorre las filas
{
for (j=0;j<=fil;j++)//recorre las columnas
{
printf("\nIngrese un valor para el sistema(%d,%d): ",i+1,j+1);
scanf("%lf",&MatA[i][j]);
//lee los valores del sistema
}
}

system("cls");
system("color 18");

printf ("\n\t\t\tSISTEMA DE ECUACIONES INGRESADO\n");


//INICIO DEL PROCESO ITERATIVO PARA MOSTRAR EL SISTEMA
for (i=0;i<fil;i++)//recorre las filas
{
printf("\n");
for (j=0;j<=fil;j++)//recorre las columnas
{
printf("%0.6lf\t",MatA[i][j]);
//imprime los valores del sistema
}
}

//COMPROBAR SI HAY CEROS EN LA DIAGONAL PRINCIPAL


printf ("\n\n\t\tREORDENANDO EL SISTEMA DE ECUACIONES INGRESADO EN CASO DE \n");
printf ("\t\t\t\tEXISTIR 0 EN LA DIAGONAL PRINCIPAL\n");
for(i=0;i<fil;i++)//recorre las filas
{
printf("\n");
//Si el elemento pivote es igual a cero, inicia proceso de cambiar renglón
if (MatA[i][i]==0)
{
for (j=i+1;;j++)
{
if(j==fil)
{
j=0;
}

if(j==i)
break;

if (MatA[j][i]!=0)
{
//ciclo para recorrer columnas
for (k=0;k<fil + 1;k++)
{
aux[k]=MatA[j][k];
//guarda elemento de la fila actual
MatA[j][k]=MatA[i][k];
//guarda elemento de la fila selecta para intercambio
MatA[i][k]=aux[k];
}
}
}

}
for (j=0;j<fil+1;j++)
{
printf("%0.6lf\t",MatA[i][j]);
}
}

printf("\n");
printf ("\n\t\t\tSISTEMA DE ECUACIONES EN PROCESO 1...\n");
for(i=0;i<fil;i++)
{
int j=0;
pivote=0.0;//reinicia el pivote
pivote = MatA[i][j];//obtencion de elemento pivote
printf("\n");
if(i==j)
{
for (j=0;j<=fil;j++)//recorre las columnas
{
//división de cada elemento de fila pivote entre pivote
MatA[i][j]= MatA[i][j]/pivote;
printf("%0.6lf\t",MatA[i][j]);
}
}
else
{
for(k=0;k<=fil;k++)//recorre las columnas
{
//reducción de la fila actual
MatA[i][k]= MatA[i][k] - MatA[i-i][j]*pivote;
printf("%0.6lf\t",MatA[i][k]);
j++;
}

}
}

printf("\n");
printf ("\n\t\t\tSISTEMA DE ECUACIONES EN PROCESO 2...\n");
for(i=0;i<fil;i++)//recorre filas
{
for (j=0;j<=fil;j++)//recorre columnas
{
if((i==j)&&(i!=0)&&(j!=0))
{
pivote=0.0;
pivote = MatA[i][j];
for(k=1;k<fil-1;k++)//recorre filas
{
for(i=0;i<=fil;i++)//recorre columnas
{
//división de cada elemento de fila pivote entre pivote
MatA[k][i]= MatA[k][i]/pivote;
}
}
}
}
}
for(i=0;i<fil;i++)
{
printf("\n");
for (j=0;j<=fil;j++)
{
printf("%0.6lf\t",MatA[i][j]);
}
}

//RESUELVE EL SISTEMA DE ECUACIONES INGRESADO


for (i=0;i<fil;i++)//ciclo para controlar la fila pivote
{
pivote = MatA[i][i];//obtencion de elemento pivote
printf("\n");
//ciclo para dividir fila pivote entre elemento pivote (controla las columnas)
for (j=0;j<=fil;j++)
{
//división de cada elemento de fila pivote entre pivote
MatA[i][j]= MatA[i][j]/pivote;
}
pivote=0; //reiniciar pivote
for (k=0;k<fil;k++)
{
//si no es la fila pivote y el elemento no esta en 0
if (k!= i && (MatA[k][i]!=0))
{
pivote = MatA[k][i];//toma el valor del elemento a eliminar y usar como
pivote
for (j=0;j<=fil;j++)//ciclo para controlar reducción de la fila actual
(k)
{
MatA[k][j]= MatA[k][j] - (MatA[i][j]*pivote);//reduccion de la fila
actual (k)
}
}
}
}

printf("\n");
printf ("\n\t\t\tSOLUCION DEL SISTEMA DE ECUACIONES\n");
//INICIO DEL PROCESO ITERATIVO PARA MOSTRAR EL SISTEMA
for (i=0;i<fil;i++)
{
printf("\n");
for (j=0;j<=fil;j++)
{
printf("%0.6lf\t",MatA[i][j]);
}
}

printf ("\n\n\n\t\tLAS RAICES DEL SISTEMA DE ECUACIONES SON LAS SIGUIENTES: \n");
for (i=0;i<fil;i++)
{
printf ("\nX(%d)=%0.6lf",i+1,MatA[i][fil]);
}

return 0;

}
RESULTADOS

Se muestra en pantalla el nombre del método, y se pide al usuario que ingrese el


número de ecuaciones para así poder generar los espacios debidos para llenar el
sistema. La matriz es ingresada por el usuario.
Primeramente se muestra el sistema ingresado por el usuario, después presenta el
sistema reordenado en caso de que el sistema ingresado presentara ceros en la
diagonal principal , esto se hace con el propósito de que el programa sea más eficiente
para el usuario. En “sistema de ecuaciones en proceso 1¨ se muestra cuando el
programa hace ceros por debajo del elemento (1,1) con ayuda del pivoteo. En “sistema
de ecuaciones en proceso 2¨ se muestra cuando el programa normaliza la fila 2 y la
deja lista para iniciar el pivoteo y así generar ceros arriba y abajo del elemento (2,2). Por
último muestra al usuario la matriz identidad generando de esta forma los resultados del
sistema de ecuaciones (X1,X2,X3…).
CONCLUSIONES
 Es claro que el método de Gauss – Jordan fue uno de los programas más laborioso
de este parcial, ya que elaborar un programa completo que incluyera diferentes
situaciones como por ejemplo el reordenar el sistema ingresado en caso de
presentar ceros, necesitó de un tiempo considerable. En este método es importante
tener un dominio del tema del pivoteo puesto que a lo largo de todo el trabajo ya sea
manual o a través de la programación se necesitó de ello. Como era de esperarse,
una vez más se ven reflejadas las ventajas de la programación dado que el tiempo
invertido al hacerlo a mano es mucho más que el que le toma resolverlo al programa,
además de que después de comparar los resultados se obtuvo una exactitud óptima.
Ramírez Ramos Jocelyn Marie.
 El método de Gauss-Jordan es uno de los más efectivos cuando se requiere resolver
sistemas de ecuaciones simultaneas, aunque en la aplicación de los métodos
numéricos es más difícil poder convertir dicho método al lenguaje de las
computadoras puesto que existen múltiples casos para el acomodo y la creación de
ceros dentro de la matriz que inserte el usuario. Sin embargo, una vez que hemos
realizado el código podemos usarlo para resolver diferentes problemas.
Amaro Sánchez Ricardo Daniel
 Refiriéndome a la programación del método, resultó bastante complicar de obtener
su código, se utilizaron más variables para el respaldo de datos y, aunque no sea tan
relevante, se hicieron más líneas de programación.
 Este método resulta que es muy preciso si se realiza bien, aunque se hacen muchos
cálculos y de manera simultánea, lo que puede ser un problema para entender el
método.
 Es un método muy bueno, pero como todos los presentados en este trabajo, tiene
sus ventajas y sus desventajas.
Gutiérrez Rosales Germán
Referencias
1. https://matematica.laguia2000.com/general/metodo-de-gauss-jordan, 01 de abril
2018
2. http://www.sp.sepi.esimez.ipn.mx/pluginfile.php/938/mod_resource/content/1/MÉT
ODO%20DE%20GAUSS-JORDAN.pdf, 01 de abril 2018
3. http://aniei.org.mx/paginas/uam/CursoMN/curso_mn_12.html, 01 de abril de 2018
INSTITUTO POLITÉCNICO NACIONAL

Escuela Superior De Ingeniería Mecánica y Eléctrica


Unidad Zacatenco

MÉTODOS NUMÉRICOS

“MÉTODO DE GAUSS - SEIDEL”

Prof. Manuel Torres Sabino

Integrantes del equipo:


Amaro Sánchez Ricardo Daniel
Gutiérrez Rosales Germán
Ramírez Ramos Jocelyn Marie

GRUPO: 2SM1

ING. EN SISTEMAS AUTOMOTRICES EQUIPO NO. 1


OBJETIVO(S):

1. Mostrar cómo aplicar el método mencionado para facilitar la solución de


sistemas de ecuaciones, y poder así programar este en la computadora.

2. Recopilar información acerca del Método de Gauss-Seidel para una mejor


comprensión, estudio y aplicación de este.

3. Encontrar las aproximaciones de los valores de las variables de un sistema de


ecuaciones lineales, por medio de la realización de varios cálculos, los cuales
se realizan por iteraciones, obteniendo así aproximaciones por cada una.
Método de Gauss-Seidel
El método de eliminación para resolver ecuaciones simultáneas suministra
soluciones suficientemente precisas hasta para 15 o 20 ecuaciones. El número
exacto depende de las ecuaciones de que se trate, del número de dígitos que se
conservan en el resultado de las operaciones aritméticas, y del procedimiento de
redondeo. Utilizando ecuaciones de error, el número de ecuaciones que se
pueden manejar se puede incrementar considerablemente a más de 15 o 20, pero
este método también es impráctico cuando se presentan, por ejemplo, cientos de
ecuaciones que se deben resolver simultáneamente. El método de inversión de
matrices tiene limitaciones similares cuando se trabaja con números muy grandes
de ecuaciones simultáneas.
Sin embargo, existen varias técnicas que se pueden utilizar, para resolver grandes
números de ecuaciones simultáneas. Una de las técnicas más útiles es el método
de Gauss-Seidel. Ninguno de los procedimientos alternos es totalmente
satisfactorio, y el método de Gauss-Seidel tiene la desventaja de que no siempre
converge a una solución o de que a veces converge muy lentamente. Sin
embargo, este método convergirá siempre a una solución cuando la magnitud del
coeficiente de una incógnita diferente en cada ecuación del conjunto sea
suficientemente dominante con respecto a las magnitudes de los otros coeficientes
de esa ecuación.
Es difícil definir el margen mínimo por el que ese coeficiente debe dominar a los
otros para asegurar la convergencia y es aún más difícil predecir la velocidad de la
convergencia para alguna combinación de valores de los coeficientes cuando esa
convergencia existe. No obstante, cuando el valor absoluto del coeficiente
dominante para una incógnita diferente para cada ecuación es mayor que la suma
de los valores absolutos de los otros coeficientes de esa ecuación, la
convergencia está asegurada. Ese conjunto de ecuaciones simultáneas lineales se
conoce como sistema diagonal.
Un sistema diagonal es condición suficiente para asegurar la convergencia, pero
no es condición necesaria. Afortunadamente, las ecuaciones simultáneas lineales
que se derivan de muchos problemas de ingeniería son del tipo en el cual existen
siempre coeficientes dominantes. (1)

La iteración de Gauss-Seidel se define al tomar Q como la parte triangular


inferior de A incluyendo los elementos de la diagonal:
Si, como en el caso anterior, definimos la matriz R=A-Q

y la ecuación se puede escribir en la forma: Qx(k) = -Rx(k-1) + b


Un elemento cualquiera, i, del vector Qx(k) vendrá dado por la ecuación:

Si tenemos en cuenta la peculiar forma de las matrices Q y R, resulta que todos


los sumandos para los que j > i en la parte izquierda son nulos, mientras que en la

parte derecha son nulos todos los sumandos para los que .
Podemos escribir entonces:

de donde despejando xi(k), obtenemos:

Obsérvese que en el método de Gauss-Seidel los valores actualizados de xi


sustituyen de inmediato a los valores anteriores, mientras que en el método de
Jacobi todas las componentes nuevas del vector se calculan antes de llevar a
cabo la sustitución. Por contra, en el método de Gauss-Seidel los cálculos deben
llevarse a cabo por orden, ya que el nuevo valor xi depende de los valores
actualizados de x1, x2, ..., xi-1.
En la solución de estos problemas pueden presentarse 3 casos:
1. Solución única: Sistema compatible determinado.
2. Más de una solución: Sistema compatible e indeterminado (número infinito
de soluciones).
3. Sin solución: Sistema incompatible.
SISTEMA A RESOLVER
Utilizando el método de Gauss-Seidel visto en clase (tomando en cuenta todas sus

condiciones), resolver el siguiente sistema de ecuaciones con un s = 1% ᵋ


0.1X1 + 7.0X2 - 0.3X3 = -19.3
3.0X1 – 0.1X2 - 0.2X3 = 7.85
0.3X1 – 0.2X2 + 10X3 = 71.4
- Reordenando el sistema:
3.0X1 – 0.1X2 - 0.2X3 = 7.85
0.1X1 + 7.0X2 - 0.3X3 = -19.3
0.3X1 – 0.2X2 + 10X3 = 71.4
- Formulas:
7.85+0.1 X 2+ 0.2 X 3
X1 =
3.0
−19.3−0.1 X 1+0.3 X 3
X2 =
7.0
71.4−0.3 X 2+ 0.2 X 2
X3 =
10

- j=0 Suponiendo valores iniciales X 2 = 0 y X3 = 0, sustituir en las


ecuaciones.
7.85
X1 =
3.0
=2.616667 ᵋ a, 1 = 100%

X2 =
−19.3−0.1(2.616667)
7.0
=−2.794524 ᵋ a, 2 = 100%

71.4−0.3(2.616667)+0.2(−2.794524)
X3 =
10
=7.005610 ᵋ a, 3 = 100%

- j=1
7.85+0.1 (−2.794524 ) +0.2(7.005610)
X1 = =2.990557
3.0
−19.3−0.1 ( 2.616667 ) +0.3(7.005610)
X2 = =−2.499625
7.0

71.4−0.3(2.990557)+0.2(−2.499625)
X3 = =7.000291
10

εa ,1=|2.990557−2.616667
2.990557 |x 100 %=12.5 %
εa ,2=| |x 100 %=11.8 %
−2.499625−(−2.794524)
−2.499625

7.000291−7.005610
εa ,3=| |x 100 %=0.07 %
7.000291

- j=2
7.85+0.1 (−2.499625 )+ 0.2(7.000291)
X1 = =3.000032
3.0

−19.3−0.1 ( 3.000032 ) +0.3(7.000291)


X2 = =−2.499988
7.0

71.4−0.3(3.000032)+0.2(−2.499988)
X3 = =6.999999
10

εa ,1=|3.000032−2.990557
3.000032 |x 100 %=0.31 %
εa ,2=| |x 100 %=0.014 %
−2.499988−(−2.499625)
−2.499988

6.999999−7.000291
εa ,3=| |x 100 %=0.004 %
6.999999


- Como cada εa < s = 1% los resultados son:

X1 ¿ 3.000032 con un εa ,1=0.31 %


X2 ¿−2.499988 con un εa ,2=0.014 %
X3 ¿ 6.999999 con un εa ,3=0.004 %
j X1 - εa X2 - εa X3 - εa

0 2.616667 – 100% -2.794524 – 100% 7.005610 – 100%

1 2.990557 – 12.5% -2.499625 – 11.8% 7.000291 – 0.07%

2 3.000032 – 0.31% -2.499988 – 0.014% 6.999999 – 0.004%


ALGORITMO
1. Se realiza la matriz del sistema y se analiza para reordenarlo si es necesario
para conseguir una matriz dominante.
a11X1 + a12X2 + a13X3 = b1
a21X1 + a22X2 + a23X3 = b2
a31X1 + a32X2 + a33X3 = b3
* Los elementos marcados están en la matriz que debe dominar.
2. Despejamos las variables dominantes para obtener sus fórmulas.
b 1−a 12 X 2−a 13 X 3
X1 =
a 11
b 2−a 21 X 2−a23 X 3
X2 =
a 22
b 3−a31 X 2−a 32 X 3
X3 =
a 33

3. Sustituimos valores, pero asignamos unos iniciales a X 2 y X3 (normalmente se


toma 0´s a ambas incógnitas), quedando que:
b1
X1 =
a 11

Se realizan las demás operaciones despejando en cada una el nuevo valor de


las X’s.
4. Hacemos el cálculo de εa , n de cada incógnita verificando que todos sean <εs
previamente establecido o requerido.

Xn ( actual )−Xn(anterior )
|
εa , n=
Xn(actual) | x 100 %=%

Si alguna de las incógnitas no cumple condición anterior, volver al paso


3 pero sin hacer 0 a X2 y X3.
5. Si todas las εa , n < εs termina el método y los valores de las incógnitas
adquiridos hasta la última iteración son los resultados.
DIAGRAMA DE FLUJO
CÓDIGO
//Práctica 5: METODO DE GAUSS-SEIDEL
//Equipo 1 2SM1 ISISA
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main ()
{
int m, n, i, j, k=0, l=-1, h=1;

system("color F3");

//Se imprime el método y la función que se está evaluando


printf("METODO DE GAUSS-SEIDEL\n\n");
printf("Numero de ecuaciones:\t"); scanf ("%d",&m);
printf("Numero de incognitas:\t"); scanf ("%d",&n);

n=n+1;

double e[m][n], diagonal, suma=0.0, a[m][n], x[n], E[n], xa[n],Es;

printf("Porcentaje de error:\t"); scanf ("%lf",&Es);

system("pause");
system("cls");

//Se imprime el método y la función que se está evaluando


printf("METODO DE GAUSS-SEIDEL\n\n");

printf("\n\tSolucion del sistema de ecuaciones de %d ecuaciones por %d


incognitas\n\t\t\tcon %0.2f%c de error\n\n",m,n-1,Es,37);

//Llenado de arreglo
printf("Ingresar:\n\n");
for (i=0;i<m;i++)
{
printf("Ecuacion %d\n",i+1);
for (j=0;j<n-1;j++)
{
printf("X%d:\t",j+1); scanf ("%lf",&e[i][j]);
}
printf("Constante:\t");
scanf("%lf",&e[i][n-1]);
printf("\n\n");
}

system("pause");
system("cls");

//Se imprime el método y la función que se está evaluando


printf("METODO DE GAUSS-SEIDEL\n\n");

printf("\n\tSolucion del sistema de ecuaciones de %d ecuaciones por %d


incognitas\n\t\t\tcon %0.2f%c de error\n\n",m,n-1,Es,37);

//imprimir arreglo
printf("Arreglo ingresado\n\n");
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
printf("\t%lf",e[i][j]);
}
printf("\n");
}

printf("\n");

//Evaluar arreglo
for(i=0;i<m;i++)
{
diagonal=e[i][i];
suma= 0.0;
for (j=0;j<n-1;j++)
{
if (i!=j)
{
suma=suma+e[i][j];
}
}
//printf ("%lf\n%lf\n",diagonal,suma);
if (suma>diagonal)
{
k=-1;
do
{
k++;
diagonal=e[i][k];
//printf ("%lf\n",diagonal);
suma= 0.0;
for (j=0;j<n-1;j++)
{
suma=suma+e[i][j];
//printf ("%lf\t",suma);
}
suma=suma-diagonal;
// printf ("%lf",suma);
// printf ("\n");
}while (diagonal<suma);
//printf ("Mayor que la suma %lf suma %lf\n",diagonal,suma);
for (j=0;j<n;j++)
{
a[k][j]=e[i][j];
}
}
else
{
for (j=0;j<n;j++)
{
a[i][j]=e[i][j];
}
}
}

//Arreglo acomodado
printf ("Arreglo acomodado\n\n");
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
printf ("\t%0.6lf",a[i][j]);
}
printf ("\n");
}
for (j=0;j<n-1;j++)
{
x[j]=0.0;
}
x[n]= 1;
suma= 0.0;
printf ("\n");
do
{
printf ("\n\tIteracion %d\n",h);
h++;
for (i=0;i<m;i++)
{
diagonal=a[i][i];
suma= 0.0;
for (j=0;j<n-1;j++)
{
if (i!=j)
{
//printf("%lf\n%lf\n",a[i][j],x[j]);
suma=a[i][j]*x[j]+suma;
//printf ("%lf\n",suma);
}
}
xa[i]=x[i];
x[i]=(a[i][n-1]-suma)/diagonal;
printf ("\nX%d=\t%.6lf",i+1,x[i]);
}
printf("\n\nErrores:\n");
for (j=0;j<n-1;j++)
{
E[j]=fabs((x[j]-xa[j])/x[j])*100;
printf("E%d%=\t%.6lf%c\n",j+1,E[j],37);
}
printf ("\n");
}while (E[0]>Es);

printf("Por lo tanto:\n");

for (i=0;i<m;i++)
{
printf("\tX%d = %.6lf", i+1, x[i]);
printf("\n");
}

return 0;
}
RESULTADOS

Ilustración 1 Se muestra al usuario el nombre del programa y se pide que ingrese


los datos

Ilustración 2 Se muestra en pantalla los datos ingresados por el usuario


Ilustración 3 y 4 Por último se muestra en pantalla los resultados obtenidos en
cada iteración.
CONCLUSIONES

 Al momento de hacer ejercicios con este método pude notar que es más claro
al resolver las operaciones a comparación con el de Gauss-Jordan (para
ejemplificar).

 Realizar el código de programación en C fue, de igual manera, más fácil que el


de Gauss-Jordan.

Gutiérrez Rosales Germán

 Gauss-Seidel es un método numérico con el que podemos realizar la


resolución de ecuaciones simultaneas a través de iteraciones de operaciones
algebraicas, por lo que su aplicación en el lenguaje computacional es más
sencilla comparada con el de Gauss-Jordan.

Amaro Sánchez Ricardo Daniel

 El método de Gauss – Seidel es un método menos complicado para dar


solución a grandes sistemas de ecuaciones, a comparación del método de
Gauss – Jordan que sirve para el mismo caso. Al realizar el programa, la única
dificultan fue ordenar el sistema ingresado en un sistema diagonal, esto con el
fin de aumentar la posibilidad de convergencia a una solución; al comparar los
resultados obtenidos a mano y los del programa se observó que existe una
buena precisión en la solución.
Ramírez Ramos Jocelyn Marie
Referencias
1. http://aniei.org.mx/paginas/uam/CursoMN/curso_mn_12.html, 01 de abril de
2018
2. https://www.uv.es/~diaz/mn/node36.html, 01 de abril 2018
3. http://test.cua.uam.mx/MN/Methods/EcLineales/Gauss-Seidel/Gauss.php, 01
de abril 2018

También podría gustarte