matlab基础入门

阅读: 评论:0

matlab基础入门

matlab基础入门

文件类型

  • m脚本文件
  • mlx实时脚本,输出结构在文本中显示,类似python Jupyter
  • fig图窗文件,支持和m文件交互
  • mexw64文件,mex test.c编译mex文件

字符串与字符数组

a = “dfadfad” %字符串
b = ‘dfadfadf’ %字符数组
相互转换
b=char(a)
a=string(b)

matlab 构造对象

s.a =1 %对象成员
s{1}.a = 1 %复杂对象数组
s(0) = 1 %普通数组

c++和matlab相互调用

  • 通过loadlibrary、libfunctions、calllib调用c++dll文件(addpath设置dll目录)
  • 通过deploytool编译m文件到c++dll文件,或者独立的exe(setenv或者getenv设置环境变量MW_MINGW64_LOC)

异常

  • 无法对输入文件进行预处理

mingw64环境变量设置有问题

matlab中交互的数据和函数

  • mcl模块,初始化环境,mclmcrInitialize、mclTerminateApplication
  • engine引擎模块(依赖matlab而不是mcr),engEvalString表达式或者matlab引擎计算
  • mex模块,matlab调用matlab模块(c++需要转成matlab模块),mexPrintf打印(disp),mexEvalStringWithTrap或者mexEvalString执行命令

mex调用matlab引擎,跨线程interpreter容易报错(可以参考python创建interpreter的操作,解释器不是线程安全的需要加锁,matlab中相关锁没找到),网络上的解释如下
The MATLAB runtime will run in parallel if loaded in separate processes. There is a single MATLAB interpreter thread per process. So for separate processes the interpreter threads will work in parallel.

  • emlrt仿真模块

c和matlab交互,需要转换m或者dll为matlab识别的格式后才能调用(m文件转dll,dll转mex、或者loadlibrary生成的文件),不能直接调用matlab引擎算法(单独操作mat数据不涉及)

 mclmcrInitialize();mclInitializeApplication(NULL,0);//每个程序只能调用一次mxArray* b = mxDuplicateArray(a);*((double*)mxGetPr(b))+=1.0;//强制类型转换成double,否则数值不对mclTerminateApplication();

matlab带图形的模块调用

int run_main(int argc, char **argv)
{mclInitializeApplication(NULL,0);//codemclTerminateApplication();return 0;
}
int main()
{mclmcrInitialize();return mclRunMain((mclMainFcnType)run_main,0,NULL);
}

命令行

  • !执行系统命令
  • setenv设置环境变量
  • addpath添加搜索目录,path查询搜索目录
  • deploytool编译exe,dll_test.dll通过loadlibrary生成后面两项,打包成一个单独的exe执行

codegen

将m文件转换成c文件

matlab目录下的demo可以参考,MATLABR2017bexternexamples

  • mcc,编译m文件为dll或者exe,mcc -?查看帮助文档
  • mex,编译c++为m文件可以调用的mexw64文件,导出函数

mcc -v -m a.m    #编译生成exe文件,-m指定m文件,-v输出生成记录

void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
不写实现也可以,.git,参考zeroc ice matlab的mexw64,zeroc ice有m文件的实现,底层多线程等实现在mexw64模块中

  • mbuild,编译c++为exe

调试

matlab编译后的程序,可以附加到dll中调试,初始化会抛出异常,vc设置后可以忽略。

本文发布于:2024-02-04 11:31:21,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170706187455178.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:入门   基础   matlab
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23