Sunteți pe pagina 1din 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 𝑓(𝑥) = −26 + 85𝑥 − 91𝑥 2 + 44𝑥 3 − 8𝑥 4 + 𝑥 5 utilizando el
método de bisección para localizar la raíz más grande con un ε𝑠 = 10%. Utilice

𝑋𝑙 = 0.5 𝑋𝑢 = 1 . Anexe la gráfica de dicha función para corroborar los


resultados.

𝑖=1
𝑋𝑙 = 0.5 𝑋𝑢 = 1
𝑓(𝑋𝑙)𝑓(𝑋𝑢) < 0
𝑓(𝑋𝑙) = 𝑓(0.5) = −1.21
𝑓(𝑋𝑢) = 𝑓(1.0) = 5

𝑓(−1.21)𝑓(5) = −6.05
𝑃𝑜𝑟 𝑙𝑜 𝑡𝑎𝑛𝑡𝑜 𝑒𝑥𝑖𝑠𝑡𝑒 𝑎𝑙 𝑚𝑒𝑛𝑜𝑠 𝑢𝑛𝑎 𝑟𝑎í𝑧 𝑒𝑛 𝑒𝑙 𝑖𝑛𝑡𝑒𝑟𝑣𝑎𝑙𝑜 𝑑𝑎𝑑𝑜

𝑋𝑙 + 𝑋𝑢 0.5 + 1
𝑋𝑟 = = = 0.75
2 2

0.75 − 0
𝜀𝑎1 = │ │ ∗ 100% = 100%
0.75

𝑓(𝑋𝑟) = 𝑓(0.75) = 2.38

𝑓(𝑋𝑙)𝑓(𝑋𝑟) = 𝑓(0.5)𝑓(0.75) = (−1.21)(2.38) = −3.42

𝑃𝑜𝑟 𝑙𝑜 𝑡𝑎𝑛𝑡𝑜 𝑠𝑒 𝑎𝑠𝑖𝑔𝑛𝑎 𝑋𝑟 = 𝑋𝑢 = 0.75

𝑖=2
𝑋𝑙 = 0.5 𝑋𝑢 = 0.75

𝑋𝑙 + 𝑋𝑢 0.5 + 0.75
𝑋𝑟 = = = 0.625
2 2

0.625 − 0.75
𝜀𝑎2 = │ │ ∗ 100% = 20%
0.625

𝑓(𝑋𝑟) = 𝑓(0.625) = 1.19


𝑓(𝑋𝑙)𝑓(𝑋𝑟) = 𝑓(0.5)𝑓(0.625) = (−1.21)(1.19) = −1.44
𝑃𝑜𝑟 𝑙𝑜 𝑡𝑎𝑛𝑡𝑜 𝑠𝑒 𝑎𝑠𝑖𝑔𝑛𝑎 𝑋𝑟 = 𝑋𝑢 = 0.625

𝑖=3
𝑋𝑙 = 0.5 𝑋𝑢 = 0.625

𝑋𝑙 + 𝑋𝑢 0.5 + 0.625
𝑋𝑟 = = = 0.5625
2 2

0.5625 − 0.625
𝜀𝑎3 = │ │ ∗ 100% = 11.11%
0.5625

𝑓(𝑋𝑟) = 𝑓(0.5625) = 0.105

𝑓(𝑋𝑙)𝑓(𝑋𝑟) = 𝑓(0.5)𝑓(0.5625) = (−1.21)(0.105) = −0.127


𝑃𝑜𝑟 𝑙𝑜 𝑡𝑎𝑛𝑡𝑜 𝑠𝑒 𝑎𝑠𝑖𝑔𝑛𝑎 𝑋𝑟 = 𝑋𝑢 = 0.5625

𝑖=4
𝑋𝑙 = 0.5 𝑋𝑢 = 0.5625

𝑋𝑙 + 𝑋𝑢 0.5 + 0.5625
𝑋𝑟 = = = 0.53125
2 2

0.53125 − 0.5625
𝜀𝑎4 = │ │ ∗ 100% = 5.88%
0.53125

𝑃𝑜𝑟 𝑙𝑜 𝑡𝑎𝑛𝑡𝑜 𝑙𝑎 𝑟𝑎í𝑧 𝑒𝑠 𝑋𝑟 = 0.53125 𝑐𝑜𝑛 𝑢𝑛 𝑝𝑜𝑟𝑐𝑒𝑛𝑡𝑎𝑗𝑒 𝑑𝑒 𝑒𝑟𝑟𝑜𝑟 𝑑𝑒 𝜀𝑎 = 5.88%


𝑓(𝑥) = −26 + 85𝑥 − 91𝑥 2 + 44𝑥 3 − 8𝑥 4 + 𝑥 5

Iteración 𝑿𝒍 𝑿𝒖 𝑿𝒓 𝜺𝒂 (%)
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:

𝑋𝑙 + 𝑋𝑢
𝑋𝑟 = 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 Ei+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 𝑓(𝑥) = 𝑒 −𝑥 − 𝑥
empleando como valor inicial 𝑥𝑜 = 0.

𝒇(𝒙) = 𝒆−𝒙 − 𝒙 𝒇′ (𝒙) = −𝒆−𝒙 − 𝟏


𝒙𝟎 = 𝟎

𝒊=𝟎
𝒇(𝒙𝟎 ) = 𝟏
𝒇′ (𝒙𝟎 ) = −𝟐

𝒇(𝒙𝟎 ) 𝟏
𝒙𝟏 = 𝒙𝟎 − ′
= 𝟎 + = 𝟎. 𝟓
𝒇 (𝒙𝟎 ) 𝟐
𝒙𝟏 − 𝒙𝟎 𝟎. 𝟓 − 𝟎
𝝐𝒂 = | | × 𝟏𝟎𝟎 = | | × 𝟏𝟎𝟎 = 𝟏𝟎𝟎%
𝒙𝟏 𝟎. 𝟓

𝒊=𝟏
𝒇(𝒙𝟏 ) = 𝟎. 𝟏𝟎𝟔𝟓
𝒇′ (𝒙𝟏 ) = −𝟏. 𝟔

𝒇(𝒙𝟏 ) 𝟎. 𝟏𝟎𝟔𝟓
𝒙𝟐 = 𝒙𝟏 − ′
= 𝟎. 𝟓 + = 𝟎. 𝟓𝟔𝟔𝟓𝟔𝟐
𝒇 (𝒙𝟏 ) −𝟏. 𝟔
𝒙𝟐 − 𝒙𝟏 𝟎. 𝟓𝟔𝟔𝟓𝟔𝟐 − 𝟎. 𝟓
𝝐𝒂 = | | × 𝟏𝟎𝟎 = | | × 𝟏𝟎𝟎 = 𝟏𝟏. 𝟓𝟒%
𝒙𝟐 𝟎. 𝟓𝟔𝟔𝟓𝟔𝟐

𝒊=𝟐
𝒇(𝒙𝟐 ) = 𝟎. 𝟎𝟎𝟎𝟗𝟏𝟏
𝒇′ (𝒙𝟐 ) = −𝟏. 𝟓𝟔

𝒇(𝒙𝟐 ) 𝟎. 𝟎𝟎𝟎𝟗𝟏𝟏
𝒙𝟑 = 𝒙𝟐 − ′
= 𝟎. 𝟓𝟔𝟔𝟓𝟔𝟐 − = 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟔
𝒇 (𝒙𝟐 ) −𝟏. 𝟓𝟔
𝒙𝟑 − 𝒙𝟐 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟔 − 𝟎. 𝟓𝟔𝟔𝟓𝟔𝟐
𝝐𝒂 = | | × 𝟏𝟎𝟎 = | | × 𝟏𝟎𝟎 = 𝟎. 𝟏%
𝒙𝟑 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟔
𝒊=𝟑
𝒇(𝒙𝟑 ) = −𝟎. 𝟎𝟎𝟎𝟎𝟎𝟒
𝒇′ (𝒙𝟑 ) = −𝟏. 𝟓𝟔

𝒇(𝒙𝟑 ) −𝟎. 𝟎𝟎𝟎𝟎𝟎𝟒


𝒙𝟒 = 𝒙𝟑 − ′
= 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟔 − = 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟑
𝒇 (𝒙𝟑 ) −𝟏. 𝟓𝟔
𝒙𝟒 − 𝒙𝟑 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟑 − 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟔
𝝐𝒂 = | | × 𝟏𝟎𝟎 = | | × 𝟏𝟎𝟎 = 𝟎. 𝟎𝟎𝟎𝟓%
𝒙𝟒 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟑

𝒊=𝟒
𝒇(𝒙𝟒 ) = 𝟎. 𝟎𝟎𝟎𝟎𝟎𝟎
𝒇′ (𝒙𝟒 ) = −𝟏. 𝟓𝟔

𝒇(𝒙𝟒 ) 𝟎. 𝟎𝟎𝟎𝟎𝟎𝟎
𝒙𝟓 = 𝒙𝟒 − ′
= 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟑 − = 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟑
𝒇 (𝒙𝟒 ) −𝟏. 𝟓𝟔
𝒙𝟓 − 𝒙𝟒 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟑 − 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟑
𝝐𝒂 = | | × 𝟏𝟎𝟎 = | | × 𝟏𝟎𝟎 = 𝟎. 𝟎%
𝒙𝟓 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟑

∗ 𝑳𝒂 𝒓𝒂í𝒛 𝒆𝒔 𝒙 = 𝟎. 𝟓𝟔𝟕𝟏𝟒𝟑 𝒄𝒐𝒏 𝒖𝒏 𝒆𝒓𝒓𝒐𝒓 𝒅𝒆𝒍 𝟎. 𝟎%

𝑓(𝑥) = 𝑒 −𝑥 − 𝑥
𝒊 𝑿𝒊 𝑿𝒊+𝟏 ∈𝒂 (%)
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
𝑓(𝑥𝑖 )
𝑥𝑖+1 = 𝑥𝑖 −
𝑓′(𝑥𝑖 )

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=2450
4&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 𝑓(𝑥) = 𝑒 −𝑥 − 𝑥 empleando
como valor inicial 𝑥𝑜 = 0 y 𝑥1 = 1 hasta que ∈𝑎 < 1%.

𝟐
𝒇(𝒙) = 𝒆−𝒙 − 𝒙
𝒙𝟎 = 𝟎 𝒙𝟏 = 𝟏
∈𝒂 < 𝟏%.
𝒊=𝟏
𝒇(𝒙𝟏 ) = −𝟎. 𝟔𝟑𝟐𝟏𝟐𝟏
𝒇(𝒙𝟎 ) = −𝟐

𝒇(𝒙𝟏 )(𝒙𝟎 − 𝒙𝟏 ) (−𝟎. 𝟔𝟑𝟐𝟏𝟐𝟏)(𝟎 − 𝟏)


𝒙𝟐 = 𝒙𝟏 − =𝟏− = 𝟎. 𝟔𝟏𝟐𝟕
𝒇(𝒙𝟎 ) − 𝒇(𝒙𝟏 ) 𝟏 − (−𝟎. 𝟔𝟑𝟐𝟏𝟐𝟏)
𝒙 𝟐 − 𝒙𝟏 𝟎. 𝟔𝟏𝟐𝟕 − 𝟏
𝝐𝒂 = | | × 𝟏𝟎𝟎 = | | × 𝟏𝟎𝟎 = 𝟔𝟑. 𝟐𝟏%
𝒙𝟐 𝟎. 𝟔𝟏𝟐𝟕

𝒊=𝟐
𝒇(𝒙𝟐 ) = 𝟎. 𝟎𝟕𝟒𝟑𝟏𝟒

𝒇(𝒙𝟐 )(𝒙𝟏 − 𝒙𝟐 ) (𝟎. 𝟎𝟕𝟒𝟑𝟏𝟒)(𝟏 − 𝟎. 𝟔𝟏𝟐𝟕)


𝒙𝟑 = 𝒙𝟐 − = 𝟎. 𝟔𝟏𝟐𝟕 − = 𝟎. 𝟔𝟓𝟑𝟒𝟒𝟐
𝒇(𝒙𝟏 ) − 𝒇(𝒙𝟐 ) −𝟎. 𝟔𝟑𝟐𝟏𝟐𝟏 − 𝟎. 𝟎𝟕𝟒𝟑𝟏𝟒
𝒙𝟑 − 𝒙𝟐 𝟎. 𝟔𝟓𝟑𝟒𝟒𝟐 − 𝟎. 𝟔𝟏𝟐𝟕
𝝐𝒂 = | | × 𝟏𝟎𝟎 = | | × 𝟏𝟎𝟎 = 𝟔. 𝟐𝟑%
𝒙𝟑 𝟎. 𝟔𝟓𝟑𝟒𝟒𝟐
𝒊=𝟑
𝒇(𝒙𝟑 ) = 𝟎. 𝟎𝟎𝟎𝟗𝟕

𝒇(𝒙𝟑 )(𝒙𝟐 − 𝒙𝟑 ) (−𝟎. 𝟎𝟎𝟎𝟗𝟕)(𝟎. . 𝟔𝟏𝟐𝟕 − 𝟎. 𝟔𝟓𝟑𝟒𝟒𝟐)


𝒙𝟒 = 𝒙𝟑 − = 𝟎. 𝟎𝟔𝟓𝟑𝟒𝟒𝟐 −
𝒇(𝒙𝟐 ) − 𝒇(𝒙𝟑 ) 𝟎. 𝟎𝟕𝟒𝟑𝟏𝟒 − (−𝟎. 𝟎𝟎𝟎𝟗𝟕)
= 𝟎. 𝟔𝟓𝟐𝟗𝟏𝟕
𝒙𝟒 − 𝒙 𝟑 𝟎. 𝟔𝟓𝟐𝟗𝟏𝟕 − 𝟎. 𝟔𝟓𝟑𝟒𝟒𝟐𝟕
𝝐𝒂 = | | × 𝟏𝟎𝟎 = | | × 𝟏𝟎𝟎 = 𝟎. 𝟎𝟖%
𝒙𝟒 𝟎. 𝟔𝟓𝟐𝟗𝟏𝟕

∗ 𝑳𝒂 𝒓𝒂í𝒛 𝒆𝒔 𝒙 = 𝟎. 𝟔𝟓𝟐𝟗𝟏𝟕 𝒄𝒐𝒏 𝒖𝒏 𝒆𝒓𝒓𝒐𝒓 𝒅𝒆𝒍 𝟎. 𝟎𝟖%

𝒊 𝑿𝒊−𝟏 𝑿𝒊 𝑿𝒊+𝟏 ∈𝒂 (%)


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:
𝑓(𝑥𝑖 )(𝑥𝑖−1 − 𝑥𝑖 )
𝑥𝑖+1 = 𝑥𝑖 −
𝑓(𝑥𝑖−1 ) − 𝑓(𝑥𝑖 )
empezar con i =1.
3. Si el error relativo porcentual εa <= εs Entonces xi+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 x2  x3  38
 3x1  x2  7 x3  34
 8 x1  x2  2 x3  20
2 6  1  38 R1 ÷ 2 →R1
 3  1  7  34
 8  1  2  20

1  3  0.5  19
 3  1  7  34 R1(3) + R2 →R2
 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𝑋2 + 0.2𝑋3
X1 = 3.0

−19.3 − 0.1𝑋1 + 0.3𝑋3


X2 = 7.0

71.4 − 0.3𝑋2 + 0.2𝑋2


X3 =
10

- j=0 Suponiendo valores iniciales X2 = 0 y X3 = 0, sustituir en las ecuaciones.

X1 =
7.85
3.0
= 2.616667 ᵋa, 1 = 100%
X2 =
−19.3 − 0.1(2.616667)
7.0
= −2.794524 ᵋa, 2 = 100%
X3 =
71.4 − 0.3(2.616667) + 0.2(−2.794524)
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
2.990557 − 2.616667
𝜀𝑎, 1 = | | 𝑥 100% = 12.5%
2.990557
−2.499625 − (−2.794524)
𝜀𝑎, 2 = | | 𝑥 100% = 11.8%
−2.499625
7.000291 − 7.005610
𝜀𝑎, 3 = | | 𝑥 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

3.000032 − 2.990557
𝜀𝑎, 1 = | | 𝑥 100% = 0.31%
3.000032
−2.499988 − (−2.499625)
𝜀𝑎, 2 = | | 𝑥 100% = 0.014%
−2.499988
6.999999 − 7.000291
𝜀𝑎, 3 = | | 𝑥 100% = 0.004%
6.999999


- Como cada 𝜀𝑎 < s = 1% los resultados son:

X1 = 3.000032 con un 𝜀𝑎, 1 = 0.31%

X2 = −2.499988 con un 𝜀𝑎, 2 = 0.014%

X3 = 6.999999 con un 𝜀𝑎, 3 = 0.004%

j X1 - 𝜺𝒂 X2 - 𝜺𝒂 X3 - 𝜺𝒂

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.
𝑏1 − 𝑎12𝑋2 − 𝑎13𝑋3
X1 = 𝑎11
𝑏2 − 𝑎21𝑋2 − 𝑎23𝑋3
X2 = 𝑎22
𝑏3 − 𝑎31𝑋2 − 𝑎32𝑋3
X3 = 𝑎33

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


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

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


las X’s.

4. Hacemos el cálculo de 𝜀𝑎, 𝑛 de cada incógnita verificando que todos sean <𝜀𝑠
previamente establecido o requerido.
𝑋𝑛 (𝑎𝑐𝑡𝑢𝑎𝑙) − 𝑋𝑛 (𝑎𝑛𝑡𝑒𝑟𝑖𝑜𝑟)
𝜀𝑎, 𝑛 = | | 𝑥 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 𝜀𝑎, 𝑛 < 𝜀𝑠 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

S-ar putea să vă placă și