- 論壇徽章:
- 0
|
這是MATLAB自帶的例子,我在WindowsXP(SP2), MATLAB R2007b, VC6.0下實現(xiàn)。
具體的步驟是:
1). 設(shè)置系統(tǒng)環(huán)境變量path,path里面要包括MATLAB的exe, dll那個路徑
%MATLAB_PATH%\bin\win32
只要MATLAB是正確安裝,它應(yīng)該會自動配置path環(huán)境變量的。
右擊我的電腦->屬性->高級->環(huán)境變量->系統(tǒng)變量
雙擊path
path值應(yīng)該有以下兩個值,中間是分號
d:\MATLABR2007b\bin;d:\MATLABR2007b\bin\win32
2). 設(shè)置VC的路徑
運(yùn)行VC,轉(zhuǎn)到options
include增加MATLAB的include路徑 %MATLAB_PATH%\extern\include
lib增加%MATLAB_PATH%\extern\lib\win32\microsoft
這一步以后都不用做了。
3). 在VC中新建一個console項目(也可以是win32,mfc等其他項目),項目的link輸入增加libeng.lib和libmx.lib(每個工程都要添加,否則編譯不能通過)
4). main函數(shù)的代碼:- /* $Revision: 1.8.4.1 $ */
- /*
- * engdemo.c
- *
- * This is a simple program that illustrates how to call the MATLAB
- * Engine functions from a C program.
- *
- * Copyright 1984-2003 The MathWorks, Inc.
- * All rights reserved
- */
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include "engine.h"
- #define BUFSIZE 256
- int main()
- {
- Engine *ep;
- mxArray *T = NULL, *result = NULL;
- char buffer[BUFSIZE+1];
- double time[10] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 };
- /*
- * Start the MATLAB engine locally by executing the string
- * "matlab"
- *
- * To start the session on a remote host, use the name of
- * the host as the string rather than \0
- *
- * For more complicated cases, use any string with whitespace,
- * and that string will be executed literally to start MATLAB
- */
- if (!(ep = engOpen("\0"))) {
- fprintf(stderr, "\nCan't start MATLAB engine\n");
- return EXIT_FAILURE;
- }
- /*
- * PART I
- *
- * For the first half of this demonstration, we will send data
- * to MATLAB, analyze the data, and plot the result.
- */
- /*
- * Create a variable for our data
- */
- T = mxCreateDoubleMatrix(1, 10, mxREAL);
- memcpy((void *)mxGetPr(T), (void *)time, sizeof(time));
- /*
- * Place the variable T into the MATLAB workspace
- */
- engPutVariable(ep, "T", T);
- /*
- * Evaluate a function of time, distance = (1/2)g.*t.^2
- * (g is the acceleration due to gravity)
- */
- engEvalString(ep, "D = .5.*(-9.8).*T.^2;");
- /*
- * Plot the result
- */
- engEvalString(ep, "plot(T,D);");
- engEvalString(ep, "title('Position vs. Time for a falling object');");
- engEvalString(ep, "xlabel('Time (seconds)');");
- engEvalString(ep, "ylabel('Position (meters)');");
- /*
- * use fgetc() to make sure that we pause long enough to be
- * able to see the plot
- */
- printf("Hit return to continue\n\n");
- fgetc(stdin);
- /*
- * We're done for Part I! Free memory, close MATLAB engine.
- */
- printf("Done for Part I.\n");
- mxDestroyArray(T);
- engEvalString(ep, "close;");
- /*
- * PART II
- *
- * For the second half of this demonstration, we will request
- * a MATLAB string, which should define a variable X. MATLAB
- * will evaluate the string and create the variable. We
- * will then recover the variable, and determine its type.
- */
-
- /*
- * Use engOutputBuffer to capture MATLAB output, so we can
- * echo it back. Ensure first that the buffer is always NULL
- * terminated.
- */
- buffer[BUFSIZE] = '\0';
- engOutputBuffer(ep, buffer, BUFSIZE);
- while (result == NULL) {
- char str[BUFSIZE+1];
- /*
- * Get a string input from the user
- */
- printf("Enter a MATLAB command to evaluate. This command should\n");
- printf("create a variable X. This program will then determine\n");
- printf("what kind of variable you created.\n");
- printf("For example: X = 1:5\n");
- printf(">> ");
- fgets(str, BUFSIZE, stdin);
-
- /*
- * Evaluate input with engEvalString
- */
- engEvalString(ep, str);
-
- /*
- * Echo the output from the command. First two characters are
- * always the double prompt (>>).
- */
- printf("%s", buffer+2);
-
- /*
- * Get result of computation
- */
- printf("\nRetrieving X...\n");
- if ((result = engGetVariable(ep,"X")) == NULL)
- printf("Oops! You didn't create a variable X.\n\n");
- else {
- printf("X is class %s\t\n", mxGetClassName(result));
- }
- }
- /*
- * We're done! Free memory, close MATLAB engine and exit.
- */
- printf("Done!\n");
- mxDestroyArray(result);
- engClose(ep);
- return EXIT_SUCCESS;
- }
復(fù)制代碼 編譯運(yùn)行,等一會兒會有一個MATLAB圖形窗口彈出。
轉(zhuǎn)載自:http://hi.baidu.com/dreadnaught/ ... 48a5c97dd92a3f.html |
|