No, no se han equivocado de blog... como les había comentado hace tiempo andamos intentando cursar un posgrado, de ahí el hecho de postear algunas cosas un poco mas "técnicas", ahora les traigo un sencillo programa realizado en flex el cual resuelve una ecuación cuadrática por medio del método de Newton-Raphson, para ello crea una serie de iteraciones según la formula:
Sin más preambulos les dejo el codigo
%{Bueno dudas, comentarios ya saben ;) y si, sigue vigente la regla del trolling
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int a,b,c,a_p,b_p,i=0;
char der, constante=0;
float f,fp,val_ini;
float divi,xsol,error=0,val_ini1;
%}
%%
-?[0-9]+ atoi(yytext);constante++; lee_valores();
[xX] yytext;
"*" yytext;
"^" yytext;
"+" ;
%%
main()
{
printf("Newton-Rapson\n");
printf("Escriba su ec. cuadratica:\n");
yylex();
}
lee_valores ()
{
switch(constante)
{
case 1:
a=atoi(yytext);
break;
case 2:
b=atoi(yytext);
break;
case 3:
c=atoi(yytext);
printf("\nEscriba el valor inicial:\n");
break;
case 4: val_ini=atoi(yytext);
val_ini1=val_ini;
constante=0;
der=1;
deriva_ec();
break;
}
}
deriva_ec()
{
if(der==1)
{
a_p=2*a;
b_p=b*1;
}
der=0;
evalua();
printf("La raiz de la ec:\n f(x)= %f", xsol);
}
evalua()
{
f = (float) (a*val_ini1*val_ini1 + b*val_ini1 + c);
fp = (float) (a_p*val_ini1 + b_p);
i=i++;
divi= (float)f/fp;
xsol= (float)(val_ini1-divi);
error = (float) val_ini1-xsol;
error= fabs (error);
while (i<250 && error >= 0.000001)
{
val_ini1=xsol;
evalua();
}
}
Más info sobre el metodo
0 comentarios:
Publicar un comentario