⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 例11-14 .m

📁 对初学matlab的有很大帮助 认真学应该能学好
💻 M
字号:
/*
 *  engdemo.c
 */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//engine.h中包含有使用计算引擎时要用的函数声明
#include "engine.h"
#define  BUFSIZE 256

int main()

{
   Engine *ep;
   mxArray *T = NULL, *result = NULL;
   char buffer[BUFSIZE];
   double time[10] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0,
                       8.0, 9.0};
   /*
    * 通过指令字符串“matlab”可以
    * 打开本地MATLAB计算引擎
    *
    * 如果需要打开远程计算引擎,可以使用远程主机的名字,而不是\0
    *
    */
   if (!(ep = engOpen("\0"))) {
      fprintf(stderr, "\nCan't start MATLAB engine\n");
      return EXIT_FAILURE;
   }

   /*
    * PART I
    *
    * 对于该例子的前半部分,将数据输入到
    * MATLAB中,分析数据并绘制结果图。
    */

   /* 
    * 创建变量
    */
   T = mxCreateDoubleMatrix(1, 10, mxREAL);
   memcpy((void *)mxGetPr(T), (void *)time, sizeof(time));

   /*
    * 将变量T放到MATLAB 工作空间
    */
   engPutVariable(ep, "T", T);

   /*
    * 计算函数distance = (1/2)g.*t.^2的值
  */
   engEvalString(ep, "D = .5.*(-9.8).*T.^2;");
  /*
    * 绘制图形
  */
   engEvalString(ep, "plot(T,D);");
   engEvalString(ep, "title('落体的位置和时间关系');");
   engEvalString(ep, "xlabel('时间 (秒)');");
   engEvalString(ep, "ylabel('位置 (米)');");

   /*
    * 使用fgetc() 确保有足够的时间绘制函数图形
    */
   printf("Hit return to continue\n\n");
   fgetc(stdin);

   /*
    * Part I 到此结束!释放内存资源 ,关闭MATLAB 计算引擎
    */
   printf("Done for Part I.\n");
   mxDestroyArray(T);
   engEvalString(ep, "close;");

   /*
    * PART II
    *
    * 该程序的第二部分要求输入一个字符串,这个
    * 字符串定义一个变量X。MATLAB将识别这个
    * 字符串,然后返回一个变量并给出变量类型
    */
     
   /*
    * 调用engOutputBuffer捕获MATLAB 输出
  */
   engOutputBuffer(ep, buffer, BUFSIZE);
   while (result == NULL) {
      char str[BUFSIZE];
      /*
       * 获得用户输入的字符串
       */
      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-1, stdin);
      
      /*
       * 调用engEvalString识别输入参数
       */
      engEvalString(ep, str);
      printf("%s", buffer+2);

      /*
       * 获得计算结果
       */
      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));
      }
   }

   /*
    * PART II到此完成! 释放内存,关闭计算引擎
  */
   printf("Done!\n");
   mxDestroyArray(result);
   engClose(ep);
   
   return EXIT_SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -