第8章 高级编程技术.ppt_第1页
第8章 高级编程技术.ppt_第2页
第8章 高级编程技术.ppt_第3页
第8章 高级编程技术.ppt_第4页
第8章 高级编程技术.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第8章高级编程技术 2 本章目标 掌握MATLAB文件处理方法理解MATLAB应用程序接口的原理了解结构和元胞这两种复杂数据类型了解面向对象编程的基本概念 3 主要内容 8 1文件8 2应用程序接口 4 8 1文件 文件可分为两类 文本文件由字符和与字符的显示格式有关的控制符构成常见扩展名 TXT BAT HTM 二进制文件二进制文件为非文本文件常见扩展名 COM EXE BMP WAV 5 MATLAB中基本的低级文件I O指令 1 打开和关闭文件fopen fclose2 格式读写fprintf fscanf fgetl fgets3 非格式读写fread fwrite4 文件定位和状态feof fseek ftell ferror frewind 6 8 1 1文件的打开与关闭 1 fopen函数fid fopen filename permission fid message fopen filename permssion filename permission machineformat fopen fid fid fopen all 2 fclose函数status fclose fid status fclose all 例 打开一个名为std dat的数据文件并进行读操作 命令为 fid fopen my txt r 7 8 1 2格式化数据的读写 fprintf函数count fprintf fid format A fscanf函数 A count fscanf fid format size 8 例8 1 计算当x 01 时f x ex的值 并将结果写入到文件my txt中 程序x 0 0 1 1 y x exp x y有两行数据fid fopen my txt w fprintf fid 6 2f 12 8f n y fclose fid 9 例8 2 从上例中生成的文件my txt中读取数据 并将结果输出到屏幕 程序fid fopen my txt r a count fscanf fid f f 2inf fprintf 1 f f n a fclose fid 输出同例8 1文件中的数据格式 10 8 1 3文件定位和文件状态 1 feof函数 检测文件是否已经结束status feof fid 2 ferror函数 用于查询文件的输入 输出错误信息msg ferror fid 3 frewind函数 使位置指针重新返回文件的开头frewind fid 4 fseek函数 设置文件的位置指针status fseek fid offset origin 5 ftell函数 用于查询当前文件指针的位置position ftell fid 11 例8 3输出文件的大小 程序fid fopen my txt r fseek fid 0 eof x ftell fid fprintf 1 FileSize d n x frewind fid x ftell fid fprintf 1 FilePosition d n x fclose fid 输出FileSize 231FilePosition 0 12 8 1 4按行读取数据 1 fgetl函数 按行从文件中读取数据 但不读取换行符 line fgetl fid 2 fgets函数 用于从文件中读取行 保留换行符并把行作为字符串返回 1 line fgets fid 2 line fgets fid nchar 13 例8 4 编写一个程序 用于读取例8 1生成的数据 程序fid fopen my txt r while feof fid 在文件没有结束时按行读取数据s fgets fid fprintf 1 s s endfclose fid 输出同例8 1文件中的数据格式 14 8 1 5二进制数据文件的读写 fwrite函数 用于向一个文件写入二进制数据count fwrite fid A precision fread函数 用于从文件中读二进制数据 A count fread fid size precision 注意 使用函数fread 和fwrite 读写文件时 必须以二进制方式打开文件 15 例8 5 将5行5列 魔方阵 存入二进制文件中 程序fid fopen my dat w a magic 5 fwrite fid a long fclose fid 16 例8 6 从二进制文件中读取 魔方阵 程序fid fopen my dat r A count fread fid 5 inf long fclose fid A 17 8 1 6图像 声音文件的读写 1 imread函数 从文件中读入图像A imread filename fmt A map imread filename fmt 2 image函数 显示图像image A 3 imwrite函数 将图像写入文件imwrite A filename fmt imwrite A map filename fmt 18 例8 7 显示一幅真彩 RGB 图像 程序 x map imread C MATLAB7 toolbox matlab demos street1 jpg image x 19 例8 8将图像写入文件 程序 x map imread C MATLAB7 toolbox matlab demos street1 jpg imwrite x my bmp 将图像保存为真彩色的bmp x map imread my bmp image x 20 8 1 6图像 声音文件的读写 4 imfinfo函数 查询图像文件信息innfo imflnfo filename 5 wavread函数 用于读取扩展名为 wav 的声音文件y wavread file y fs nbits wavread file 6 wavwrite函数 用于将数据写入到扩展名为 wav 的声音文件中wavwrite y fs nbits wavefile 7 wavplay函数 利用windows音频输出设备播放声音wavplay y fs 21 例8 9 读取一个音频数据文件 以不同频率播放 并显示声音波形 程序 y wavread C MATLAB7 toolbox simulink simdemos simgeneral toilet wav plot y wavplay y wavplay y 11025 wavplay y 44100 22 8 2应用程序接口 MATLAB的外部接口应用包括如下内容 1 在MATLAB中调用已有的C C 语言代码 2 在C C 语言中调用MATLAB的算法 3 利用COM标准进行客户 服务器模式开发 例如在VisualBasic程序或者MicrosoftExcel中调用MATLAB的算法 4 在C C 语言中读写MAT数据文件 23 8 2 1MEX文件 例8 10简单MEX文件示例mexHelloWorld c 程序 include mex h voidmexFunction intnlhs mxArray plhs intnrhs constmxArray prhs mexPrintf HelloMatlabWorld 24 8 2 2MATLAB计算引擎 MATLAB的计算引擎应用就是利用MATLAB提供的一组接口函数 在用户开发的C C 语言应用程序中 通过某种通信机制后台调用MATLAB应用程序以完成复杂的系统任务 25 例8 11 设计一程序 在C C 语言中调用mesh函数来绘制高斯矩阵的曲面 解题步骤 26 例8 11程序 include include engine h voidmain Engine ep intstatus 0 打开计算引擎ep engOpen NULL if ep Engine NULL printf 错误 无法打开MATLAB计算引擎 n exit 1 执行MATLAB指令engEvalString ep mesh peaks getchar 关闭MATLAB计算引擎status engClose ep if status 0 printf 无法正常关闭MATLAB计算引擎 n exit 1 27 8 2 3基于COM组件的接口编程 该方法的主要特点有 1 应用程序完全脱离MATLAB工作环境 2 MATLAB数学库和工具箱中包括的各种各样的函数 所以降低了编写算法难度 3 由于将算法程序做成了COM组件的形式 所以实现了算法的保密 28 8 2 4在C C 语言中读写MAT数据文件 支持C C 语言读写MAT文件的函数库有下面几个 1 打开数据文件 matOpenMATFile matOpen constchar filename constchar mode 2 关闭数据文件 matCloseintmatClose MATFile mfp 3 获取变量 matGetVariablemxArray matGetVariable MATFile mfp constchar name 4 写入数据 matPutVariableintmatPutVariable MATFile mfp constchar name constmxArray mp 29 扩展阅读 8 3结构数组8 4元胞数组8 5面向对象程序设计 30 应用举例 例8 12在C C 语言中调用MATLAB计算魔方阵 并将结果显示到屏幕 31 程序代码 1 include engine h includevoidmain Engine ep double p mxArray equation inti 0 j 0 intstatus 0 打开计算引擎ep engOpen NULL if ep Engine NULL printf 错误 无法打开MATLAB计算引擎 n exit 1 32 程序代码 2 执行MATLAB指令engEvalString ep A magic 5 equation engGetVariable ep A p mxGetPr equation printf nMATLAB中计算magic 5 n for i 0 i 5 i for j 0 j 5 j printf 8 0lf p i j 5 printf n 关闭MATLAB计算引擎status engClose ep if status 0 printf 无法正常关闭MATLAB计算引擎 n exit 1 33 例8 13 34 程序代码 1 include include include engine h voidmain Engine ep intstatus 0 ep engOpen NULL 执行MATLAB指令doubleA 2 3 4 1 1 1 3 5 1 B 5 5 9 double pa pb pc mxArray x y z 35 程序代码 2 x mxCreateDoubleMatrix 3 3 mxREAL y mxCreateDoubleMatrix 3 1 mxREAL pa mxGetPr x pb mxGetPr y memcpy pa A 9 sizeof double me

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论