数学建模社区-数学中国
标题:
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 P
double 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