不记得上一次写超过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的等差数列;

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

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

5.2 矩阵操作

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

data = rand(,) %初始化1个10*10的随机矩阵

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

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

c = data([,],[,]) %%取第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()] %注意中间有空格,结果: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要掌握的一些要点

    来源: http://www.cnblogs.com/asxinyu/p/Basic_Matlab_Experience.html 接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些 ...

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

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

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

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

  4. [算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本

    一.有啥用 这里用的是LIS3DH三轴加速计,输出为X.Y.Z轴的加速度,通过串口连接电脑,电脑里运行matlab脚本通过串口实时获取数据并做可视化显示. 这里虽然是针对LIS3DH的,其实稍作修改即 ...

  5. 每天一个小算法(matlab armijo)

    下面是 armijo线搜索+最速下降法的小程序,matlab用的很不熟,费了不少劲. 函数: function g=fun_obj(x) syms a b f = 1/2*a^2+b^2-a*b-2* ...

  6. 【目录】Matlab和C#混合编程文章目录

    本博客所有文章分类的总目录链接:[总目录]本博客博文总目录-实时更新 1.Matlab和C#混合编程文章目录 9.接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点 8.国内第一 ...

  7. 接触CrackMe 第一个

    今天刚接触这个 做了一个简单的. 用Onlydbg加载之后,对GetDlgItemTextA函数下断点,因为程序是在控件上获取数据的. Register输入Name和Serial点击Ok之后,断点响应 ...

  8. IT行业有前景么?一个10年行内人的6点看法

    本人毕业快11年了. 大学读的建筑专业,却在IT行业干了10年. 真心来讲,我非常感谢好兄弟老唐,是他在我迷茫的那两年,领着我踏入了IT行业,也找到了自己的兴趣爱好. 这些年我经常在知乎.博客等地方发 ...

  9. 从一个简单的Java单例示例谈谈并发

    一个简单的单例示例 单例模式可能是大家经常接触和使用的一个设计模式,你可能会这么写 public class UnsafeLazyInitiallization { private static Un ...

随机推荐

  1. MSVCRTD.lib(mfc.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC (转)

    一.问题描述 我所使用的编程环境:VS2010 出现的问题如下: MSVCRTD.lib(mfc.obj) : error LNK2019: 无法解析的外部符号_WinMain@16,该符号在函数 _ ...

  2. 人脸识别经典算法三:Fisherface(LDA)

    Fisherface是由Ronald Fisher发明的,想必这就是Fisherface名字由来.Fisherface所基于的LDA(Linear Discriminant Analysis,线性判别 ...

  3. PHP中关于位运算符 与 或 异或 取反

    <?php /** * author:LMS * createTime:2015/07/22 * desctiption:位运算[ & | ^ ~ ] * 与&:如果a.b两个值 ...

  4. Android学习地址

    Google Android官方培训课程中文版http://hukai.me/android-training-course-in-chinese/

  5. 口水话 闭包中this的指向

    前言:高程这本书真是神奇,每复习一遍,都会有新的收获.话说我看书有个习惯,要是看得似懂非懂的地方就喜欢打个“?”.这次看到高程第七章“函数表达式”关于闭包与this对象的部分,发现已经积攒了2个问号了 ...

  6. C++ 非阻塞套接字的使用 (3)

    异步非阻塞套接字避免了死循环的接收问题,但是软件用起来体验还是很差.究其原因,软件在指令的发送.接收上, 采取了一种不合理的方式:在指令的发送后,立刻调用接收函数,等待回令. 若是采用同步阻塞套接字, ...

  7. java程序员的技能要求

    一.WEB编程1.客户端WEB编程a) 知道html和xhtml的区别b) 熟悉框模型(盒子模型)概念,了解margin.border.padding的区别c) 熟悉浮动.定位的概念,了解positi ...

  8. Sql Server对象管理器的使用

    VS提供了很多便捷的工具,Sql Server对象管理器可以直接在VS里面访问数据库,不用再打开一个Management Studio.这里记录下Sql Server对象管理器的使用. 1.先在视图里 ...

  9. 谈谈对BPM的理解

    BPM的产生缘由 近年来,随着计算机技术的发展和互联网时代的到来,我们已经进入了信息时代,也称为数字化时代,在这数字化的时代里,企业的经营管理都受到了极大的挑战.从上世纪90年代起至今,企业的信息化工 ...

  10. Spring Trasnaction管理(1)- 线程间事务隔离

    问题导读 Spring中事务是如何实现的 Spring中各个线程间是如何进行连接.事务隔离的 Spring事务配置 Spring的事务管理应该是日常开发中总会碰到的,但是Spring具体是怎么实现线程 ...