Difference between Mathlink and frontend output
- To: mathgroup at smc.vnet.net
- Subject: [mg14754] Difference between Mathlink and frontend output
- From: Jim McGuire <jimm at opticalres.com>
- Date: Thu, 12 Nov 1998 02:17:52 -0500
- Organization: Optical Research Associates
- Sender: owner-wri-mathgroup at wolfram.com
I am reading a function from a package into a Mathlink which defines the function xx[a_, b_List, c_List, d_, e_, f_] := x[a] /. xxRules[b, c, d, e, f] where xxRules is the result of a rather complicated NDSolve. When I read the package into a Mathematica session and evaluate the function Get["D:\\jimm\\svgcn018\\TED.m"]; xx[0.5, {0.5, 1.2566370362}, {0.000001, 60}, 1000, 100, 0] I get the expected numerical result. However, when I try the same thing with MathLink, // constants for mathematica calls double phiBound[]={0.5, 1.2566370362}; // array of starting + ending phi values double xBound[]={0.000001, 60.}; // array of starting + ending x values double H=1000.; // distance between source pupil plane double rStart=100.; // distance from source to ID of collector int n=0; // number of iterations for reflectivity MLPutFunction(stdlink,"EvaluatePacket",1); // start evaluation packet MLPutFunction(stdlink,"Get",1); // load saved Mathematica definitions MLPutString(stdlink,"D:\\\\jimm\\\\svgcn018\\\\TED.m"); MLEndPacket(stdlink); // Read and discard data until an error or return packet is found while ((pkt = MLNextPacket(stdlink)) && pkt != RETURNPKT) MLNewPacket(stdlink); MLNewPacket(stdlink); // discard NULL symbol returned from GET MLPutFunction(stdlink,"EvaluatePacket",1); // call Mathematica function MLPutFunction(stdlink, "ToString",1); MLPutFunction(stdlink,"xx",6); MLPutReal(stdlink,phiBound[0]); MLPutRealList(stdlink,phiBound,2); MLPutRealList(stdlink,xBound,2); MLPutReal(stdlink,H); MLPutReal(stdlink,rStart); MLPutInteger(stdlink,n); MLEndPacket(stdlink); // end of Mathematica input // Read and discard data until an error or return packet is found while ((pkt = MLNextPacket(stdlink)) && pkt != RETURNPKT) MLNewPacket(stdlink); MLGetString(stdlink, &str); printf(str); I get the the unevaluated InterpolatingFunction InterpolatingFunction[{{0.5,1.25663703619999989058442}}, <>][0.5] I assume that the FrontEnd is forcing the evaluation and I am not with the MathLink code. Any suggestions? Thanks in advance. Jim