MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

FindMinimum v. NMinimize and an external program

Can anyone say whether the following behavior is expected and why? I'd like to avoid learning how to use MathLink, but I need to use FindMinimum on a large external calculation and my way is broken.

Say there's a command line program called 'prog' that calculates y = (x-1)^2, reading x from a named pipe called 'in' and writing y to a named pipe called 'out'. Mathematica interacts with prog by reading and writing to the pipes. Like ...

> in = OpenWrite["in"];
> f[x_?NumericQ]:=(Write[in, CForm[x]]; First[ReadList["!cat out", Number]])

Calling NMinimize on f gives the correct answer, but FindMinimum doesn't. Specifically, FindMinimum[f[x], {x, 0}] returns the message FindMinimum::fmgz. That is, Mathematica thinks the gradient is zero.

I can't find a reason the two functions should behave differently. Any thoughts?

A couple details for the DIYers. Here's prog:
#include <stdio.h>
#include <math.h>
int main()
    FILE * io;
    int j;
    double x,y;

    while((j = scanf("%lf", &x)) != EOF)
        y = pow((x-1.0), 2);
        io = fopen("out", "w");
        fprintf(io, "%e\n", y);

Run prog with a redirect for stdin, as in
/prog < in

  • Prev by Date: Re: Reading Single and Double reals in Little-endian and Big-endian
  • Next by Date: Error in ExportString[list,"TSV"]?
  • Previous by thread: Re: Importing data from the web
  • Next by thread: Re: FindMinimum v. NMinimize and an external program