[ Foro de C ]

Fallo Programa

21-Mar-2015 01:17
Invitado (UniCode)
2 Respuestas

Buenas, estoy tratando de hacer un programa que me resuelva una ecuación trascendente por el método de Newton Raphson pero solo realiza una iteración del bucle. Alguien me podría ayudar?

 
#include <stdio.h>
#include <math.h>
 
int main () {
int i,N,n,j;
float b,g,f;
//primero se leen los datos del fichero//
FILE *datos;
datos=fopen("datos-problema3.dat","r");
printf("Introduzca el numero de datos; \n");
scanf("%d",&n);
float x[n],y[n];
float x1,y1;
 
for (i=0;i<n;i++) {
 
fscanf(datos,"%f %f",&x1,&y1);
x[i]=x1;
y[i]=y1;
}
float S1,S2,S3,S4,S5,S6;
N=0;
printf ("Introduzca el valor de b: \n");
scanf("%f",&b);
do {
for (j=0;j<n;j++) { 
S1=0.0,S2=0.0,S3=0.0,S4=0.0,S5=0.0,S6=0.0;
S1=S1+y[j]*exp(b*x[j]);
S2=S2+exp(2.0*b*x[j]);
S3=S3+x[j]*y[j]*exp(b*x[j]);
S4=S4+x[j]*exp(2.0*b*x[j]);
S5=S5+x[j]*x[j]*y[j]*exp(b*x[j]);
S6=S6+x[j]*x[j]*exp(2.0*b*x[j]);
}
f=S1/S2 - S3/S4;
g=((S3*S2)-(2.0*S1*S4))/(S2*S2) - (S4*S5-(2.0*S3*S6))/(S4*S4);
 
//Se calcula b mediante el metodo de newton rhapson
	b=b-(f/g);
 
 
N=N+1;
 
printf ("Iteracion: %d  b=%lf  f(b)=%lf  \n",N,b,f);
 
 
} while (fabs(f)>pow(10,(-8)));
 
}
 



22-Mar-2015 06:47
Luis Torres (+12)

Disculpa, ¿qué contiene el archivo "datos-problema3.dat", ¿podrías pasármelo?

Saludos.


22-Mar-2015 16:43
Nacho Cabanes (+32)

Coincido con Luis. En un primer vistazo, no se ve nada claramente roto en la lógica. Como tu fichero ".dat" parece ser de texto, copia y pega aquí su contenido para que veamos qué está fallando.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)