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.