数学建模社区-数学中国
标题:
mathematica c语言混合编程的问题 大神求救
[打印本页]
作者:
遥望科西嘉
时间:
2014-1-16 17:36
标题:
mathematica c语言混合编程的问题 大神求救
目的是算出cos(x)5次方的程序,整个程序为,结果却不对,调试了很长时间也没有搞定,向大神求助了
2 o$ [+ j; b$ T W3 J) r; A% ^
#include "stdafx.h"
( z! I$ \; |% A- N) Z6 I
- z+ G9 A4 n% O, F5 j+ l7 i
#include <stdio.h>
- o6 W2 ?) @+ p
#include <stdlib.h>
9 N6 B; U/ ` v# `1 W; _3 a
#include <string.h>
( l' B5 H: e' p( E- `. ~6 [- C
2 D4 j7 q: K0 |, v2 S
#include "mathlink.h"
6 y: B9 t% q& n6 ]
" |% y2 @' u O4 K; r" U
double f(MLINK lp,double x);
8 I" g& o3 f; P. k/ R' s, D% b% _
6 X5 v3 s! y+ t' I* e
int main()
# F# r8 P, C( O% s0 P8 s
{
3 I9 O) y1 n @$ H$ ~
int argc=4;
) Q5 W8 ?) {" {3 d5 C6 h, `
char*argv[5] ={"-linkname", "F:\\Program Files\\Wolfram Research\\Mathematica\\8.0", "-linkmode", "launch", "NULL"};//指定连接方式
?" B C" N& l9 s
MLEnvironment env;//mathlink的环境变量
9 c; w2 u. T/ v$ \$ ^( y7 _2 l8 [
MLINK lp;
9 e5 I Y( q" x: Z% e6 q
env=MLInitialize(NULL);//初始化
0 k' d6 u3 \8 H" K# K, s# y
if(env==NULL)
$ s# J3 ~ A! c! Z. f
{
; X- O* [$ `) B8 Y# I
printf("initialization error!\n");
* r3 i# E9 B+ A& q
return 1;
4 Z: |2 n3 x5 k& E
}
0 B0 J6 [3 O' S
lp=MLOpen(argc, argv);
5 C5 Y$ O: P7 v; ^0 I
if(lp==NULL)
1 D4 ^& [7 `" X1 Y
{
* ^/ E4 I9 Z& k
printf("open error!\n");
* F- x7 `8 d9 t
return 1;
: \. y- o% k/ r4 L2 D9 Z$ V
}
. R; S$ Y9 F8 G- [, k
for(int i=1;i<=10;i++)
! u. m6 ^3 f/ [- ^7 o
printf("cos(%d)= %lf\n",i,f(lp,i));//计算f(1)至f(10)
4 v9 D9 F) X: ?# t
+ ^( r$ R# X( b- w
MLClose(lp);
! i( T5 @ q/ f$ ^" z
MLDeinitialize(env);
2 Y/ o! i* h. Q8 E2 P6 ~: a
# w/ |. R. A5 s6 n* c0 l+ k
//printf("Hello World!\n");
X0 W& r7 s" B7 T* H: V) S
return 0;
' Z" T/ g7 a7 E4 K4 h$ ?/ K/ F9 d# Y
}
7 f7 ]& _2 r+ U8 X4 k& h- [
; y* S* A# ^7 A# ?$ e- F
+ ]- v. y; q, `& D) @% n# m
double f(MLINK lp, double x)
9 G. C) b0 m2 a; ~. E: s
{
O! k7 G& p5 d( L4 Y" b
double res;
6 v- p$ z: ^% n; a3 W \3 X
int pkt;
- V& e9 x# w3 ~8 g4 O: E+ e
static int done=0;
+ ^6 T6 M p$ X" `7 i
if(!done)
+ _/ M7 O. f9 O7 |8 X3 r/ \ B5 E- O
{
. H# }6 o* B% q) U: L% o- [
//char* expression="cos(x)^5";
( A! q. g- x3 T" j$ `
MLPutFunction(lp,"EvaluatrPacket",1);
: B1 o0 `! q! O( r
MLPutFunction(lp,"ToExpression",1);
3 {7 _ ]4 c; x( _) }3 d
MLPutString(lp,"cos(x)^5");
% l, g3 M; J3 ?$ `
MLEndPacket(lp);
5 X# k) W9 M5 A( m. O$ |! K! d
while((pkt=MLNextPacket(lp),pkt)&&pkt!=RETURNPKT);
( m. }0 H9 I% G- \' B" F
MLNewPacket(lp);
5 G$ C E$ ^6 p8 \8 y! T1 F
done=1;
9 r" `3 h( f1 c2 n# x
}
& f5 y" U8 D2 K
MLPutFunction(lp,"EvaluatePacket",1);
6 V& C( ?/ I: ?. J' ?
MLPutFunction(lp,"N",1);
8 S9 s) O( B" ]3 N% z0 a
MLPutFunction(lp,"F",1);
! o' ]3 `5 D& N8 n9 g) u# F
MLPutReal(lp,x);
9 `2 x* j! }+ S1 j3 R4 k
MLEndPacket(lp);
2 }" Q. U6 R" N# h7 A6 c3 @
while((pkt=MLNextPacket(lp))&&pkt!=RETURNPKT);
/ Y1 f! U4 {! p* i, f; ~ C
MLNewPacket(lp);
4 J. f. I- |1 v- o% K1 M" o) r
MLGetReal(lp, &res);
) Z) x2 a2 {7 w" [5 R, s
return res;
, A) g( _" e& P- r+ ]4 ?) s# C
}
q- I' c$ ?, y4 w/ h% B
9 s# y% c% K& `( T
作者:
遥望科西嘉
时间:
2014-1-16 17:44
我觉得是不是因为在mathematica上面还要写个接口,提供c数据交换的接口
作者:
遥望科西嘉
时间:
2014-1-20 18:49
这么大个论坛没人了么?
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5