- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4. MATLAB 函数的编写 (1) MATLAB 语言的函数的基本结构 【例8 】函数的递归调用:阶乘 6 程序设计的优化 例1 下面给出一个循环的例子: 用循环写代码: i=0; for n = 0:0.1:100????i=i+1;????y(i)=cos(n); end 例3 数据预定义 i=0; for n = 0:0.1:100????i=i+1;????y(i)=cos(n); end 转换为C-MEX的步骤 安装编译器: (1) 启动Matlab,运行“mex-setup”,按照菜单提示选取MSVC。它将配置MEX使用MSVC为默认的编译器(创建C-MEX文件必需),并安装Matlab Add-in所需文件到MSVC目录。 (2) 在Matlab环境下运行“mbuild-setup”, 按提示选取MSVC。它将配置使用MSVC为默认的编译器(创建独立应用程序必需),并安装Matlab Add-in所需的Matlab Compiler和C/C++数学库文件到MSVC目录。 转换为C-MEX的步骤(生成可执行文件) 编写Matlab程序 ( 例如test.m ) 在Matlab窗口中输入命令 mcc?-m?test.m在安装目录下work文件夹中得到四个文件:test.ctftest.exe(可直接在Dos窗口中运行)test_main.ctest_mcc_component_data.c 转换为C-MEX的步骤(生成动态链接库) 编写Matlab程序 ( 例如test.m ) 在Matlab窗口中输入命令 mcc?-x?test.m在安装目录下work文件夹中得到四个文件:test.ctftest.dll(可直接在Matlab窗口中运行)test_main.ctest_mcc_component_data.c 小结 要学好Matlab,有效地使用Matlab,一定要摆脱C++的思想。能不用循环的地方,尽量不要使用(例如求极值点等这些算法基本上可以不使用循环便可实现),逐渐抛弃C++的逐点运算的思想,多从矩阵的整体(或分块)上考虑。虽然Matlab?6.0以后的版对循环已经改进不少,但是,循环的确是造成程序运行速度降低的主要原因。matlab提供的远远不止在调用函数上的方便(例如在C++中编写fft等函数可能需要几十甚至几百行,而在Matlab中只需要一两个语句),运行速度慢或许是没有使用好它,让它发挥出所长所致的。想Matlab更高效地为你服务,那就需要不断修改、优化你的代码。与其抱怨Matlab运行速度慢,不如先改进一下你的算法吧。 (5) 节约内存 M文件及函数的编写 避免生成大的中间变量,并删除不再需要的临时变量。 当使用大的矩阵变量时,预先指定维数并分配好内存,避免每次临时扩充维数。 当程序需要生成大量变量数据时,可以考虑定期将变量写到磁盘,然后清除这些变量。当需要这些变量时,再重新从磁盘加载。 当矩阵中数据极少时,将全矩阵转换为稀疏矩阵。 (6)考虑转换为C-MEX 当必须使用耗时的循环时,可以考虑将循环体中的语句转换为C-MEX。C-MEX是将M文件通过MATLAB的编译器转换为可执行文件,是按照 MEX 技术要求的格式编写相应的程序,通过编译连接,生成扩展名为.dll的动态链接库文件,可以在MATLAB环境下直接执行。这样,循环体中的语句在执行时不必每次都解释(interpret)。一般来说,C-MEX 文件的执行速度是相同功能的M文件执行速率的20~40倍。编写C-MEX不同于M文件,需要了解MATLAB?C-MEX规范。幸运的是MATLAB提供了将M文件转换为C-MEX的工具。 * * 1.M-script 文件的编写 新建M文件 编写指令 调试运行 一般过程 用户在编制此类文件时,只需把所要执行的命令 按行编辑到指定的文件中,程序运行时, MATLAB按行执行这些指令。 MATLAB编程 几点规则: ● 建立好的书写风格,保持程序的可读性。 ● m为文件的扩展名,在低版本的MATLAB中 还要注意文件名不超过8位,文件名和变量的命 名规则相同。 ● 以符号%引导的行是注释行、不可执行, 可供heIp命令查询; ● 不需要用end语句作为M文件的结束标志; M文件及函数的编写 【例1】用循环求解 s=0; for i=1:100 s=s+i; end s=0;i=1; while i=100 s=s+i; i=i+1; end 不用循环的方法: M文件及函数的编写 s=sum(1:100) 【例2】用循环求解求最
文档评论(0)