Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MÉTODOS NUMÉRICOS
“MÉTODO DE BISECCIÓN”
GRUPO: 2SM1
VENTAJAS:
– Siempre converge.
– Útil como aproximación inicial de otros métodos.
DESVENTAJAS:
no
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.
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
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
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
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
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
Xl + Xu
Xr=
2
3) Realice las siguientes evaluaciones para determinar en que subintervalo
está la raíz.
#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;
//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);
//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
}
return 0;
}
RESULTADOS
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
MÉTODOS NUMÉRICOS
“MÉTODO DE LA TANGENTE”
GRUPO: 2SM1
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.
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:
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)
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 %
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
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.
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
(1)
(2)
Figure: Representación geométrica del
método de la secante.
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
x 4 −x3 0.652917−0.6534427
ϵa= | | x4
×100= | 0.652917 |
×100=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 )
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.
MÉTODOS NUMÉRICOS
GRUPO: 2SM1
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.
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.
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.
- 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 0 −2.15 ¿8.3
0 1 −0.55 ¿9.1
0 0 −18.65 ¿37.3 R3 ÷ -18.65
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);
system("cls");
system("color 18");
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]);
}
}
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
MÉTODOS NUMÉRICOS
GRUPO: 2SM1
parte derecha son nulos todos los sumandos para los que .
Podemos escribir entonces:
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
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:
Xn ( actual )−Xn(anterior )
|
εa , n=
Xn(actual) | x 100 %=%
int main ()
{
int m, n, i, j, k=0, l=-1, h=1;
system("color F3");
n=n+1;
system("pause");
system("cls");
//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");
//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
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).