Algoritmo en c steffensen , buscar zeros (corregir)
Hola, tengo el siguiente algoritmo para hacer steffensen, lo hemos estado mirando mi profesor y yo y no sabemos que le pasa, converje muy muy lento, no con orden 3... lo hemos provado para varias funciones, haber si alguien sabe que le pasa...
int stiffensen(double x, double *sol, double *ord, double *constant, int m){
double xk1,xk2,xk3;
double xk;
int i;
double func;
double func2;
double temp;
xk1=0;
xk2=0;
xk3=0;
xk=x;
i=0;
while((fabs(xk-xk3)>tol && i<maxIter)||i<4){
xk1=xk2;
xk2=xk3;
xk3=xk;
func=funcion(xk3,m);
temp=xk3+func;
func2=funcion(temp,m);
xk=xk3-((func*func)/(func2-func));
if(isnan(xk)||isinf(xk)){
return 1;
}
/* printf("iteracion: %d xk: %16.16f\n",i,xk);*/
i++;
}
if(i>=maxIter){
return 1;
}
calcular(xk1,xk2,xk3,xk,&ord,&constant);
*sol=xk;
return 0;
}
os dejo el .c completo tambien por si quereis compilarlo:
http://www.mediafire.com/?gmao1l1fdyq
int stiffensen(double x, double *sol, double *ord, double *constant, int m){
double xk1,xk2,xk3;
double xk;
int i;
double func;
double func2;
double temp;
xk1=0;
xk2=0;
xk3=0;
xk=x;
i=0;
while((fabs(xk-xk3)>tol && i<maxIter)||i<4){
xk1=xk2;
xk2=xk3;
xk3=xk;
func=funcion(xk3,m);
temp=xk3+func;
func2=funcion(temp,m);
xk=xk3-((func*func)/(func2-func));
if(isnan(xk)||isinf(xk)){
return 1;
}
/* printf("iteracion: %d xk: %16.16f\n",i,xk);*/
i++;
}
if(i>=maxIter){
return 1;
}
calcular(xk1,xk2,xk3,xk,&ord,&constant);
*sol=xk;
return 0;
}
os dejo el .c completo tambien por si quereis compilarlo:
http://www.mediafire.com/?gmao1l1fdyq
