数学建模社区-数学中国

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

作者: 遥望科西嘉    时间: 2014-1-16 17:36
标题: mathematica c语言混合编程的问题 大神求救
目的是算出cos(x)5次方的程序,整个程序为,结果却不对,调试了很长时间也没有搞定,向大神求助了6 A( P3 r8 j% y
#include "stdafx.h"
3 U5 {- y* O8 R3 M9 G6 D
, U, e+ ?, E; N4 B#include <stdio.h>  v- r# V" [* u' D4 a4 l/ u& t) t
#include <stdlib.h>
- F# U* S# b5 J8 }6 l$ }( `- y#include <string.h>$ [$ V: H9 ~' s$ e9 s+ s% \& t

. w- t7 s- M. I7 u. d  i' S#include "mathlink.h"
3 h5 s" H/ L2 c! s% Y$ ^) x3 x$ ]- ^7 {) D3 |$ Q5 ~
double f(MLINK lp,double x);
. H3 V2 e8 C5 e( s% x" C/ M. K. ^1 x
int main()* ]+ v7 |& ^. L$ J" ?
{
5 k# |) g& E) u        int argc=4;
+ E4 b  |- F: q, l9 V1 @        char*argv[5] ={"-linkname", "F:\\Program Files\\Wolfram Research\\Mathematica\\8.0", "-linkmode", "launch", "NULL"};//指定连接方式% t1 v0 ^5 b0 Z' C4 w
        MLEnvironment env;//mathlink的环境变量( q1 M0 z& s9 j7 L  p# p
        MLINK lp;4 x- `3 n& x0 m& X
        env=MLInitialize(NULL);//初始化+ n. I1 I) z! _2 {3 c
        if(env==NULL)) I1 l' \2 k& ]3 J
        {7 Q, P& o' ^. ^: W2 ^. V
                printf("initialization error!\n");( q, \6 W1 T: J% _. S7 w! @3 ]# C' l
                return 1;" I# t. x6 J, I' U
        }8 |2 n' @. J1 s: Y% `% I5 B
        lp=MLOpen(argc, argv);
& t: }" w2 S1 T. e+ I        if(lp==NULL)
" o( a; H9 U% F  x% z        {9 r8 @# l  K! U2 E+ v2 C
                printf("open error!\n");$ h- K4 W) O0 F( N* D
                return 1;& H4 ?8 o8 y7 ~; z
        }
+ J' h' R$ u4 W+ y2 f( X3 r1 ^        for(int i=1;i<=10;i++), s( b/ ?/ F" B( A7 W8 Z
                printf("cos(%d)=  %lf\n",i,f(lp,i));//计算f(1)至f(10)& U9 X& ~: h- V' r, |  o/ X
% m0 l. k4 M2 a! \) v
        MLClose(lp);% G! B$ x5 e( Z2 p$ b
        MLDeinitialize(env);
2 Y  q7 G, l9 Y3 n# y/ ?9 D1 N$ [' K: O+ O: {+ s" T
        //printf("Hello World!\n");
0 ?9 I1 D: n; O" }) I        return 0;1 k$ ?1 Z; Y" i) r
}' Z0 x; d" Z3 M7 |5 p1 n( t, s' [6 z8 g& o

, }( G) ^! L' Y0 c/ v
+ Q9 b8 s" @( y5 Pdouble f(MLINK lp, double x)0 o) g+ T9 P1 t- X# W/ W7 f* f
{
( i. P3 P9 _, c' t+ [3 O        double res;
2 \% D( a7 @6 Y        int pkt;
2 N) ^& i8 o0 d  V4 v        static int done=0;
+ \0 W+ a5 F* V- Z; Y        if(!done)% t' t. E5 B5 c  l6 I% u) t
        {% Y3 q1 ?$ W* x: q
                //char* expression="cos(x)^5";
% ]6 M6 b0 [5 u( T) |1 |7 k+ o                MLPutFunction(lp,"EvaluatrPacket",1);
6 m: I$ j& \0 I9 V                MLPutFunction(lp,"ToExpression",1);
4 ]( [7 T  c4 ~( G, K( B0 t                MLPutString(lp,"cos(x)^5");
! X* ?$ q- Q7 p6 \             MLEndPacket(lp);
8 v" _& U. S9 G; }! }                while((pkt=MLNextPacket(lp),pkt)&&pkt!=RETURNPKT);
* d# f$ V: Y" m% z; E' [! F                MLNewPacket(lp);9 _! }' E/ L  d5 l0 e7 E0 R
                done=1;8 `9 _+ h9 Y4 f5 @# o2 y- Z
        }4 w+ L/ ?) J' o
        MLPutFunction(lp,"EvaluatePacket",1);
7 w5 b9 e8 Q+ g+ B# c        MLPutFunction(lp,"N",1);
/ Y" M4 d2 v+ l        MLPutFunction(lp,"F",1);; u) T9 ~* j; g$ u
        MLPutReal(lp,x);
3 q, F- ?- {5 ^+ o8 R        MLEndPacket(lp);7 k) W! a( N# |9 C
        while((pkt=MLNextPacket(lp))&&pkt!=RETURNPKT);
1 H& e1 U9 G. }8 K! @+ |        MLNewPacket(lp);
- n& U1 {" p. G# K" i        MLGetReal(lp, &res);0 h) o, R) e1 X' w( y; o
        return res;9 ~2 \7 t9 q' [" ?' E0 \; B
}' I- N3 M) {6 F/ ~! f# h
4 K5 T$ f5 E5 L/ ~. d

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




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