关闭

result = engGetVariable(ep,"X")

标签: matlabplotstringwhitespacebufferdistance
1955人阅读 评论(0) 收藏 举报
分类:
/* $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
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libmx.lib")
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 =0.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);
		   /*
      * 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));
		   printf("X[0]=%lf\n",*mxGetPr(result));
          }
}
/*
	* We're done! Free memory, close MATLAB engine and exit.
	*/
	printf("Done!\n");
	mxDestroyArray(result);
	engClose(ep);
	return EXIT_SUCCESS;
}

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3105627次
    • 积分:41396
    • 等级:
    • 排名:第91名
    • 原创:399篇
    • 转载:4555篇
    • 译文:5篇
    • 评论:611条
    文章分类
    最新评论