赞
踩
MATALB作为工科生几乎都会用到的科学计算软件,大部分大学应该都会购买其版权,因此安装这个软件的人不在少数,即使它占用了15G+的存储空间。但是我发现其实很多人都不会用这个软件,因为安装的时候就是抱着 “我之后可能会用到,先装以备后用” 的心态安装MATLAB,而我当时就是这样的心态。
这两年,前前后后也接触了不少MATLAB的教程,也遇到过很多需要使用的场景,但是发现一个很严重的问题,那就是一段时间不用,之前记住的命令又忘了,于是趁着这个学期学了数学实验课,加上之前学习的一些课程,想简单地以课程为主线总结一下MATLAB的使用,以作备忘。同时穿插一些课程的知识,就当作再次复习一遍了。
之后如果接触了其他需要使用Matlab的课程,也会继续更新。
其他资料可以参考MATLAB中文论坛
本博客大部分内容来自课程《数学实验》,(少部分来自其他教程)因此本博客不作任何商用,感兴趣的同学欢迎加入MOOC的学习,这是课程链接
数学类科技应用软件包括数值计算(Number Crunching)型软件和数学分析(Math Analysis)型软件
概括来说,Matlab有五大功能:
对于非计算机专业学生来说,在很多时候,需要完成一个任务时,往往会优先选择Matlab,而不是用某一门编程语言来编程序解决,我认为一个重要的原因就在于Matlab的操作界面非常友善,编程的效率更高,易学易用。
下面对Matlab的界面做一个简单的介绍。
如果需要完成比较复杂的任务,也可以在所在的工作文件夹下,右键,新建,脚本,建立.m文件,相当于C语言里面的.c和.cpp文件,然后双击.m文件就会在命令行上方弹出编辑器窗口,拉动边界可以调整命令行和编辑器的大小,如果按住窗口上方往外拖,还可以实现编辑器单独窗口。
接下来对工具栏和菜单栏做一个简单的介绍。
这个工具栏是针对编辑器的,也就是打开编辑器就会自动弹出。这个界面主要是对代码的各种操作
新手入门时最先接触的一定是命令窗口,它最大的特点就是所见即所得,也就是在命令行中随意输入一个命令,按下回车键,即可得到其运算结果,速度非常快,如下所示:
输入“1+1”,再按下回车,即可得到运算结果2,这里ans是answer是缩写,可以认为是系统自带的一个变量,会不断更新。
需要注意的是,随着命令行的输入,在右侧工作区(参考简介中的界面图)会自动添加运算过程中出现的变量,比如此时右边就出现了一个ans的变量,并显示值为2.
注意:这些变量如果不清理会一直存在,且其值也一直保持不变,除非在命令行中对变量进行重新赋值。另外,如果变量是一个矩阵,则不会显示具体的值,而是会显示矩阵的大小。
命令行回车即显示结果,那可不可以不显示呢?当然可以,只要在最后加上一个英文的分号即可。
再介绍一些使用频率较高的基础指令:
format rat
表示运算结果用分数表示。a. 手动更改变量
如果不想通过命令修改,也可以双击变量,会自动弹出一个类似于Excel的变量界面,可以查看或修改变量。
b. 前后指令复用
当你想在命令行中反复运算一个非常复杂的表达式时,如果不想每次都重新输入一遍怎么办?可以选择复制粘贴,但MatLab提供了一个更好用的方法,那就是通过上下键选择之前输入过的指令,这也是非常常用的功能。
c. 终止当前运算
当你不小心写了一个死循环或者运行了一个庞大的数据文件发现 左下角状态栏 一直显示正忙,想要终止运行又不想关掉软件,就可以使用进程终止操作,Ctrl + C ;另外,如果想关掉Matlab。可以在命令行中输入 Exit 或 Quit ,和点右上角的叉效果相同。
编辑器窗口是用来创建.m脚本文件的,和命令行窗口的区别就像是VS Code的文本编辑和终端输入。调出的方法就是在菜单栏中点击新建即会自动弹出一个编辑器窗口:
如果选择保存,会默认保存在左侧的当前文件夹中,类似于一个工作区。
但是需要注意的是,MATLAB的脚本文件的命名也有讲究:
文件名命名要用英文字符,首字符不能是数字或下划线;
文件名不能与matlab的内部函数名相同。 m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字/下划线等组成。原因是简单的单词命名容易与matlab内部函数名同名,结果会出现一些莫名其妙的错误;
文件存储路径最好为英文路径。如果用带有中文的路径,某些情况下会出问题。
m文件名中不能有空格。若需要用两个或以上单词组合作为文件名,各单词必须直接连接组合(可以把每个单词首字母大写以作区分,或者使用下划线)。如random walk,应该写成RandomWalk或者Random_Walk。
以上参考链接:https://blog.csdn.net/soya_soya/article/details/8778273
那么接下来就是编程的环节了,MATLAB脚本语言非常容易上手,但凡有一点C语言或Python的基础差不多就可以了。为方便有编程基础的快速入门,这里只介绍一些和C语言中不一样的地方吧
变量的命名 :只能以字母开头(C语言还可以以下划线开头),且最多不超过19个字符。
全局变量
循环结构:在MatLab中,循环不使用 { } ,而是用end表示循环的结束(不要求缩进),而且if 或while的条件不需要加 ( ) 。参考下面的例程:
/****for循环****/ for n = 1:10 //表示i从1到10逐次+1,循环十次 x(n) = sin(n*10); end //终止for循环 /****while循环****/ x = 0; sum = 0; while x < 101 sum = sum + x; x = x + 2; end /****if-else语句*****/ if x > 1 f = x^2 + 1; else if x <= 0 f = x^3; else f = 2 * x end /*****switch语句******/ num = input('请输入一个数'); switch num case -1 //注意case后面没有冒号 disp('I am a teacher.'); case 0 disp('I am a student.'); case 1 disp('You are a teacher.'); otherwise //等同于C语言中的 default disp('You are a student.'); end
a. 运算符号:
这里尤其需要注意带“.”的运算符!!!
一般来说,带“.”的运算符功能和不带“.”的运算符是一样的,但是在矩阵与矩阵之间的运算时有差别,即带“.”的运算符表示矩阵的每一个元素进行运算,而不是一般的矩阵运算(乘法),参考如下例程:
一般来说,但凡涉及到向量或者矩阵的运算,都得要考虑是不是得加点号,因为不加可能会报错或者运算结果完全不对,慎重!
b. 其他符号:
% :行注释符,其后这一行的内容为注释,相当于C语言中的 //,如果在脚本中写 %% 并单独成行 ,则表示对代码进行分节,(记得%%后要加空格!)可以使用运行命令中的运行节。
%{
和%}
:块注释,相当于C语言中的/**/
,注意,这里的大括号和百分号是错位的和C语言块注释符不太一样。
······ :表示续行
在命令行中随便输入一个a = 10,表明a是一个常数变量,而一般在求导和积分时,几乎都是用符号进行运算,因此,一般都需要在程序运行前声明必要的符号变量,语法如下所示:
x=sym(‘x’) —— 表明x是符号变量
syms x y z —— 定义多个符号变量
二者之间的区别可以参考这篇链接
syms f(x) —— 定义两个符号变量,f和x,且二者之间还有函数关系
在声明符号函数时,还可以使用inline函数:
f = inline(“x^3+5*x”) 或者 ff = inline(‘-x*sin(x^2-x-1)’, ‘x’) 如果不带引号,则其内部的变量都应已知。
有时候需要多个函数共用一个变量,就可以将变量定义为全局变量,使用指令
global
,具体用法建议使用help
查看。
使用方法是在每个函数中都要声明global val
,表示这个变量去全局变量中找,如果任何函数改动这个数值,如val = 0;
那么所有函数引用该变量得到的值都会发生改变。
说明:如果不加参数 ‘s’,则输入的内容可以参与运算,比如一个矩阵A,rand(3)等,而加上参数 ‘s’之后,输入的内容都会作为字符串返回。
这部分更详细的内容可以参考后续教程:【MATLAB】(二)使用拾遗
对于这些函数,我认为最重要的是知道MATLAB有这个函数,如果确实需要使用,可以利用help命令来查看详细文档。
“等于”和“不等于”
逻辑运算符:
逻辑关系函数总结
此外,还有fplot函数:
以这个为例,需要学会看Matlab的应用手册,比如第四行之后,函数括号里面都是用 “____” ,其实是代替前面的那些参数,不能省略。
需要了解的是,在运行Matlab时跳出的fig窗口其实自带了很多编辑图像属性的功能。只需要点开图像属性
即可对图像标题,坐标轴标签等进行设置。
在用MATLAB生成一张图像之后,很多时候的选择都是直接截图,但是,这样存在一个问题,那就是图像周围灰色的边框无法消除,严重影响了图像的美感:
所以,如果图像需要放到论文或者正式的文档中,建议可以按照如下操作:
这样得到的图像就是矢量图,然后直接到Word中粘贴,看到的图像的背景就是纯白的:
其他资料:
但是现在官网更推荐的函数是 polarplot函数:
举个例子:
其他绘图可以参考https://ww2.mathworks.cn/products/matlab/plot-gallery.html,以及这个:https://matplotlib.org/stable/gallery/index.html。
有时候需要画带有填充的柱状图,如下图所示
这个时候就需要用到MATLAB中的fill
指令。在MATLAB中使用help
指令可以得到其简要介绍:
详细内容建议看帮助文档。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。