来源: http://www.cnblogs.com/asxinyu/p/Basic_Matlab_Experience.html

接触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系统:


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

【转载】接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点的更多相关文章

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

    不记得上一次写超过20行的matlab程序是什么时候了,大概是2013年吧,那个时候写过2篇文章,实际用到了 一些matlab的内容,超过200行的matlab程序应该要追溯到2011年了,最近为了帮 ...

  2. 一个多阶段库存订货问题的 +Leapms 求解要点

    一个多阶段库存订货问题的 +Leapms 求解要点 问题来自微信公众号“运筹分享交流”——“互助·运筹擂台3 多阶段库存订货问题”. 数学概念模型 求解结果 +Leapms>mip relexe ...

  3. 接触Matlab5年一个总结(Matlab要掌握的一些要点 )

    阅读目录 前言 Matlab的开发环境与简单介绍 Matlab的常见命令 Matlab的灵魂-矩阵操作 Matlab的.m或.fig的编程与技巧 从大二开始接触到matlab,讲真,这是一个我觉得很良 ...

  4. [转载] Android Studio 上第一个 Xposed 模块

    本文转载自: http://www.open-open.com/lib/view/open1451364108964.html 环境: 已root手机一枚 Android Studio一枚 官方文档参 ...

  5. JAVA的StringBuffer类(转载整理)____非常重要的一个类,线程安全,不用每次创建一个对象,以及和String的区别

    核心部分转载自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html StringBuffer类和String一样,也用来代 ...

  6. 【转载】SQL语句用一个表的数据更新另一个表

    在Sqlserver的维护更新操作中,有时候涉及到Update操作,其中有一种情况是根据特定的条件,以一个表中的数据更新另一个表的数据,此时涉及到两个表之间的关系以及操作,此处介绍2种更新方法. (1 ...

  7. 转载:“error LNK1169: 找到一个或多个多重定义的符号”的解决方法

    转载来自:http://www.cnblogs.com/A-Song/archive/2012/03/23/2413782.html 问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. ...

  8. 转载——Step by Step 创建一个 Web Service

    原创地址:http://www.cnblogs.com/jfzhu/p/4022139.html 转载请注明出处 (一)创建Web Service 创建第一个项目,类型选择ASP.NET Empty ...

  9. 转载 STM32 使用Cubemx 建一个USB(HID)设备下位机,实现数据收发

    STM32 使用Cubemx 建一个USB(HID)设备下位机,实现数据收发  本文转载自 https://www.cnblogs.com/xingboy/p/9913963.html 这里我主要说一 ...

随机推荐

  1. Node.js爬虫-爬取慕课网课程信息

    第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...

  2. JavaScript概念总结:作用域、闭包、对象与原型链

    1 JavaScript变量作用域 1.1 函数作用域 没有块作用域:即作用域不是以{}包围的,其作用域完成由函数来决定,因而if /for等语句中的花括号不是独立的作用域. 如前述,JS的在函数中定 ...

  3. asp.net core中负载均衡场景下http重定向https的问题

    上周欣喜地发现,微软官方终于针对 asp.net core 在使用负载均衡的情况下从 http 强制重定向至 https 的问题提供了解决方法. app.UseForwardedHeaders(new ...

  4. mysql中group by和order by同时使用无效的替代方案

    前言 最近一年由于工作需要大部分使用的都是NoSql数据库,对关系型数据库感觉越来越陌生,一个由group by和order by 引发的血案由此而生.在此做个记录,以备不时之需. 需求 首先,看一下 ...

  5. kaggle Titanic心得

    Titanic是kaggle上一个练手的比赛,kaggle平台提供一部分人的特征,以及是否遇难,目的是预测另一部分人是否遇难.目前抽工作之余,断断续续弄了点,成绩为0.79426.在这个比赛过程中,接 ...

  6. 提高驾驶技术:用GAN去除(爱情)动作片中的马赛克和衣服

    同步自我的知乎专栏:https://zhuanlan.zhihu.com/p/27199954 作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章.这篇就介绍利用生成式对抗网络(GAN)的两个基 ...

  7. Could not open input file: composer.phar

    Yii 2官网推荐用Composer安装框架,但是在本地出错:Could not open input file: composer.phar.后来修改了命令行就ok了,难道是我装的Composer跟 ...

  8. 浅谈IOC

    一.引言 IOC-Invertion of Control,即控制反转,是一种程序设计思想,世上本没有路,走的人多了便有了路,本文将一步步带你了解IOC设计思想的演进之路. 在学习IOC之前我们先初步 ...

  9. DOCKER 从入门到放弃(二)

    搜索镜像 从docker官方镜像仓库搜索镜像 docker search [OPTIONS] TERM OPTIONS: --automated :只显示自动创建的镜像,默认值为fasle --fil ...

  10. if else的错误用法!

    在学习C语言的时候,我们会了解和认识if  else 的用法, 并在程序里面使用它来作为判断条件! if(表达式)       //先定义一个条件,如果成立,则循环if里面的语句. { 语句 } el ...