![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5yM5QzN4UGOxQGO4kjZ5UmNykzNjhzYhV2M0IDO3I2Nj9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
作为前阵子被禁用的Matlab到底有怎样的魔力呢?Matlab毫无疑问是理工生的科研神器,在各大建模比赛中也被高频使用,下面就来聊聊Matlab的一些“奇技淫巧”。
一
基础用法
01
命令窗口的使用
MATLAB命令窗口
“>>”与光标的闪烁一起说明系统就绪,等待输入。
一般可在命令窗口中直接输入代码,然后按回车键,可以直接弹出输出结果。如果想要输入多行代码而不想让结果立马出来,可按住shift键同时敲击回车,或者直接在不想输出结果的那一行代码后直接加“;”。
例如计算[52×(36+8)-12]÷2-3;
其中,“ans”是“answer”的缩写,这也是MATLAB预定义的变量。
02
创建M文件
当我们需要编码的代码较多时,常常需要新建一个脚本文件,并把它保存在电脑中,而这脚本文件是以“.m”结尾的,MATLAB所保存的文件常为M文件。点击新建,我们可以选择新建一个脚本文件或者一个函数文件,而函数文件需要在脚本文件或者是命令行窗口调用之后才可使用。
新建的脚本文件
新建的M文件在保存时需要重新命名,当然也可用他的默认命名。在保存成功后,在下一次使用或者修改时可以直接点击打开并找到所需要使用或编辑的文件。新建的函数文件带有默认的形参,返回变量和函数名,按照需要修改即可。
03
MATLAB简单计算
MATLAB所用计算符号与常见编程软件类似,“+”代表加,“-”代表减,“*”代表乘,“/”代表除,“^”代表指数运算,要清楚的是MATLAB里面的运算均为矩阵运算,一般情况下我们所用的都是一个数。若实现矩阵的对应各个数的运算则需要在运算符号前加“.”。
如下图:
注:设置矩阵时用“[]”,如果是隔列,则用“,”或者空格隔开,如果是换行则用“;”隔开。
运算结果如下:
注:如果在写代码过程中所在行的代码不需要在最终运行时显现出来,则可用这行代码后加上“;”。
04
数组
(1)一维数组
可采用直接输入法、步长生成法和等间距线型生成法来生成对应数组。直接输入法:通过空格,逗号,分号来分隔数组元素,在数组中输入任意元素。如下图:
步长生成法:x=a:step:b。
等间距线型生成法:x=linspace(a,b,n),表示在a到b区间内生成n个采样点数据。
(2)二维数组
二维数组可采用直接输入法或者内置函数法来生成对应数组。直接输入法:同行之间元素用逗号或者空格分隔,不同行之间用分号分隔。
内置函数法,如zeros,ones,rand等。
zeros函数生成对应行列数的元素全为零的矩阵。
ones函数则是生成对应行列数的元素全为1的矩阵。
rand函数则是生成对应行列数的随机元素(取值为0到1)的矩阵。
(3)数组寻访
如下图:
通过a(2,3),a(2,:),a(:,1)等命令可以实现对数组内部分的调用。
(4)最大最小值搜索
通过max,min函数可寻找到矩阵中每一列的最大最小数的大小和位置。
05
for,if,while语句
与其他编程语言类似,for和while语句用于循环结构,if用于条件语句,即判断。基本格式为
其中在循环结构中也可用break,continue语句。
06
文件读取
(1)工作空间文件读取
在MATLAB中可以将工作空间的变量保存为文件,可以从文件中导入数据为保存变量,常用命令为save函数。save:将当前工作区的所有变量以二进制格式保存到文件matlab.mat文件中,不同类型的数据按照对应的最大精度保存,并保存对应的变量名称。
save(‘filename’,’var1’,’var2’):将工作空间内指定变量保存到文件filename.mat中。
load:加载matlab.mat中所有的变量,如果文件不存在则返回错误。
load filename:加载指定文件filename中的所有变量,加载时根据文件后缀确定文件的读入方式。
(2)常用的数据导入和导出函数
二
绘制2D/3D图像
01
二维图形绘制
plot函数是Matlab绘制二维图形的常用函数,该函数将数组中的数据点绘制在坐标平面上,通过直线将这些点连起来构成一条连续的曲线。主要的命令格式如下:
(1)plot(x,’Name’,Value)
x表示绘制图表的数据,Name表示属性的字符选项,Value表示相应的选值。当x是一维数组时,以数组元素下标为横坐标,元素数值为纵坐标绘制曲线;当x是二维数组时,数组的每列元素为纵坐标,数组的下标为横坐标绘制多条曲线。
(2)plot(x,y,’Name’,Value)
当x和y为同维数组时,分别以x和y为横纵坐标绘制曲线。
(3)plot(x1,y1,x2,y2,’Name’,Value)
在窗口中同时绘制以x1和y1,x2和y2等分别为横纵坐标的曲线。
结果如图:
02
线性、标记和颜色
Matlab中常见的线形、标记符和颜色如下图所示。
使用不同线形、颜色绘制正弦函数代码如下:
结果如图:
03
三维曲线绘制
plot3函数是Matlab绘制三维曲线的常用函数,输入参数时,需要输入第三个参数数组。
plot(x,y,z,LineSpec,’Name’,Value)
如果x、y和z是同维数组(向量、矩阵),分别以对应列作为x、y和z坐标,曲线个数等于矩阵列维数。
04
网格与曲面图绘制
三维网格图相当于在x-y平面上的z坐标定义一个网格面,相邻的点通过直线连接,网格节点就是z的数据点,在Matlab中通过mesh函数实现。
mesh(z):以z矩阵的列和行的下标为x和y轴的自变量绘制网格图;
mesh(x,y,z):x和y为自变量矩阵,z为建立在x和y之上的函数矩阵;
与mesh函数相比,surf函数使曲面上的所有网格都填充了颜色,命令格式与mesh函数类似,但提供了平面阴影和插值阴影。
mesh和surf生成图像结果展示:
三
建模实战
对乒乓球的弹跳过程进行建模分析其运动过程。忽略空气对球的影响,乒乓球垂直下落,落点为光滑的水平面,乒乓球接触落点立即反弹。如果不考虑弹跳中的能量损耗,则反弹前后的瞬时速率不变,但方向相反。如果考虑撞击损耗,则反弹速率有所降低。我们希望通过仿真得出乒乓球位移随时间变化的关系曲线,并进行弹跳过程的「实时」动画显示。
代码如下:
结果展示:
制 作 | 朱皓轩 申纪宏博 赵锴
出 品 | 仪器光电学生会
北航仪器光电人
微信号 : bhyqgdr2014