Re: Complex numbers and MathLink
- To: mathgroup at smc.vnet.net
- Subject: [mg21269] Re: Complex numbers and MathLink
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Tue, 21 Dec 1999 03:46:50 -0500 (EST)
- Organization: Universitaet Leipzig
- References: <83kleb$1ec@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi, since C has no complex data type you must deal with Real and imaginary parts. I assume that you have real and imaginary parts like typedef struct complex { double re,im; } complex; The best way to send an array of complex numbers to Mathematica is MLPutFunction(stdlink,"Apply",2); MLPutFunction(stdlink,"Partition",2); MLPutRealList(stdlink,(double *) yourcomplexarray, clen); MLPutInteger(stdlink,2); MLPutFunction(stdlink,"List",1); MLPutInteger(stdlink,1); it is just Apply[Complex,Partition[{re1,im1,re2,im2,..},2],{1}] In Matheamtica you should prepare the values by N[Flatten[{Re[#],Im[#]} & /@ complexarray]] when you send it to the client. The explanation is easy. When you send Complex[re,im].. the protocol has to transmit always the Complex head for every pair. That is a huge overhead compared with the transmission of a block of doubles and some speedy operations in Mathematica. Hope that helps Jens Dirk Kraaijpoel wrote: > > What is the best way to deal with Complex numbers > and Lists of Complex numbers in MathLink? > > Dirk Kraaijpoel