<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
Hola Davidson,<BR>
 <BR>
el break; lo tenia porque estaba analizando por partes el programa. En si el problema general es que el ciclo se hace infinito. Por esta razon lo estaba analizando por partes<BR>
y ahi fue en donde me di cuenta que los valores que recive la funcion biseccion o mas bien los calculos que se realizan no son los debidos, como si existiera mal manejo de las variables, y por esa razon no se cumple la condicion del ciclo while()<BR> <BR>> Date: Fri, 3 Sep 2010 01:02:04 -0400<BR>> From: srd4121@njit.edu<BR>> To: cconclase@listas.conclase.net<BR>> Subject: Re: [C con Clase] metod de biseccion, oblemas con el manejo de tipo de variables (double)<BR>> <BR>> Hola José Ramón,<BR>> <BR>> On 9/3/2010 12:45 AM, Jose Ramon Dominguez Barba wrote:<BR>> > Buen dia amigos.<BR>> ><BR>> > Tengo un pequeño problema con un programa simple:<BR>> > el programa trata de emplear el metodo de biseccion(es un metodo<BR>> > numerico), esta es una parte del programa<BR>> ><BR>> > float biseccion( double x_in,double x_fin,float e_max){<BR>> > double x_r,fx_in,fx_r,x_r2=0;<BR>> > float error=100;<BR>> > int i=0;<BR>> ><BR>> > while ( error>=e_max){<BR>> ><BR>> > x_r= x_in+x_fin/2; //obtiene punto medio Xr<BR>> > fx_in= f_(x_in); // obtien Y inicial y Y del pnt medio<BR>> > fx_r = f_(x_r);<BR>> > if (fx_in*fx_r<0) x_fin=x_r;<BR>> > else if (fx_in*fx_r>0) x_in=x_r;<BR>> > else if (fx_in*fx_r==0) break;<BR>> > break;<BR>> ><BR>> <BR>> Aquí tienes un error. Estás diciendo al programa que salga de inmediato <BR>> de este bucle, nada más llegar a esta sentencia. Por lo tanto, el resto <BR>> de las sentencias (posteriores) en este bucle nunca serán ejecutadas.<BR>> <BR>> > if (x_r2!=0)<BR>> > error=(x_r2-x_r/x_r2)*100;<BR>> > if (error<0) error= -1*error;<BR>> > //if(error==0) error=100;<BR>> > x_r2=x_r;<BR>> > i++;<BR>> > }<BR>> > printf("\n =D");<BR>> > printf("La raiz de la funcion es: %lf \n Iteracion necesarias %d\n",x_r,i);<BR>> > printf("La funcion de la raiz es: %lf \n Error maximo resultante:<BR>> > %lf\n",fx_r,error);<BR>> > }<BR>> > float f_ (double x){<BR>> > double y;<BR>> > y=-2.1+6.21*x-3.9*pow(x,2)+0.667*pow(x,3);<BR>> > printf("\n -D");<BR>> > return y;<BR>> > }<BR>> ><BR>> > ------se supoen que los valores se manejaran como *_flotantes dobles. _*<BR>> ><BR>> > ...EL PROBLEMA ES QUE AL HACER LA PRIMER OPERACION x_r= x_in+x_fin/2;<BR>> > NO DA EL RESULTADO DEBIDO Y POR SER x_r UN VALOR QUE SE USA MAS A<BR>> > DELANTE TODO LO DEMAS SALE MAL......<BR>> ><BR>> > .....QUE PUEDE SER EL PROBLEMA???...EL TIPO DE DECLARACION?? ... COMO<BR>> > SE LEEN LOS RESULTADOS??..COMO IMPRIMEN??<BR>> ><BR>> <BR>> Si el error anterior realmente era tipográfico, y por tanto en el <BR>> programa original, esa sentencia 'break' no existe, entonces seguramente <BR>> tiene que ver con la impresión de los números de coma flotante. Elige <BR>> una mejor precisión en la impresión, en 'printf()'. Por ejemplo,<BR>> <BR>> printf( "La raiz de la funcion es: %.8lf \n Iteracion necesarias %d\n",<BR>> x_r, i );<BR>> printf( "La funcion de la raiz es: %.8lf \n Error maximo resultante: <BR>> %.8f\n", fx_r, error );<BR>> <BR>> Si esto no funciona, entonces es posible que haya algo raro con tu <BR>> implementación del método numérico. No lo he mirado, pero puedo hacerlo <BR>> mirando en uno de mis libros, si es necesario.<BR>> <BR>> <BR>> Espero que esto te ayude.<BR>> <BR>> Steven<BR>> <BR>> <BR>> _______________________________________________<BR>> Lista de correo Cconclase Cconclase@listas.conclase.net<BR>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<BR>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ<BR>                                          </body>
</html>