重新学习MATLAB——程序设计核心基础

[复制链接]
solomonkilling 发表于 2019-4-12 20:40:51 | 显示全部楼层 |阅读模式
来源:https://www.toutiao.com/group/6630745515380179460/
若内容不全,可点击上述链接查看来源网页,在网页中点击红色双层向下的箭头阅读全文
原站点评论数目:116

了解点儿MATLAB,知道它非常有用,但一直不太会用,如何快速掌握并运用它呢?

本专栏力争用最简洁的语言和逻辑,让您在最短时间内,学到教材课程中罕见的MATLAB运用技法,从新手迈向成手。

MATLAB编程特点

MATLAB跟其它常见的编程语言(如CJAVAPython等)一样,可以用来编写代码,让计算机自动完成各种各样的任务。

MATLAB编程语言有这么几个特点:

  • A简洁高效,一针见血
  • B与工程/科学上用的自然语言非常接近,甚至没学过的人也有可能一看就懂
  • C海量内置函数,“你能想到的,都有解决方案”
  • D超强工具包,涵盖科学工程领域各个方面

一句话:

最适合非专业程序员使用的面向工程和科学的编程语言简单明快

生命有限,为什么不选一个简单明快的语言呢

M文件——脚本和函数

第一节课极速入门时我们就讲了,MATLAB的程序文件只有一种,后缀为.m的M文件

而M文件只有两种用途:脚本函数

  • 脚本怎么用?

脚本就是把一堆代码放到一起,“相当于打了一个包”,然后保存时命个名,比如做了一个画图的脚本,那就叫ScriptDrawPicture吧。

然后呢,程序里面每当需要画图的时候,就把程序里写上一句:

ScriptDrawPicture;

就OK了。

进一步解释,脚本的作用只是把一段程序给“收纳”起来了,调用时MATLAB会把这一大堆代码再替换回去,只是我们编程者看起来程序利索多了。

脚本让代码看起来整洁易懂

  • 函数怎么用?

编程语言都有函数的编写,第一节课里演示了一个最简单的函数myAdd()。

functionc=myAdd(x,y)c=x+y;end

将这个.m文件命名为myAdd,就可以直接调用了,如:

>>myAdd(1,2)ans=3

函数的作用,在于“将方法打包”使它适用于不同的自变量,每次用到同样的方法可以直接调用。

程序控制流

MATLAB也同其它语言一样,有自己的程序控制流格式,非常简单,只有3类5个:

  • 循环——for和while
  • 分支——if和switch
  • 控错——try-catch

程序流反映的就是你的思维流

这就3类控制流格式就足够完成非常复杂强大的MATLAB程序了,所以一定要全部熟练掌握哦。

循环——for和while
  • for

最典型的用法:

for变量=初始值:增量:终止值指令;end
  • for的矩阵式用法

如果不了解for的第二种用法,就要注意了,因为这种用法功能是非常强大的。

上面的(初始值:增量:终止值)部分让你想到了什么没有,是的,这其实是一个向量啊,实际上,for后面可以直接跟矩阵的!比如:

fork=A指令;end

无论A是几维的矩阵,都可以用这样一层循环搞定;还在使用多层循环嵌套的同学,是不是感觉刚刚认识MATLAB的真面目啊!

循环——计算机强大的原因

  • while
while循环表达式循环体指令;end

执行方式:若循环表达式为真,则执行循环体指令,执行完成后再返回判断循环表达式,如果还为真就再执行循环体指令,如果为假,则跳出循环。

  • continue

在for或while这样的循环体中,如果出现continue,就直接跳到下一次循环的执行。

换言之,continue后面的语句在本次循环中都不执行。

典型常用情景:需要计数,记录一个矩阵中有多少满足条件的元素,那么满足条件就在某变量上加1计数,如果不满足就直接continue进入下一次循环。

不要小看这个continue,它会让你的循环妙笔生花,瞬间充满灵气,往往可以在一个循环体中,做到无数次条件判断的功能呢

与它类似的还有一个:

  • break

同样是用在循环中,当遇到break时,程序将直接跳出循环

当然,不可能跳出所有循环,一个break只跳出离它最近的那个循环。

典型常用情景:需要寻找一个矩阵中满足特定条件的一个元素,找到就可以停止搜索,就可以使用break。(如果是寻找n个数也可以,试着想想看怎么做?)

理清程序结构是编程的关键点

分支——if和switch
  • if-else
if逻辑表达式执行语句end

还可以这样:

if逻辑表达式执行语句1;else执行语句2;end

或者这样:

if逻辑表达式1执行语句1;elseif逻辑表达式2执行语句2;end

很简单吧,不用解释一看就明白,实在不懂可以打开MATLAB做个实验试试,这样最容易学会。

  • switch-case

直接上个实例:

n=input('Enteranumber:');%输入一个n值switchncase-1%如果n是-1disp('negativeone')case0%如果n是0disp('zero')case1%如果n是1disp('positiveone')otherwise%如果上面这几种都不是disp('othervalue')end

这里otherwise不是必须的,但是要尽量考虑加入,常用于程序输入的报错。

上面input和disp分别是输入和输出的两个函数,我们后面会专门用一节讲解人机交互的方法技巧,包括:命令行交互GUIAppDesigner

想不清楚程序结构时,画画图

控错——try-catch

这是MATLAB语言的神来之笔,它赋予了M语言强大的错误控制能力,这么方便的用法是许多其它语言都不具备的,一定要学会这个结构,在程序编写中将节省大量时间

{!--PGC_COLUMN--}try指令1;%执行指令1,如果正确,就跳出结构catch指令2;%如果指令1不正确,就执行指令2end

神奇吧,别告诉我用MATLAB好多年不会用这个结构。

有了这个结构,你的程序将:

  • A减少程序中断,有错误也可以不影响整体运行
  • B更容易查错/纠错
  • C增强代码的鲁棒性和可靠性

强大吧,相见恨晚吧。

MATLAB无比强大,快去寻找宝藏吧

全局变量的使用技巧

在控制流中,除了结构,最应该了解和掌握的,就是全局变量了。

全局变量也是一个变量,只不过,它可以在所有.m文件中都可以管用,这就是它在MATLAB程序控制流中非常常用和好用的原因。

  • 全局变量的声明
globala%声明了变量a是全局变量

就这么简单,声明时你会发现,a变成了蓝体字,非常地显眼。

上面这句代码的意思应该再明确一下:

不是说声明了a是全局变量后,a在其它的函数或脚本中就都是全局变量了,而是说,在声明之后的本M文件中,a是全局变量

再进一步解释一下:

  • 在函数中

在函数中,我们还要再声明一次:

globala%声明了变量a是全局变量

原因就是,只有在函数中再声明一次,声明之后的本M文件里,a才是全局变量

  • 在脚本中

我们上面说过,脚本其实就是替换性的操作,只是我们看起来方便利索而已,所以,在脚本中,全局变量不需要再次声明。

不过,个人坚持认为,在脚本中也还是要声明,因为:

A全局变量多声明几遍没有任何副作用

B在脚本中不声明的话,显示上不变“蓝体字”

C养成时刻注意到哪些变量是全局/哪些是局部变量的习惯