Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ANALISIS NUMERICO
DOCENTE: CALZADA SERAFIN FELIPE
PRACTICA 4
METODO DE FALSA POSICION
2020303263
GARCIA MARTINEZ LESLIE
GRUPO: 4CV9
Para aplicarlo se eligen los extremos xL y xU del intervalo entre los que se encuentra
la raíz, verificando que se cumpla que f(xL). f(xU) < 0. Si se observa la Figura 3.3, por
semejanza de triángulos, puede escribirse la siguiente igualdad:
El valor de xM, calculado con la ecuación, reemplaza a uno de los dos valores, xL o xU que
produzca un valor de la función que tenga el mismo signo de f(xM). De esta manera los valores xL y
xU siempre encierran a la raíz.
El proceso se repite en la misma forma hasta llegar a la cota de error. En la Figura 3.3 se presenta
un esquema del método.
GML 1
OBJETIVO
Realizar y comprender un código que sea capaz de procesar el método de falsa
posición; para analizar la similitud y diferencia que existe con el método de la bisección,
por lo cual se encargara de forma progresiva de pedir primero al usuario el grado del
polinomio que se va a resolver y seguido de esto solicitara que se agreguen los datos de
cada uno, para así mostrar la grafica al usuario y que logre identificar los limites superior e
inferior para anexarlo junto con la tolerancia, al final se mostrara los datos del método que
se esta analizando. Cabe destacar que en este caso también se anexara la caratula respectiva
del alumno para dar una mejor presentación al usuario que se encuentre corriendo el
programa, además de hacerlo de forma intuitiva para el mismo.
GML 2
CODIFICACION
//GARCIA MARTINEZ LESLIE
#include<iostream>
#include <graphics.h>
#include<cstdlib>
#include<math.h>
#include<4CV9_GML_P.h>
using namespace std;
const int ANCHO = 720, ALTO = 720;
int e;
char opc;
class funcion
{
private:
double c,fc,r;
int m;
float *M;
public:
funcion()
{
cout<<"Inserte el grado del Polinomio: ";
cin>>m;
M=new float[m];
for(int i=0; i<=m;i++)
M[i]=0;
cout<<endl<<"Ingresa el Polinomio. ";
for(int i=m;i>=0;i--)
{
GML 3
cout<<endl<<"Coeficiente de x^ "<<i<<" = ";
cin>>M[i];
}
cout<<endl<<"\t\n Este es tu polinomio. "<<endl;
for(int i=m;i>=0;i--)
{
if(i!=0)
cout<<M[i]<<"x^ "<<i<<" + ";
else
cout<<M[i]<<endl<<endl;
}
system("PAUSE>NULL");
}
void evaluar(double n)
{
c=n;
r=0;
for(int i=m;i>=0;i--)
{
r+=M[i]*pow(c,i);
}
}
double resultado()
{
return r;
}
};
GML 4
private:
double cl,cu,cr,fcl,fcu,fcr,er;
public:
int Validar(double a,double b)
{
cl=a;
cu=b;
evaluar(cl);
fcl=resultado();
evaluar(cu);
fcu=resultado();
if((fcl*fcu)<0)
return 0;
else
return 1;
}
double FalsaPosicion()
{
evaluar(cl);
fcl=resultado();
evaluar(cu);
fcu=resultado();
cr=cu-(fcu*(cl-cu))/(fcl-fcu);
evaluar(cr);
fcr=resultado();
if((fcl*fcr)<0)
{
cu=cr;
return cr;
}
GML 5
else if((fcl*fcr)>0)
{
cl=cr;
return cr;
}
else
return cr;
}
double error(double ant)
{
er=(fabs((cr-ant)/cr))*100;
return er;
}
void Imp()
{
cout<<cl<<"\t"<<cu<<"\t";
}
};
void dibujarLinea( int moverX, int moverY, int dibujarX, int dibujarY, int color, int textoX,
int textoY, char *nombre ) {
moveto ( moverX, moverY );
setcolor ( color );
lineto ( dibujarX, dibujarY );
outtextxy( textoX, textoY, nombre );
}
void dibujarExponente ( int e ){
float x, y;
for ( x = -360 ; x <= 360; x += 0.01 ) {
y = pow ( x , e ) / 100;
GML 6
putpixel( 360 + x ,360 - y , YELLOW );
}
}
void pintarPlano ( ) {
initwindow( ANCHO, ALTO );
dibujarLinea( 0, ALTO / 2, ANCHO, ALTO / 2, WHITE, ANCHO - 20, ALTO / 2 + 10,
"X" );
dibujarLinea( ANCHO / 2, 0, ANCHO / 2, ALTO, WHITE, ANCHO / 2 + 10, 0, "Y" );
}
int main()
{
PORTADA();
system("PAUSE>NULL");
system("cls");
int flag=1,i=1,Bis,Reg;
double a,b,raiz,anterior=0,error,tol;
metodo obj;
cout<<"\tEsta correcto el polinomio? [s/n] ";
cin>>opc;
switch(opc){
case 's':
cout << "\n\n GRAFICACION "<< endl;
cout << "Para visualizar su grafica, reingrese el grado del polinomio: ";
cin >> e;
pintarPlano();
dibujarExponente( e );
getch();
closegraph();
cout<<"\n\tGraficacion finalizada.";
GML 7
system("pause>null");
system("cls");
do{
cout<<"Escriba el limite inferior xl: ";
cin>>a;
cout<<endl;
cout<<"Escriba el limite superior xu: ";
cin>>b;
cout<<endl;
cout<<"Ingrese la tolerancia: ";
cin>>tol;
cout<<endl;
flag=obj.Validar(a,b);
if(flag==1)
{
cout<<"INTERVALO NO VALIDO."<<endl;
system("PAUSE>NULL");
}
}while(flag!=0);
system("cls");
cout<<"\n\tFALSA POSICION"<<endl;
cout<<endl<<endl<<"it\t\txl\txu\t xr\t\tError"<<endl;
i=0;
anterior=0;
flag=obj.Validar(a,b);
do{
raiz=obj.FalsaPosicion();
error=obj.error(anterior);
cout<<i<<"\t";
obj.Imp();
GML 8
cout<<raiz<<"\t"<<error<<endl;
anterior=raiz;
i++;
}while(error>=tol);
Reg=i;
system("PAUSE>NULL");
}
return 0;
}
GML 9
PRUEBAS DEL CODIGO
GML 10
GML 11
GML 12
GML 13
CONCLUSION
Dentro de los métodos cerrados de análisis numérico podemos observar que se
ubican tanto el método de la bisección como el método de falsa posición, donde cabe
destacar que existe una característica similitud entre ambos debido a que siguen un proceso
de resolución muy similar y hasta se encuentran interrelacionados entre sí, en este caso la
falsa posición sigue un proceso de pasos indicadores que determina hasta que punto se van
a detener los cálculos del error, todo esto en unos breves, rápidos y sencillos pasos para el
usuario.
BIBLIOGRAFIA
Lucia Chaillou, D. L. (2008). CALCULO NUMERICO. unse edu.
http://faa.unse.edu.ar/pdf/publicdoc/Calculo_numerico.pdf
GML 14