MathGroup Archive 2012

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

Search the Archive

FindMinimum v. NMinimize and an external program

  • To: mathgroup at smc.vnet.net
  • Subject: [mg125161] FindMinimum v. NMinimize and an external program
  • From: EcoTheory <carroll.ian at gmail.com>
  • Date: Sat, 25 Feb 2012 01:56:03 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com

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);
        fclose(io);
    }
    return;
}

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