/* simple2_nl.c handle reciprocal terms */ /* f(x) = x + 2 x^2 + 3/x - 11.5 thus: */ /* f'(x) = 1 + 4 x - 6/x^2 */ /* Newton iteration: */ /* x_i+1 = x_i - f(x)/f'(x) */ #include double f(double x) { return x + 2.0*x*x + 3.0/x - 11.5; } double fp(double x) { return 1.0 + 4.0*x - 6.0/(x*x); } int main(int argc, char * argv[]) { double x, x_next, fx, fpx; int i; int n = 6; printf("simple2_nl.c running \n"); printf("solve x + 2 x^2 + 3/x = 11.5 \n"); printf("define f(x) = x + 2 x^2 + 3/x - 11.5 \n"); printf("derivative fp(x) = 1.0 + 4.0*x - 6.0/(x*x) \n"); printf("guess initial x \n"); printf("iterate x_next = x - f(x)/fp(x) \n"); printf("no guarentee of solution or unique solution \n"); printf("f(x) should go to zero \n"); x = 3.0; for(i=0; i