接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点

简介:

  不记得上一次写超过20行的matlab程序是什么时候了,大概是2013年吧,那个时候写过2篇文章,实际用到了 一些matlab的内容,超过200行的matlab程序应该要追溯到2011年了,最近为了帮助网友解决我博客一篇文章的问题,把自己2011年的matlab翻出来,感触颇多,一言难尽,看到昔日熟悉的代码,我居然能理解,然后还能修修改过,感觉好多年没用了,连基本函数都忘记了,还是碰到问题还是会写会改,这里面也说明了编程不简单是一个记忆和经验的问题,更重要的是学习的方法和解决问题方法的问题。所以决定写这篇文章把我说认识的Matlab的东西写出来,也许再过一些年,我将老去,也不会再用Matlab了,这样的话,算是给10年Matlab使用之路一个终结吧。

本站Matlab技术文章目录:【目录】Matlab和C#混合编程文章目录

       本文原文地址:接触Matlab10年后的一个总结,随时使用Matlab而掌握的一些要点

1.前言

准确的说这篇文章不是给完全的编程新手,特别是以前没有过一定编程经验的人准备的。

文章的适合对象是:已经有一定编程基础的人,如果你想用Matlab来快速的完成算法验证,以及科研学术研究等。

  文章的范围很大,信息量很大,个别问题新手不是很理解,请自行百度。至于有编程经验的,本文提到的大部分内容应该是可以理解的,根据思路,打开Matlab软件也应该是可以选择的。

本文选择的Matlab版本是:2012a,个人觉得这个版本一直都还不错吧。新的版本虽然菜单中文化,但那个UI真是丑爆了,无力吐槽,也没必要换。

  另外,这里提醒广大Matlab使用者,对于80%人来说,低版本真的够了,没必要追求太高,特别是那些连破解或者工具箱选择都不知道啥意思的,选择一个低版本,麻烦事情可能会更少。新版本的破解很多不全面,自己安装的时候要注意。很多人碰到这个问题,工具箱都没安装,你要找函数,怎么找得到。。。 

2.Matlab的简单介绍

  在国内,目前使用Matlab的主要人群是学生和科研单位,商业环境的使用我见过一些,但很少。就不做推测和评价了。

  Matlab如何如此受欢迎,我总结是4个方面:

1.高效的数值计算功能。这一点是出类拔萃,目前其他编程语言以及其他类似的数学软件无可替代;

2.完备的计算结果和编程可视化功能。这一点同样是出类拔萃,无可替代;我的博客有Matlab专栏,大部分是C#调用Matlab进行混合编程的问题,每一年都有大量的学生和其他工程人员有这个需求:直接调用Matlab的Figure。。。潜入到WinForm中去。。。这和Matlab的结果优秀的可视化功能密不可分;

3.友好完善的编程开发环境,以及接近数学表达式的自然化m语言。非常易于学习和掌握;Matlab软件就是一个编程开发环境,自带的m语言简单易用,有编程开发经验的人应该是非常容易掌握的;

4.功能丰富的应用工具箱与Help系统,目前Matlab的工具箱总数已经超过80个,覆盖了数学,统计,仿真,电子,生物信息学,金融,测试等等各个方面。与其说Matlab强大,不如说它的工具箱强大,每一个工具箱都包括与涵盖了行业内经典的一些算法和处理方法。省去了大量的麻烦,所以对于科研来说,快速的验证自己的想法,实现算法并进行测试。

3.Matlab开发环境介绍

  如果要使用Matlab,安装Matlab必不可少,下面是Matlab的主界面,下面介绍几个主要窗口的作用。本文使用的是Matlab2012a,其他版本如果是Ribbon UI,除了菜单不一样,窗口也大概类似的。

  上面就是Matlab的主界面,我用的是2012a版本,新版本2013后可能有些改变,感觉更丑。。还是这个习惯。但大概功能都差不多。看看每个部分的功能吧,菜单栏暂时就不说了,看名字一般都能懂。具体说说上图各个部分的作用。

1.Current Folder:当前路径。是当前matlab工作文件夹的路径,这个一般启动改好后,不会变动,作用不大,但有时候找文件用得上;这里会加载你经常使用的Matlab目录,可以通过下拉箭头快速切换不同的Matlab工作路径;

2.Current Folder:也是当前的工作文件夹的文件显示,这里显示文件夹的所有资源,比较好懂,需要打开文件的时候,双击对应m文件就可以了;

3.单个m文件或者函数,点击之后,会在4中显示包含的函数,就比如VS显示类中的属性,方法之类的,可以了解文件结构;

4.是3中选择文件中包括的函数,不用打开文件夹,就可以看到m文件中的函数结构;

5.Command Window 主窗口,也就是输入命令的地方,最最重要的地方吧,做一些简单的测试,学习命令的时候都可以在这里面进行,不过习惯后更喜欢用m文件,习惯就知道了;

6.WorkSpace,工作变量空间,主要是显示当前matlab中存在的变量的值,包括变量名称,值,如果是数组,会显示最大,最小值,这个地方主要是调试程序用的,相当于VS中加断点后的局部变量的值,只不过这里显示更加直观,非常有用。

7.Command History,历史命令窗口。这里有一个小技巧,就是你在命令窗口输入的命令,这里都会显示,而且你还可以用小键盘的,上下键来直接跳到前面的命令,测试的时候也更加方便; 

4.那些常见的命令

  经常使用Matlab的命令或者进行一些简单的测试,掌握和知道一些常见的命令是很有必要的,下面这些命令如果记不住,可以根据功能百度,找到对应的函数,再用,其实很快。熟练之后,也就30秒钟的事情,多了,也就记住了。

1.clear :清除内存变量和函数,也就是把WorkSpace的变量给清空;

2.clc :清楚当前Matlab命令窗口的内容;相当于清楚屏幕吧,重新开始,简洁一点,注意clc是不清楚变量的。一般在编写m文件的时候,不是函数的话,前面一般都要加上  clear;clc; 目的就是在m文件运行的时候,把内存和屏幕都清空,以免同名称的变量影响以及屏幕容易观察;

3.help :这也是最重要的一个函数吧。在想要知道某个函数的相关说明的时候,可以使用help 函数名来获取,当然也可以打开帮助文档。不过这种方法是比较快的。

4.zeros:创建1个都为0的矩阵;ones:创建1个都为1的矩阵。参数可以是多维的,例如zeros(2,3)...

5.size:可以计算矩阵的大小,同样相关的还有length,size可以计算不同的维上的大小,例如size(A,1)..

6.rand :随机数生成器,可以直接使用生成任意纬度的矩阵,例如rand(2,3),也是一个经常用的东西;

6.plot:绘制图像的操作,具体格式可以参考帮助。操作应该非常频繁,做科研的时候,经常要看趋势,绘图在matlab是非常常见的一件事情。。。还有一个subplot函数是将一个figure分割为多个块来操作。想想自己在C#中用mschart绘图,也是醉了。。。不过仍然得坚持,这些年来为什么抛弃matlab,所有matlab可以干的事情都拿C#来干,是一个很远的话题,以后有机会再说吧。

7.figure,hold on :在使用plot绘图的时候,默认都是在figure上面,figure可以新建一个空白图像,同时还可以使用hold on在同一个figure上面绘制多条曲线;

  最重要的几个函数就介绍在这里吧。要掌握matlab的核心语法,还得看一下基本的matlab矩阵操作的语法,太灵活了 ,掌握几个基本的就可以完成很多工作了。

5.不得不说的矩阵操作

  前面已经提到Matlab最重要的一点强大的数值计算功能,不仅体现其函数库的强大,更重要的是其操作语法的灵活性。随便找一本Matlab的编程入门书籍,肯定有这方面的介绍。其实矩阵操作的灵活性,强大到以至于我不敢看,日常只要掌握几个基本的操作就可以做很多事情了。特别在这里特别介绍一下,可以给你提高不少效率。

5.1 初始化的序列

  在编写各种算法的时候,经常要对矩阵初始化。例如前面提到的zeros,one,等等都是产生矩阵的方法,同样还有其他的产生对角矩阵等方法。这里特别要提到的是产生数据或者等差数列的方法。例如

a = 1 : 10 ;%产生1-10的步长默认为1的等差数列;

b = 0:0.1:1;%产生0-1的步长为0.1的等差数量;

  是不是很简洁高效。。。在其他编程语言,可能自己要封装一个方法了。然后来调用,但是在matlab里面,这一切都简化了。

5.2 矩阵操作

  在matlab中,数组或者叫做矩阵是可以任意扩充的,不需要其他,同样对矩阵的变化易如反掌,不需要那些for循环来进行。看看几个例子,管中窥豹,大家以此类推:

复制代码
data = rand(4,4) %初始化1个10*10的随机矩阵

a = data(:,1) %取data的所有行,第1列

b = data(:,[1,3]) %取所有行,第1,3列

c = data([2,3],[1,2]) %%取第2,3行,以及1,2列
复制代码

看下面的运行结果,比较直观:

  其他还有更多,如find就不多说了。。。。这里只是冰山一角。。

6.编程语法

  看完上面的语法,有没有心动?那接下来看看matlab的m语言的一些基本语法。我们可以在命令行窗口做一些简单的测试,但并不适合于开放。当我们要完成一个完整的逻辑时,那就要用到m文件编辑器了。打开编辑器,界面如下,你就可以写了。。。这个开发环境也很强大,可以断点调试,分步执行。这是一篇总结性的文章,我身边也没有了matlab书籍,所以想到哪写到哪吧。

1.matlab中变量名大小写敏感的,官方的函数里面也没有所谓的命名规则,基本都是小写开头,习惯就好了

2.注意,如果一行语句结束,后面不加;号,就会直接在Command Window显示变量的值,加分号就只显示在WorkSpace了,在命令行窗口也是这样的,不信你可以试一下, a = 100; 和 b = 100 的区别

3.matlab中,注释的符号是 %

4.变量无需定义,你可以给它一个[]空值,在使用的时候再赋其他值。它的长度也不是固定的,你可以按你想象进行增加。

5.matlab的数据类型中,个人认为比较变态的是字符和元胞,元胞数组是一个大杂烩,可以容纳各种复杂的类型,而字符类型,踩过不少坑,每次都转不过弯来。这里分享一下。matlab拼接字符串路径或者数组,不是我们其他编程语言想象的那样哦。用 + 就可以解决。需要这样:

  ['ab' 'cde' num2str(2)] %注意中间有空格,结果:abcde2

6.虽然矩阵操作,很灵活,大部分的都可以直接一句话完成,但免不了还是要用循环的。matlab也有for,while语法。需要注意的是,每一层的for 或者while都要对应end 才行。

7.在matlab中,现在也支持面向对象编程,但我不会,使用Matlab暂时也只是用用函数,面向过程的编程啊。。。面向对象编程的使用如果大家有兴趣可以去找一下相关资料啊。matlab最常用的还是函数,和其他语言的方法类似。但是matlab的函数没有静态方法和实例方法之分,总的来说,都是静态的吧,直接调用。

编写函数使用的关键字是 function ,输入和输出参数可以是多个,例如 function [r1,r2,r3] = testfun(p1,p2,p3)

  这里有一个注意:函数是不能直接运行的,大家可以写一个m文件调用你写的函数 就可以了,这个有编程经验的应该都懂,我要说的是,在c#中调用matlab的函数的时候,必须是function才能够被编译和调用,非function是不支持的哦。

7.关于Matlab我想说的话

  虽然会Matlab做很多事情,但现在我已经完全脱离它了,刚开始很多不习惯,比如很多数学函数要自己写,自己去发掘,但通过慢慢积累,并发掘开源的资源,我使用了Math.NET组件来替代了它的数值计算部分,虽然语法没那么优雅,但是功能上没问题了。至于其他的功能组件,比如统计,数据挖掘等工具箱,也有相应的开源组件来完成,实在找不到的,自己根据算法来完成,其实也不难,所以在这个过程中,使用C#的能力也越来越强。

  这并不是说Matlab不好,Matlab目前最大的问题,从实际应用上来说,主要有几个确定:

1.大的不能再大的MCR运行时,曾几何时,.NET 几十M的.net环境,就让人受不了,更加不用说Matlab的MCR,300多M了。安装后超过1G。。

2.在与其他平台交互应用还不太灵活与方便,例如在C#中调用Matlab的m函数,虽然现在支持还不错,但效率和使用门槛还是有一定的差距,不能普及;

3.虽然Matlab在分布式计算,效率以及部署方面花了很大精力,也越来越好用,但是价格让人望而却步。。。有几个工具箱我都没找到破解版。。无法试用;这方面是一个硬伤吧,别说学习了,即使买了,招几个这样的人都是个难事。。。

4.Matlab的资源太少,目前主流的开源项目托管平台,Matlab项目寥寥无几,虽然官方有一个开源的交流论坛,但人气太低,而且也是英文的,没什么用。。加上国内的研究人员,各自为战,基本不分享一些写过的Matlab代码,所以后人前仆后继,每天都在写重复的代码。。。

  每一次安装系统的时候,总是莫名其妙的要把Matlab给安装上去,但貌似很少打开,这个月还打开了几次。。。希望不是终点,Matlab的确是一个好的工具。

最后说一下Matlab的帮助系统吧:在若干年前微软的MSDN还有离线版的时候,它应该是最好的帮助系统吧。但现在MSDN好像都不包括在VS的安装包里面了,离线版也没有多大的意义。但是Matlab一直在这样做,这也是它强大的原因之一。所以的东西都可以从帮助文档中得到。但前提你得会基本的英文,这也是一大硬伤吧,没有中文版,不过想想也可怕,这么多文章翻译为不同版本,工作量得多大。以前有论坛翻译这些文档中的函数,但好像被官方叫停了,版权原因。悲哀,人家给你免费普及做广告,居然这样。。。最后附上一张图,曾经摸爬打滚过的help系统:


本文转自叶小钗 h数据之巅博客园博客,原文链接:http://www.cnblogs.com/asxinyu/p/Basic_Matlab_Experience.html,如需转载请自行联系原作者



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。



相关文章
MATLAB实战 | APP设计
生成一个用于观察视点仰角和坐标轴着色方式对三维图形显示效果影响的App,界面如图1所示。界面右上部的列表框用于选择绘图数据、切换按钮组用于选择绘图方法,中间的旋钮用于设置视点方位角和仰角,右下部的分档旋钮用于设置坐标轴着色方式、跷板开关用于显示网格线。
427 7
MATLAB实战 | APP设计
|
7月前
|
编解码
MATLAB | 科研绘图第十六期三Y轴图
MATLAB | 科研绘图第十六期三Y轴图
80 0
|
自然语言处理 数据可视化 C++
MATLAB基础篇(上)
MATLAB基础篇(上)
113 0
|
分布式计算
谈一谈|Matlab仿真项目简介
谈一谈|Matlab仿真项目简介
94 0
|
机器学习/深度学习
Matlab基础(一)
Matlab基础(一)
|
机器学习/深度学习 传感器 算法
基于MATLAB的扩频通信系统仿真研究
基于MATLAB的扩频通信系统仿真研究
|
程序员
MATLAB学习第四天(决策语句)
MATLAB学习第四天(决策语句)
120 0
Matlab:Matlab中常用的函数、案例详细攻略
Matlab:Matlab中常用的函数、案例详细攻略