数学建模社区-数学中国

标题: mathematica c语言混合编程的问题 大神求救 [打印本页]

作者: 遥望科西嘉    时间: 2014-1-16 17:36
标题: mathematica c语言混合编程的问题 大神求救
目的是算出cos(x)5次方的程序,整个程序为,结果却不对,调试了很长时间也没有搞定,向大神求助了: z: K. j  P  ]  M3 {4 |
#include "stdafx.h"% q8 S! c' H  f) y& q1 |

% Q1 R- t0 x+ K! u* W3 i#include <stdio.h>2 f1 _: _7 ]- _( o. Q/ x' l1 n/ j
#include <stdlib.h>; m( n, e, o9 }- v9 c
#include <string.h>- _; V% P$ N# ]

# ?; B0 U; y5 R3 r0 R, P6 L# K#include "mathlink.h"
$ h8 r8 \" T" ^- {0 j
) ?$ T: G; N3 B% e1 q  ?double f(MLINK lp,double x);
& d; m/ o9 O. S# _- M! w
' ~: p& [* E5 @5 z" J% jint main()6 k0 l% @/ o/ @* z3 E% V
{0 b4 C) \( K' M& F5 ]" ]" ^! n4 p
        int argc=4;. R4 _$ V2 W  t! a+ o& P
        char*argv[5] ={"-linkname", "F:\\Program Files\\Wolfram Research\\Mathematica\\8.0", "-linkmode", "launch", "NULL"};//指定连接方式* u+ ?4 c% X( Q1 m* `/ T
        MLEnvironment env;//mathlink的环境变量
5 G$ v" Z  ?( S! p; _3 W0 D        MLINK lp;1 y$ x1 g- W! i2 ~- [9 l
        env=MLInitialize(NULL);//初始化# K' r3 b% X: n& \8 T5 d
        if(env==NULL)
2 R3 M. Y1 b$ d  k3 ^- B        {' k. D% g. t' o" \
                printf("initialization error!\n");( a; ~4 V7 u- O+ g* L
                return 1;$ j+ M& D! o& I& x3 U
        }
2 w! r- q/ r4 r        lp=MLOpen(argc, argv);( @8 F9 d  `' L0 a& n
        if(lp==NULL)- c* J6 Z0 Y& w3 c" a+ i
        {
& a" T! V5 G2 I! u6 |                printf("open error!\n");' y6 o9 o4 o. w: _& r
                return 1;
' a2 g6 Q* s8 `9 \% g% v) k1 T        }
+ m8 H' B; a: v# ]        for(int i=1;i<=10;i++)! V: H1 P3 k2 P7 j1 O
                printf("cos(%d)=  %lf\n",i,f(lp,i));//计算f(1)至f(10)
( K  u: c: V! c5 v  o
3 t$ F0 `( p* C$ P9 B        MLClose(lp);
9 y4 z' \+ ]  P+ v! Z& V9 v1 U+ ^        MLDeinitialize(env);! ?# B; \  V8 _. z: q# t

# C& g0 ?3 l5 i9 }6 d+ r# k: {4 u        //printf("Hello World!\n");
- u) W  X- b, `# n! n' ^        return 0;
9 R5 ~) w. L( R- |, }}$ p$ c' y8 Y, F5 Y% N) w) U

6 W2 j+ q4 M3 ], G; A/ N: q) a7 @5 i
double f(MLINK lp, double x)4 x7 q% i& N7 N, i
{/ A: t- s5 A( m) w( x
        double res; 7 W6 k8 s8 `2 x  Z  l  L2 r
        int pkt;% O: W0 _% \/ c5 |0 a1 ]5 @' t
        static int done=0;  [7 a) {' S, Z
        if(!done)
* l8 N2 r% c: P$ b        {
$ e5 y) n  u- M' s                //char* expression="cos(x)^5";+ a2 j# K/ x; l  O
                MLPutFunction(lp,"EvaluatrPacket",1);" [7 ?% c% [9 A; ?7 ^6 O
                MLPutFunction(lp,"ToExpression",1);
7 l2 p# F3 ]; ^' C( n& s                MLPutString(lp,"cos(x)^5");' R# ~, P& U; k5 F, A
             MLEndPacket(lp);) {! j+ U0 `4 K! h7 \4 c3 H# v
                while((pkt=MLNextPacket(lp),pkt)&&pkt!=RETURNPKT);$ p) l3 ]# ^  X* G3 ~% [
                MLNewPacket(lp);
9 h3 r/ F1 ~8 b/ R8 j" E; ^! ?9 ]- n                done=1;  k' g+ o5 ^! y1 B
        }
; _/ W7 h8 O2 t% ~  {        MLPutFunction(lp,"EvaluatePacket",1);: G9 W9 @- ]- d- D2 F
        MLPutFunction(lp,"N",1);
- v2 [) K6 @2 L6 o        MLPutFunction(lp,"F",1);) q9 x0 J+ y8 j% i7 y3 V
        MLPutReal(lp,x);
( x7 P* W, _- p8 E, ~/ ~4 J2 f2 A8 Q        MLEndPacket(lp);6 p% t/ i6 d2 e6 c! p
        while((pkt=MLNextPacket(lp))&&pkt!=RETURNPKT);  |. [1 w2 M9 [
        MLNewPacket(lp);
7 |" r, L8 n3 R1 t( ~: B        MLGetReal(lp, &res);. V6 V* G/ \) I0 _/ w  f
        return res;
/ F2 U# q( A% B}8 [2 F" j1 [- t- I* }
8 n5 C8 `8 X9 U3 ~

作者: 遥望科西嘉    时间: 2014-1-16 17:44
我觉得是不是因为在mathematica上面还要写个接口,提供c数据交换的接口
作者: 遥望科西嘉    时间: 2014-1-20 18:49
这么大个论坛没人了么?




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5