Para ello realice una función llamada raices que tenga como parámetros una función de reales en reales, dos reales que establezcan el intervalo de cálculo, un delta de precisión, y un vector con las soluciones, y que devuelva un entero indicando el número de raíces encontradas. Pruebe esta función creando un programa principal que muestre las raíces en el intervalo [-10,10] de las siguientes funciones matemáticas de reales en reales que también deberá implementar:
f1(x) = x2+x-12
f2(x) = x2-3x+2
f3(x) = x2-2x
f4(x)=sen(x)/(x+11) {seno en radianes}
#include
#include
#include
float linf;float lsup;
float f1(float x) { return (x*x+x-12 ); }
float f2(float x) { return (x*x-3*x+2 ); }
float f3(float x) { return (x*x-2*x ); }
float f4(float x) { return ((float)(sin(x)/(11+x))); }
int Raices(float(*fx)(float),float delta,float linf,
float lsup,float *soluciones)
{
float aux,y,paso,inf,sup,medio,limite;
int nraices=0;
if (linf>lsup)
{
aux = linf;
linf = lsup;
lsup = aux;
}
y = linf;
paso = delta*100;
while (y
if ( (fabs(fx(y))) < delta ){
nraices++;
soluciones[nraices-1]=y;
y+=paso;
}
else{
if ( ( fx(y)*fx(y+paso) ) < 0 ) {
nraices++;
inf = y;
sup = y + paso;
medio = ( y + (y+paso) )/2;
limite= medio - inf;
while ( (limite>delta) && (fx(medio)!=0) ){
if (fx(inf)*fx(medio)<0)
sup = medio;
else
inf = medio;
medio = (sup + inf)/2;
limite = medio - inf;
}
soluciones[nraices-1] = medio;
}
y+=paso;
}
}
if ( fabs(fx(lsup)) < delta ){
nraices++;
soluciones[nraices-1]=sup;
}
return nraices;
}
void main()
{
float inferior,superior,delta,Sol[10];
char opcion;
int nsol,i;
printf("comienza el programa de Raices\n");
printf("Dame el limite inferior del intervalo: ");
scanf("%f",&inferior);
printf("Dame el limite superior del intervalo: ");
scanf("%f",&superior);
printf("Dame los incrementos de subdivision del intervalo(delta): ");
scanf("%f",&delta);
do
{
printf("Opciones \n");
printf(" 1 . (x*x+x-12 ) \n");
printf(" 2 . (x*x-3*x+2) \n");
printf(" 3 . (x*x-2*x ) \n");
printf(" 4 . (sin(x)/(11+x)) \n");
printf("Dame el tipo de funcion a utilizar:\n");
opcion=getch();
}
while ((opcion>'5')||(opcion<'0'));
switch (opcion){
case '1' :
{
nsol = Raices(f1,delta,inferior,superior,Sol);
printf("Existen %d soluciones\n",nsol);
for (i=0;i
}
break;
}
case '2' :
{
nsol = Raices(f2,delta,inferior,superior,Sol);
printf("Existen %d soluciones\n",nsol);
for (i=0;i
}
break;
}
case '3' :
{
nsol = Raices(f3,delta,inferior,superior,Sol);
printf("Existen %d soluciones\n",nsol);
for (i=0;i
}
break;
}
case '4' :
{
nsol = Raices(f4,delta,inferior,superior,Sol);
printf("Existen %d soluciones\n",nsol);
for (i=0;i
}
break;
}
default : printf("Hay Problemas");
}
printf("Fin. Pulsa una tecla.....");
getch();
}
No hay comentarios:
Publicar un comentario