[ Foro de C ]
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)));
}
Disculpa, ¿qué contiene el archivo "datos-problema3.dat", ¿podrías pasármelo?
Saludos.
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.)