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:
Por qué sólo funciona dando el valor de 1 en xi?, gracias de antemano. #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; }