elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error al dar valor mayor de 1 en el programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al dar valor mayor de 1 en el programa  (Leído 2,198 veces)
Antoniio

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Error al dar valor mayor de 1 en el programa
« en: 13 Septiembre 2015, 22:10 pm »

Hola, hace poco coloqué una duda sobre el método de Bisección, ahora tengo uno parecido, el de "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
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. using namespace std;
  6.  
  7. double eval_funcion(double);
  8.  
  9. int main(){
  10. float TOL, xi, xs, xr, xra;
  11. float fxi , fxs, fxr;
  12. float validador, exr, er;
  13. float A, B, C, D;
  14. int N, i;
  15.  
  16. cout<< "Ingrese el extremo inferior (Xi) : " << endl;
  17. cin >> xi;
  18. cout << "Ingrese el extremo superior (Xs) : " << endl;
  19. cin >> xs;
  20. cout << "Ingrese la tolerancia : " << endl;
  21. cin >> TOL;
  22. cout << "Ingrese el n\xA3mero de iteraciones : " << endl;
  23. cin >> N;
  24.  
  25. fxi=eval_funcion(xi);
  26. fxs=eval_funcion(xs);
  27. A = xi - xs;
  28. B = fxs * A;
  29. C = fxi - fxs;
  30. D = B/C;  
  31.  
  32. xr = xs - D;  
  33. cout<<"\nAproximaci\xA2n de la ra\xA1z buscada: " << xr;    fxr = eval_funcion(xr);
  34.  
  35. cout<<"\n"<<"n"<<"\t"<<"Ra\xA1z"<<"\t\t"<<"f(ra\xA1z)"<<"\t\t\t"<<"Error";
  36.  
  37. while(i <= N)
  38. {
  39.  xra = xr;
  40.  validador = fxi * fxr;
  41.  
  42.  if(validador < 0) {  
  43.   xs=xr;    
  44.  }
  45.  else{
  46.    xi=xr;  
  47.  }
  48.  
  49.  fxi=eval_funcion(xi);
  50.  fxs=eval_funcion(xs);
  51.  A = xi - xs;
  52.  B = fxs * A;
  53.  C = fxi - fxs;
  54.  D = B/C;
  55.  xr = xs - D;
  56.  fxr=eval_funcion(xr);    
  57.  
  58.  //error relativo
  59.  exr = xr - xra;  
  60.  er = exr/xr;
  61.  if(er<0){
  62.     er=er*(-1);
  63.  }
  64.  
  65.  //resultados iteracion a iteracion
  66.  cout<<"\n"<<i<<"\t"<<xr<<"\t\t"<<fxr<<"\t\t"<<er;
  67.  
  68.  if((fxr==0)||(er<TOL)){
  69.   cout<<"\nEl proceso se realiz\xA2 de manera correta.";
  70.  system("pause"); exit(1);
  71.  }
  72.  
  73.  i++;
  74. }
  75.  
  76. if((i>N)&&(er>TOL)) {
  77.   cout<<"\nEl m\x82todo fracas\xA2 despu\x82s de "<< N <<" iteraciones\n";
  78. }
  79.   system("pause");    
  80. }
  81. /******************************************************************************/
  82.  
  83. double eval_funcion(double v)
  84. {
  85. double r , ee, emx, logx;
  86. ee = pow(2.718281828,v); emx = 1/ee;
  87. logx = log(v);
  88.  
  89. r = emx - logx;
  90. return r;    
  91. }
  92.  

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


« Última modificación: 14 Septiembre 2015, 05:24 am por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Error al dar valor mayor de 1 en el programa
« Respuesta #1 en: 14 Septiembre 2015, 05:25 am »

intentaste hacer un debug del programa para ver linea a linea que pasa y si se comporta como esperas?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Antoniio

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Re: Error al dar valor mayor de 1 en el programa
« Respuesta #2 en: 14 Septiembre 2015, 06:40 am »

Sí, lo hice pero no logro captar ningún error, no entiendo por qué no funciona el programa, debería funcionar perfecto así como está :s
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Error al dar valor mayor de 1 en el programa
« Respuesta #3 en: 14 Septiembre 2015, 15:28 pm »

cuando hiciste el debug, calculaste en que linea el calculo matemático deja de ser correcto?
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Antoniio

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Re: Error al dar valor mayor de 1 en el programa
« Respuesta #4 en: 15 Septiembre 2015, 05:46 am »

Pues, tal parece que el error se encontraba en esta línea:

Código:
if((fxr==0)||(er<TOL)){

y ya la modifiqué por esta otra:

Código:
if((fabs(fxr)<1e-6)||(er<TOL)){

Pero sigo sin poder solucionarlo, creo que así lo dejaré, igual y debo comenzar todo desde 0.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines