2022年MATLAB小技巧 .pdf

上传人:Che****ry 文档编号:34881843 上传时间:2022-08-19 格式:PDF 页数:6 大小:44.61KB
返回 下载 相关 举报
2022年MATLAB小技巧 .pdf_第1页
第1页 / 共6页
2022年MATLAB小技巧 .pdf_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《2022年MATLAB小技巧 .pdf》由会员分享,可在线阅读,更多相关《2022年MATLAB小技巧 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、MATLAB 小技巧这里是几个Matlab 的小提示, 基本上是我使用Matlab 时碰到并解决了的问题,希望能使别人不要再碰钉子走弯路了。如果有建议或发现其中有错误,请与我联系。Kotaimen.Cao, kotaimen_ 1、循环变量okok.org 由于历史的原因,程序员们总是使用i,j,为循环变量命名,但是在Matlab 中这种习惯可能会导致一些很隐蔽的问题。因为i,j同时也是Matlab 中的虚数单位,如果你给i 赋值,就会覆盖掉原来虚数单位的定义,例如:4+i*3 ans = 4.0000 + 3.0000i for i=1:10, end 4+i*3 ans = 34 在一段很

2、长的程序中很难发现这个错误,因此不要用i,j作循环变量名,除非你确认在代码的作用域内不会和复数打交道;或者使用4+3i 这样的复数记法;也可以换用j :for i=1:10, end i i = 10 j ans = 0 + 1.0000i 1i ans = 0 + 1.0000i 4+3i ans = 4.0000 + 3.0000i 2、循环我经常看到一些Matlab 初学者写出带有层层循环的代码,这些代码往往运行得很慢,而且非常难懂。 Matlab 提供了大量的命令来避免循环,我的建议是:在确定要写一个针对矩阵操作的 2 重循环之前,请仔细阅读帮助中的Maximizing MATLAB

3、Performance一节。 里面名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 有很多例子,这里举一个我自己碰到的问题。要统计数字图像的亮度最大值和最小值,由于数字图像可能是一个二维或三维的矩阵,开始我写出了如下的代码:switch ndims(img) case 2 m = max(max(img); case 3 m = max(max(max(img); end 后来我对这种做法很不满意,如果有一个8 维的矩阵,难道我要

4、写max(max(max(max(max(max(max(max(x) 才行?后来我发现无论矩阵是什么维数,实际上max( x( : ) )就够了。3、符号运算许多 Matlab 函数 ( 特别是数值计算方面的) 可以作为函数句柄(function handle)或内联对象(inline object)作为参数。 我们以 quad 函数为例,这个函数使用Simpson 算法求函数的数值积分。它的一种调用形式是:quad(fun, a, b) 其中, fun 可以是指向被积函数的函数句柄,或者含有被积函数的内联对象;a 和 b 分别是被积区间的上、下限。考虑以下积分:使用函数句柄的方法:% 将下

5、面到 % EOF的代码保存为f.m function y = f(x) y = sin(x) ./ x; % EOF quad(f, 1, 2) ans = 0.6593 使用内联对象的方法:quad( inline( sin(x)./x ), 1, 2 ) ans = 0.6593 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 由于使用内联对象不需要另外建立m文件,所以比较方便,建议使用这种方法。更加常见的应用是被积函数有不

6、确定的参数,例如:其中参数a,b,K 运行时确定,这时,使用函数句柄将显得很麻烦,可以用以下的方法:a = rand; b = rand + 1; K = rand; y = subs(sin(K*x)/x, K, sym(K, d) ) quad( inline(vectorize(char(y), a, b) y = sin(.79193703742703536185842949635116*x)/x ans = 0.8188 当然,由于a,b,K是随机数,结果是不确定的。这里有有两点需要说明:第一, 请注意 sym(K, d), 如果直接使用subs(sin(K*x)/x, K, K)或

7、 subs(sin(K*x)/x, K, sym(K)的话,高版本的符号工具箱会将K尽可能化为分数,有时这是十分恐怖的,也许会得到:sin(6649179754310225/9007199254740992*x)/x 这样的结果。第二, 注意 vectorize函数 。sym对象重载的char 函数会把数组的乘除(.*, ./, .)化成矩阵的乘除 (*, /, ) ,vectorize会将字符串里的*,/,全化成 .*, ./, . ,如果不这样做,quad 函数将会出错,这个问题曾经困扰了我很长的时间:quad( inline(char(y), a, b) ? Index exceeds

8、matrix dimensions. Error in = D:MATLAB6p5toolboxmatlabfunfunquad.m On line 67 = if isfinite(y(7) 3、隐藏的图形对象属性Matlab 的所谓句柄图形(handle graphics)对象的配置是通过许多属性的设置来完成的。有一些帮助文件中没有提到的确实存在的属性。figure的 Toolbar属性有三个值: none, auto, figure 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -

9、第 3 页,共 6 页 - - - - - - - - - 利用这个属性可以把figure变成没有菜单条却有工具栏的样式:figure(Menubar, none, Toolbar, figure) root object的 Default属性在我的 Malab 环境里, Root object有如下的默认值:get(0, Default) ans = defaultFigurePosition: 232 258 560 420 defaultTextColor: 0 0 0 defaultAxesXColor: 0 0 0 defaultAxesYColor: 0 0 0 defaultAx

10、esZColor: 0 0 0 defaultPatchFaceColor: 0 0 0 defaultPatchEdgeColor: 0 0 0 defaultLineColor: 0 0 0 defaultFigureInvertHardcopy: on defaultFigureColor: 0.8000 0.8000 0.8000 defaultAxesColor: 1 1 1 defaultAxesColorOrder: 7x3 double defaultFigureColormap: 64x3 double defaultSurfaceEdgeColor: 0 0 0 defau

11、ltFigurePaperType: A4 defaultFigurePaperUnits: centimeters 实际上,还有一些默认值不会被显示出来:get(0, defaultUicontrolBackgroundColor) get(0, defaultUicontrolForegroundColor) get(0, defaultUicontrolFontName) get(0, defaultUicontrolFontSize) get(0, defaultUicontrolFontWeight) get(0, defaultUicontrolFontAngle) ans = 0

12、.7725 0.7961 0.8118 okok.org 0 0 0 ans = MS Sans Serif ans = 8 ans = normal 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - ans = normal 这些默认值有助于在创建用户界面时遵循操作系统颜色,例如: figure(Color, get(0,defaultUicontrolBackgroundColor) system_dependent(getd

13、ata) system_dependent(getwinsys) 版本使用 version函数可以获得Matlab 或工具箱的版本:v1 = ver(matlab) v1 = Name: MATLAB Version: 6.5 Release: (R13) Date: 20-Jun-2002 v2 = ver(control) v2 = Name: Control System Toolbox Version: 5.2 Release: (R13) Date: 28-Jun-2002 如果工具箱不存在或没有安装返回空结构v3 = ver(nonsense) v3 = 0 x0 struct a

14、rray with fields: Name Version Release Date 可以利用这个函数让自己的程序在不当的Matlab 版本上运行时给出比较体面的警告。另外,有一个帮助中没有提及的内部函数system_dependent可以获得操作系统的版本:system_dependent(getos) ans = Microsoft Windows XP 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - system_dep

15、endent(getwinsys) ans = Version 5.1 (Build 2600) uitools工具集除了帮助中提及的一些GUI 工具函数外, matlabroottoolboxmatlabuitools里还有不少帮助里没有提及的函数,建议仔细研究一下(help uitools),例如, makemenu函数可以从字符串中生成菜单:labels = str2mat( . &File, . &Newn, . &Open, . Open &documentd, . Open &graphg, . -, . &Saves, . &Edit, . &View, . &Axisa, .

16、&Selection regionr . ); calls = str2mat( . , . disp(New), . , . disp(Open doc), . disp(Open graph), . , . disp(Save), . , . , . disp(View axis), . disp(View selection region) . ); handles = makemenu( figure(Menubar, none), labels, calls); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁