Re: Mathlink and BorlandC++
- To: mathgroup at smc.vnet.net
- Subject: [mg30435] Re: [mg30391] Mathlink and BorlandC++
- From: Omega Consulting <omega_consulting at yahoo.com>
- Date: Sat, 18 Aug 2001 04:04:59 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
At 12:03 AM 8/15/2001, konraad dullaert wrote: >Hey, > > >I'm writting a program in Borland where I need to solve a differential >equation (have to use NDSolve). >After opening a link to Mathlink, you have to put the function that you want >to use. > > MLPutFunction (alink, "NDSolve, 3) > >But how do I send the two equations (namely the differential equation and the >initial value) and the interval in which the equation has to solved to the >Mathematica Kernel? > >Thanks for the effort, > >Konraad You have to send the full expression out on the link piece by piece. Take the following. NDSolve[{D[y[x],x]==y[x],y[1]==2},y,{x,0,3}] To see the full expression, use FullForm HoldForm[FullForm[NDSolve[{D[y[x],x]==y[x],y[1]==2},y,{x,0,3}]]] NDSolve[List[Equal[D[y[x],x],y[x]],Equal[y[1],2]],y,List[x,0,3]] Or maybe TreeForm works better for you. HoldForm[TreeForm[NDSolve[{D[y[x],x]==y[x],y[1]==2},y,{x,0,3}]]] So you would do the following MLPutFunction (alink, "NDSolve", 3); MLPutFunction (alink, "List", 2); MLPutFunction (alink, "Equal", 2); MLPutFunction (alink, "D", 2); MLPutFunction (alink, "y", 1); MLPutSymbol(alink, "x"); MLPutSymbol (alink, "x"); MLPutFunction (alink, "y", 1); MLPutSymbol(alink, "x"); MLPutFunction (alink, "Equal", 2); MLPutFunction (alink, "y", 1); MLPutInteger(alink, 1); MLPutInteger (alink, 2); MLPutSymbol (alink, "y", 1); MLPutFunction (alink, "List", 3); MLPutSymbol(alink, "x"); MLPutInteger(alink, 0); MLPutInteger(alink, 3); If you're uncomfortable with FullForm, you can send an InputForm string and have M_ turn it into an expression with the ToExpression command. MLPutFunction (alink, "ToExpression", 1); MLPutString(alink, "NDSolve[{D[y[x],x]==y[x],y[1]==2},y,{x,0,3}]");