Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/09/2015, 16:45
Avatar de Jose_A
Jose_A
 
Fecha de Ingreso: mayo-2015
Ubicación: México, Sonora.
Mensajes: 180
Antigüedad: 9 años, 6 meses
Puntos: 0
Error al dar valor mayor de 1 en el programa

Hola, tengo un código del Método de la "Regla Falsa": http://esimecu-anumerico.blogspot.mx/2011/06/metodo-de-la-regla-falsa.html

El problema es que al momento de dar un valor mayor a 1 en el extremo inferior (xi) me marca error para cualquier número de iteraciones, este es el código:

Código:
#include <iostream>

#include <stdlib.h>

#include <math.h>

 

using namespace std;

 

double eval_funcion(double);

 

int main(){

 float TOL, xi, xs, xr, xra;

 float fxi , fxs, fxr;

 float validador, exr, er;

 float A, B, C, D;

 int N, i;

 

 cout<< "Ingrese el extremo inferior (Xi) : " << endl;

 cin >> xi;

 cout << "Ingrese el extremo superior (Xs) : " << endl;

 cin >> xs;

 cout << "Ingrese la tolerancia : " << endl;

 cin >> TOL;

 cout << "Ingrese el n\xA3mero de iteraciones : " << endl;

 cin >> N;

 

 fxi=eval_funcion(xi);

 fxs=eval_funcion(xs);

 A = xi - xs;

 B = fxs * A;

 C = fxi - fxs;

 D = B/C;

 

 xr = xs - D;

 cout<<"\nAproximaci\xA2n de la ra\xA1z buscada: " << xr;    fxr = eval_funcion(xr);

 

 cout<<"\n"<<"n"<<"\t"<<"Ra\xA1z"<<"\t\t"<<"f(ra\xA1z)"<<"\t\t\t"<<"Error";

 

 while(i <= N)

 {

  xra = xr;

  validador = fxi * fxr;

 

  if(validador < 0) {

  	 xs=xr;

  }

  else{

    xi=xr;

  }

 

  fxi=eval_funcion(xi);

  fxs=eval_funcion(xs);

  A = xi - xs;

  B = fxs * A;

  C = fxi - fxs;

  D = B/C;

  xr = xs - D;

  fxr=eval_funcion(xr);

 

  //error relativo

  exr = xr - xra;

  er = exr/xr;

  if(er<0){

     er=er*(-1);

  }

 

  //resultados iteracion a iteracion

  cout<<"\n"<<i<<"\t"<<xr<<"\t\t"<<fxr<<"\t\t"<<er;

 

  if((fxr==0)||(er<TOL)){

  	cout<<"\nEl proceso se realiz\xA2 de manera correta.";

	  system("pause"); exit(1);

  }

 

  i++;

 }

 

 if((i>N)&&(er>TOL)) {

   cout<<"\nEl m\x82todo fracas\xA2 despu\x82s de "<< N <<" iteraciones\n";

 }

   system("pause");

}

/******************************************************************************/

 

double eval_funcion(double v)

{

 double r , ee, emx, logx;

 ee = pow(2.718281828,v); emx = 1/ee;

 logx = log(v);

 

 r = emx - logx;

 return r;

}
Por qué sólo funciona dando el valor de 1 en xi?, gracias de antemano.