数学建模社区-数学中国
标题:
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% j
int 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