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

📄 matdgns.c

📁 MATLAB混合编程想把matlab强大的功能用在自己的工程实践中吗这是本不错的混合编程的书
💻 C
字号:
//matdgns.c
#include <stdio.h>
#include <stdlib.h>
#include "mat.h"  //MAT API的头文件

int diagnose(const char *file)
{
  MATFile *pmat;
  char	  **dir;
  const char *name;
  int	  ndir;
  int	  i;
  mxArray *pa;
  
  printf("Reading file %s...\n\n", file);

  //打开MAT文件
  pmat = matOpen(file, "r");
  if (pmat == NULL)
  {
    printf("Error opening file %s\n", file);
    return(1);
  }
  
  //得到当前MAT文件的变量目录并显示
  dir = matGetDir(pmat, &ndir);
  if (dir == NULL) 
		{
		 printf("Error reading directory of file %s\n", file);
		return(1);
		} 
  else
		{
		printf("Directory of %s:\n", file);
		for (i=0; i < ndir; i++)
		   printf("%s\n",dir[i]);
		}
 
  mxFree(dir);

   if (matClose(pmat) != 0)
  {
    printf("Error closing file %s\n",file);
    return(1);
  }

  //重新打开MAT文件
  pmat = matOpen(file, "r");
  if (pmat == NULL)
  {
    printf("Error reopening file %s\n", file);
    return(1);
  }

  //获取每个变量的变量头信息
  printf("\nExamining the header for each variable:\n");
  for (i=0; i < ndir; i++) 
  {
    pa = matGetNextVariableInfo(pmat, &name);
    if (pa == NULL)
		{
		printf("Error reading in file %s\n", file);
		return(1);
		}
    
	//分析变量头,获得矩阵的维数
    printf("According to its header, array %s has %d dimensions\n",
	   name, mxGetNumberOfDimensions(pa));
    //分析变量是否存在于Matlab的全局工作区间
	if (mxIsFromGlobalWS(pa))
      printf("  and was a global variable when saved\n");
    else
      printf("  and was a local variable when saved\n");
    mxDestroyArray(pa);
  }

  // 打开后重新关闭MAT文件
  if (matClose(pmat) != 0)
  {
    printf("Error closing file %s\n",file);
    return(1);
  }

  pmat = matOpen(file, "r");
  if (pmat == NULL) 
  {
    printf("Error reopening file %s\n", file);
    return(1);
  }

  //通过matGetNextVariable获得矩阵变量的值
  printf("\nReading in the actual array contents:\n");
  for (i=0; i<ndir; i++)
  {
      pa = matGetNextVariable(pmat, &name);
      if (pa == NULL) {
	  printf("Error reading in file %s\n", file);
	  return(1);
  } 
  
  //分析矩阵数据,判断矩阵的维数以及变量类型
  printf("According to its contents, array %s has %d dimensions\n",
	     name, mxGetNumberOfDimensions(pa));
  
  if (mxIsFromGlobalWS(pa))
	printf("  and was a global variable when saved\n");
  else
	printf("  and was a local variable when saved\n");
 
  mxDestroyArray(pa);
  }

  if (matClose(pmat) != 0)
  {
      printf("Error closing file %s\n",file);
      return(1);
  }

  printf("Done\n");
  return(0);
}

int main(int argc, char **argv)
{
  
  int result;
 
  //假设要打开的MAT文件名为mattest.mat,并已在当前工作区目录中
  const char*file="mattest.mat";
  result=diagnose(file);
  
  return (result==0)?EXIT_SUCCESS:EXIT_FAILURE;

}

⌨️ 快捷键说明

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