数学建模社区-数学中国

标题: 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" Udouble 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