• To: mathgroup at smc.vnet.net
• Subject: [mg28951] Help With MathLink
• From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
• Date: Mon, 21 May 2001 00:43:38 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```You may remember the RootSearch program I discussed several weeks ago. So
far I only had a little time to work on it .... I want to do most of the
work in C and I am having trouble with MathLink.  I will make the program
more elegant once I get it working.

In the Mathematica I define:

In[1]:=
f = Sin; (* Eventually Rootsearch will automatically define f in a
privat context. *)
SampleFunction[x_]:= With[ {y=N[f[x]] },
If[ MachineNumberQ[y], {x, y, 1.0}, {x, 99.0, 0.0} ]
]

(*************************)
Then I get the following results:

In[2]:= Install[ "rootsearch" ]

Out[2]=

In[3]:=  RootSearch[ Sin[x], {x, 2.0, 3.0}]

Out[3]=
{{0. , 0. , 0. }, {0. , 0. , 0. }}

I expected the following output instead.
{{2., 0.909297, 1. },{3., 0.14112, 1. }}

helps.
Ted Ersek
----------------------------------

/* ----------------------- */
:Begin:
:Function:       root_search
:Pattern:        RootSearch[func_,{x_Symbol,x0_Real,x1_Real}]

:Arguments:      { x0, x1}
:ArgumentTypes:  { Real, Real }
:ReturnType:     Manual
:End:
/* ------------------------- */

My source code is:

/* ------------------------- */

#include "stdlib.h"
#include "stdio.h"

void sample_function( double x, double *result);

extern void root_search(double x0, double x1);

void root_search(double x0, double x1)
{
int total_samples=0;
int dimensions[2];
long depth=2;
double *value_array;
value_array=(double*)calloc(24,sizeof(double));

sample_function(x0,value_array);
total_samples++;

sample_function(x1,value_array+3);
total_samples++;

dimensions[0]=2;
dimensions[1]=3;
return;
}

void sample_function( double x, double *result )
{
long three=3;