MATLAB学习笔记1:MATLAB概述

阅读前请注意:

1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳、拓展阅读。博客内容由 @K2SO4钾 撰写、编辑,发布于 @K2SO4钾 的个人投稿与华中师范大学HelloWorld程序设计协会CSDN官方账号 @CCNU_HelloWorld注意,如需转载需得到作者 @K2SO4钾 的同意与授权!

2. 学习笔记基于 《MATLAB R2018a完全自学一本通》(刘浩, 韩晶) 1 ,笔记中增加了很多程序示例和笔者个人的思考。学习笔记面向刚接触MATLAB的新手,内容偏基础。学习前请自行下载安装MATLAB。笔记中示例用MATLAB版本为MATLAB R2019a

3. 请谅解笔记可能会出现的错误,欢迎指正讨论;由于MATLAB更新导致的旧代码无法使用的情况,也欢迎讨论交流。


快速跳转:    直接开始阅读     跳转到博客一半位置     跳转到思考题     作者栏与参考文献

上一篇:MATLAB学习笔记0:学习须知

下一篇:MATLAB学习笔记2:MATLAB基础知识(上)


1.0 MATLAB笔记:传送门汇总


1.0.1 MATLAB学习笔记:传送门汇总


MATLAB学习笔记0:学习须知

MATLAB学习笔记1:MATLAB概述

MATLAB学习笔记2:MATLAB基础知识(上)

MATLAB学习笔记3:MATLAB编程基础(前半)

MATLAB学习笔记3:MATLAB编程基础(后半)


1.0.2 MATLAB拓展学习:传送门汇总


MATLAB拓展学习T1:匿名函数和内联函数

MATLAB拓展学习T2:程序性能优化技术

MATLAB拓展学习T3:histogram函数详解

MATLAB拓展学习T4:数据导入


1.0.3 MATLAB专题博客:传送门汇总


MATLAB-S1:元胞自动机原理及MATLAB实现

MATLAB-S2:图像处理技术


1.0.4 MATLAB应用实例:传送门汇总


MATLAB应用实例:Floyd算法

MATLAB应用实例:简单数字滤波技术的MATLAB实现

MATLAB应用实例:无限脉冲响应数字滤波器


施工中~请耐心等待





1.1 MATLAB系统组成


MATLAB系统由MATLAB开发环境、MATLAB数学函数库、MATLAB语言、MATLAB图形处理系统和MATLAB应用程序接口五部分组成。


MATLAB开发环境

MATLAB开发环境是一个集成化的工作区,用户可以在工作区中输入数据、对M文件集成编译和调试、观察输出、使用工具箱与在线文档等。它包含了MATLAB桌面、命令行窗口、M文件编辑调试器、工作区、在线帮助文档等。

MATLAB开发环境


MATLAB数学函数库

包含了众多计算方法的函数库,从简单到复杂一应俱全。


MATLAB语言

MATLAB语言是一个高级的基于矩阵的语言,包括程序流控制、函数、脚本、数据结构、输入输出、工具箱和面向对象编程等特色。因此在C语言的基础上学习MATLAB语言会更加便捷。


MATLAB图形处理系统

MATLAB图形处理系统可以将向量和矩阵可视化,并且可以对图形进行修改、编辑、保存、打印。它可以进行二维、三维绘图,图像、视频帧处理,矩阵信息可视化(例如元胞自动机)。


MATLAB程序接口

MATLAB程序接口便于MATLAB调用C和Fortran程序,可以在MATLAB与其它应用程序之间建立客户/服务器(C/S)关系。




1.2 MATLAB工作环境


在MATLAB安装目录中bin文件夹下双击MATLAB.exe启动MATLAB。进入MATLAB主页面后如图。

MATLAB主界面
由于此时没有新建编辑器文件,即m文件,因此主页面中没有编辑器、发布、视图标签。如果你是第一次使用,那么左侧“当前文件夹”也应当只有bin文件夹中原有的文件和文件夹。

点击左上角“新建脚本”,即可出现编辑器区域。MATLAB主页面被分成4个大区域,菜单栏/工具栏、文件夹栏、命令行窗口/m编辑器、工作区。下面将依次介绍。

MATLAB主页面4大区域


1.2.1 菜单栏/工具栏


菜单栏/工具栏中,包含了主页、绘图、APP、编辑器、发布、绘图6个标签。下面介绍每个标签下的部分功能


1.2.1.1 主页

新建脚本

建立新的.m文件,并在编辑器中展示一个未保存的 .m文件:Untitled.m。保存后才可运行文件中的MATLAB代码,快捷键Ctrl+N。


新建实时脚本

建立新的.mlx文件,并在编辑器中展示一个未保存的 .mlx文件:Untitled.mlx。可直接运行其中的代码。


——————↓——— Q & A ———↓———————

※脚本和实时脚本的区别?

脚本只有保存之后才可运行,运行之后在命令行窗口和图像窗口中输出。实时脚本可存储输出,将输出展示在代码旁,融合了文档和程序

实施脚本的优点:

  1. 输出与代码段对应,能便于查找代码中错误、分析代码、浏览;
  2. 可存为富文本格式的可执行记叙脚本,可以添加标题、题头和格式化文本来描述代码的含义、问题分析过程,也可以添加方程、图像和超链接作为支持材料;
  3. 可用于创新式授课教学。

相同的代码段用.m文件运行:

.m文件运行
用.mlx文件运行:

.mlx文件运行

clc,clear all,close all

%% 数据输入
figure(1)
x=[15.2 17.2 16.8 14.2];
y=[9.2 11.3 14 13.1];
[X,Y]=bezier(x,y);
plot(X,Y,'r','linewidth',3)
grid on
figure(2)
x=1:16;
y=[1 3 6 11 15 17 18 19 20 22 25 ...
    31 39 48 47 45 40 28];
[X,Y]=bezier(x,y);
plot(X,Y,'b','linewidth',3)
grid on

fprintf('执行完成')

function [X,Y]=bezier(x,y)
n=length(x);
t=linspace(0,1);
xx=0;yy=0;
for k=0:n-1
    tmp=nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);
    xx=xx+tmp*x(k+1);
    yy=yy+tmp*y(k+1);
end
if nargout==2
    X=xx;Y=yy;
end
end

.mlx文件可以在代码段中插入文本也可插入注释,.m文件只能在代码段中插入注释。.mlx文件菜单栏中的标签为“实时编辑器”,其功能在“编辑器”的基础上增加了文本功能。

.mlx文件运行添加文本

———————↑——— Q & A ———↑——————


新建

建立新的.m文件、.mlx文件、函数、图形、Simulink模型、应用程序等。

主页-新建

打开

可以打开MATLAB的.m文件、.fig文件、.mat文件、.mdl文件、.cdr文件等,快捷键Ctrl+O。


导入数据

从其它文件中导入数据。


保存工作区

把工作区中的变量及数据存为 .mat文件


分析代码

分析路径中所有.m、.mlx文件中代码可能存在的错误和问题,并生成分析报告。

代码分析报告

Simulink

打开Simulink模块。


布局

调整各页卡的位置、大小。

当你误操作把几个页面卡片弄乱、删除了,或者是想要改变它们的布局,可以在菜单栏中“布局”中调整,恢复默认,或是调整为你想要的布局。

在布局中调整页面卡片

预设

用于预先设置命令窗属性、常规、字体、工作区等。

在这里插入图片描述

设置路径

设置工作路径。默认的工作路径是MATLAB文件夹中bin文件夹。


附加功能

可从这里获取包括硬件支持在内的附加功能、管理附加功能,也可以把自己编写的工具箱、APP打包。


帮助

打开帮助文档,或者获取其它形式例如社区的帮助。


1.2.1.2 绘图

在右侧工作区中选中将要绘图的变量,在上方选择绘图方式,可快速得到图像。

快速绘图

1.2.1.3 APP

这里,你可以使用已经下载安装好的各个工具箱和应用程序,也可以获取、安装、设计APP。

APP页面

1.2.1.4 编辑器/实时编辑器

编辑器中,主要关注“编辑”、“断点”、“运行”。


编辑

在“编辑”一栏中,可以插入节(也可以在代码段中加上“%%”来添加节),也可以添加注释(行注释需要在注释前加“%”,或者使用Ctrl+R快速添加注释,Ctrl+T快速取消注释),也可以对代码进行智能缩进(Ctrl+I)、添加或删除缩进。


断点

断点, 调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析。也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时间。2 断点的使用非常重要,对于代码的调试、查错都有很大的帮助。在后续的学习中一定要掌握。

在代码行序号出右键可快速添加、清除、禁用断点。断点在代码行序号中显示为红色,禁用的断点标号上会有一个叉号。

断点

运行

点击“运行”可运行当前编辑器内容,在下拉菜单中可以选择运行的方式。

运行方式
点击“运行并前进”,程序运行至第一个断点处。此时出现“调试”栏。调试栏中,“继续”可让程序执行至下一个断点,“步进”则是一行一行运行,“步入”“步出”可观察函数内的运行情况,“运行到光标处”程序将运行至光标处,用于跳过一些复杂的循环(因为“步进”会运行每一次循环。当然,使用断点也可以实现这个功能)。这些功能非常重要

运行并前进
选择一个节(即按照“%%”分隔开的代码块),点击“运行节”,即可运行本节内容。

“运行并计时”会打开探查器来查看代码运行的时间。

实时编辑器与编辑器的区别在上文“Q&A”中已述。


1.2.1.5 发布

这里可以将代码与LaTeX关联,可以将结合MATLAB代码、文本、标记的文档生成.html进行发布。


1.2.1.6 视图

如果你觉得需要调整编辑器的视图方式,例如将选项卡位置放在左端、分割编辑器视图或者是其它编辑器的调整,在菜单栏中的“视图”中进行调整即可。

在这里插入图片描述



1.2.2 文件夹栏


文件夹栏可以快速打开路径中的.m、.mlx文件,也可查看文本文档(不支持文档中中文的显示)。默认问bin文件夹。可在上方目录中调整路径。

从文件夹栏中快速打开.txt文件

1.2.3 命令行窗口/编辑器


编辑器用于编写MATLAB代码与注释,命令行窗口用于 运行单行命令、展示输出

命令行窗口中的“>>”是运算提示符,表示MATLAB处于准备状态等待用户输入指令进行运算。用户输入一段指令并按下Enter之后,MATLAB执行这一段指令并给出这一段指令的运行结果(如果有输出的话),并重新显示“>>”即进入准备状态。


——————↓——— Q & A ———↓———————

※编辑器运行代码和命令行窗口运行代码有何不同?

命令行窗口用于运行单行命令,敲下回车代码即运行,因此无法执行含分支结构、循环结构等复杂结构的代码,同时也无法对代码进行注释,并且在清除命令行窗口(clc)之后会丢失代码。

因此推荐使用编辑器来编写程序,使用命令行窗口来进行运行结果的微调(例如将行向量的结果转换为列向量便于后续操作等)或者运行复制粘贴的一段不需要保存的代码段。

——————↑——— Q & A ———↑———————


1.2.4 工作区


工作区窗口显示当前内存中所有的MATLAB变量的变量名、数据结构、字节数、数据类型等信息,一行对应一个变量。将鼠标放于变量上可以查看其大小和类型(也可在“值”一列查看)。如下图,光标指示位置是一个名为“chrom_range”、类型为double、大小为2行8列的变量。

工作区变量
双击工作区变量,可打开变量对其具体内容进行查看。右键也可对变量进行操作。

双击变量进行查看
菜单栏/工具栏中新建变量、导入数据、保存工作区、清除工作区可对工作区变量进行操作。

在工作区页卡中按下Ctrl+S,可将所有变量保存至.mat文件方便再次使用(避免了反复运行代码的繁琐)。

将.mat文件直接拖入工作区中,即可使用文件中保存的MATLAB变量。

命令行窗口中键入

clear all

回车,即可清除工作区,同时之前打开的变量也会显示“变量不存在”。

在命令行窗口键入save,可以将工作区变量存为 .mat 文件


————↓———— 提 示 ————↓————

命令行窗口键入clc回车可以清楚命令行窗口哦。

————↑———————————↑————




1.3 MATLAB目录结构


MATLAB文件夹(即MATLAB的安装目录)下一般自带有25个子文件夹,其中部分文件夹需要记住其位置和功能(加粗内容,尤其是bin文件夹)。

MATLAB目录结构

文件夹名称用途
\binMATLAB中可执行的相关文件,同时也是搜索路径中的默认路径。建议把.m文件按规则命名好后存在这里以便查找(也可以更改路径)
\extern创建MATLAB外部程序接口工具
\help帮助系统
\javaMATLAB中Java支持程序
\rtwReal-Time Workshop软件包,可从Simulink模型生成优化的,可移植的和可定制的ANSIC代码
\simulinkSimulink软件包,用于动态系统的建模、分析、仿真
\stateflowStateflow软件包,用于状态机设计的图形化开发和设计工具
\sysMATLAB需要的工具和操作系统库
\toolboxMATLAB各种应用程序
\uninstallMATLAB卸载程序
\license.txt软件许可协议的内容
\patents.txt软件申请的专利内容



1.4 MATLAB文件管理


MATLAB提供了专门的路径搜索器搜索存储在内存中的.m文件与其它相关文件。

我们在编辑器或命令行窗口输入并运行代码时,MATLAB对代码中函数搜索路径如下(以polyfit函数为例):

  1. 检查polyfit是不是工作区变量名,不是,则执行下一步;
  2. 检查polyfit是不是一个内置函数,不是,则执行下一步;
  3. 检查当前文件夹是否存在名为polyfit.m的文件,没有,则执行下一步;
  4. 顺序检查所有MATLAB搜索路径中是否存在polyfit.m文件;
  5. 若上述步骤仍没找到polyfit,MATLAB会给出一条错误信息。
p = polyfit([1,2],[2,5],1)

MATLAB无法找到polyfic
正如上图,MATLAB无法找到“polyfic”函数,因此会产生报错。而且运行“polyfic”的时间明显比polyfit时间要长,因为MATLAB完整地执行了上述5个搜索步骤。

这样的搜索路径同时也说明,没有在搜索路径的文件和文件夹,一律不能被MATLAB找到。 有时我们自己编写的函数无法被MATLAB识别,就需要好好检查一下函数所在的文件夹是否在MATLAB的搜索路径内了。

上述过程同时也说明,我们编写MATLAB代码的.m、.mlx文件也必须在这些搜索路径内,否则就会报错


1.4.1 查看MATLAB搜索路径


在命令行窗口输入“path”回车运行。

path

MATLAB会列出所有搜索路径。

path函数查看路径
或者在“主页”中点击设置路径”,可以在页卡中查看、添加、删除搜索路径。

设置路径位置
设置路径页卡


1.4.2 设置MATLAB搜索路径


在“主页”中点击“设置路径”,或者在命令行窗口中输入“pathtool”,都可以打开设置路径页卡,可以在页卡中查看、添加、删除搜索路径。

pathtool

或者下面两段代码也可以设置搜索路径。

path(path, 'path')   % 'path'是待添加的目录完整路径
addpath 'path' -begin
% 'path'是待添加的目录完整路径,将新目录添加到搜索路径的开始
addpath 'path' -end
% 'path'是待添加的目录完整路径,将新目录添加到搜索路径的末端



1.5 MATLAB帮助系统


帮助系统是MATLAB最重要一个部分之一。与MATLAB关联的内建函数、M稳健函数、MEX文件函数等都有对应的使用帮助和函数功能说明。这对于用户初学MATLAB、以MATLAB写代码或工程都具有很大的帮助。


doc

命令行窗口输入“doc”即可打开帮助浏览器,或者在“主页”最右侧找到“帮助”。

doc

帮助浏览器
代码demos也可直接打开帮助页卡的示例界面。


help


help是最最最最重要也是最常用的一个帮助功能。help FUNC 的格式调用,便能查询到FUN函数的有关信息、使用方法、调用方法(尤其是调用方法极为重要,help会列出所有该函数可使用的调用方法)。例如我们刚刚举例的polyfit,如果你不知道它是干什么用的,将下面一段代码输入命令行窗口,运行。

help polyfit

命令行窗口会给出其含义、功能、调用方式、相关函数的链接。

help

lookfor


lookfor函数的调用方式是 lookfor topic,其功能是以关键字topic来查找所有相关的M文件。只要某个函数的功能介绍中包含关键字topic(不区分大小写),都会在命令行窗口中列出。

lookfor inverse

在这里插入图片描述




1.6 MATLAB通用命令


1.6.1 MATLAB常用命令


下面列出的命令都是用于管理、操作命令行窗口、工作区、变量、窗口、函数、文件、目录。其中需要记住的已加粗。

命令命令含义
clcclear command window,清空命令窗口输入的命令
clear清空内存变量,清空工作区,后常接all
close删除当前图窗,后常接all,或以close(gcf)调用
clf清除当前图窗窗口
cd显示或更改当前文件夹,更改调用oldFolder=cd(newFolder)
dir列出当前文件夹中的文件和文件夹
save保存工作区变量到指定位置(.mat文件),以save(filename)调用
load载入指定位置.mat文件中的变量 ,以load(filename)调用
home光标移至命令行窗口最左上角
type显示文件内容
path展示所有搜索路径
echo工作窗信息显示开关,后接on或off
diary日志文件命令
!调用dos命令。注意,MATLAB代码全部应使用半角符号!
pack收集内存碎片
exit或quit退出MATLAB
disp显示变量的值(disp(var))或文字内容(disp(‘文字内容’))
hold图形保持开关,后接on或off,用于持续的图形绘制

————↓———— 提 示 ————↓————

养成好习惯,在每次写代码之前加上:

clc,clear all,close all

想一想不加这一段代码可能会有什么影响?

————↑———————————↑————


1.6.2 MATLAB语言标点符号


MATLAB语言中一些标点符号的作用与C语言有所不同,但是同C语言一样,必须使用半角符号,也就是英文符号。这些符号都需要知道其含义并合理运用。

标点符号含义
:冒号,多用于矩阵运算,后续会讲到
;分号,置于行末尾即取消该行输出,还用于矩阵区分行
,逗号,矩阵区分列,也作为函数参数分隔符
%百分号,用于行注释
%%双百分号,用于新增节
=等号,用于赋值操作
!感叹号,用于调用DOS命令(操作系统运算)
单引号,用于构造字符串,为字符串标识
.点,对象域访问
续行标记(一行写不下时换行继续写)
()小括号,用于优先级的标记、函数调用时参数输入
[]中括号,定义矩阵
{}大括号,构造单元数组(元胞数组)

1.6.3 MATLAB常用快捷键


快捷键功能
Ctrl+C在命令行窗口中使用,中断正在执行的命令或程序。之前已执行完的结果不受影响。
Ctrl+R在编辑器中使用,快速添加注释
Ctrl+T在编辑器中使用,快速取消注释
Ctrl+Z撤销
Ctrl+S在编辑器中使用,快速保存编辑器内容;在工作区中使用,保存工作区变量
Ctrl+Enter运行代码
Ctrl+H查找和替换
Ctrl+A全选
Ctrl+C Ctrl+V复制和粘贴



1.7 MATLAB实例


下面通过几段代码来感受一下MATLAB编程吧~


☆ 例1-1:观察下面一段代码,比较分号使用和不使用的区别,观察%、%%的使用。

clc,clear all,close all

%% 输入初始数据
x=rand(2,3); % 随机生成一个矩阵
y=[1,2,3;4,5,6]; % 录入一个矩阵

%% 数据操作
z=x.*y % 两个矩阵元素相乘
res=sin(z)

☆ 例1-2:编写程序计算 ∑ i = 1 10 i i \sum_{i=1}^{10}i^{i} i=110ii。如果不使用编辑器而是把代码一行一行用命令行窗口运行,观察这段代码的运行情况。

clc,clear all,close all;
sum=0;
m=0;
for i=1:10
    m=i^i;
    sum=sum+m;
end
fprintf('The answer is %f.',sum)

需要说明的是,学习MATLAB语言时需要明白,这是一个数学分析软件,不需要像C语言一样具有面向用户的交互友好性(只是在我们基础学习的时候暂时不需要,MATLAB同样可以面向对象进行编程),因此不需要让“其他用户”输入数据,也不需要以太正规的方式输出数据(比如像C语言一样每段代码都会有printf(“代码输出结果是”)),不要浪费编程时间。




思考题1


☆ 思考题1-1:回忆一下编辑器/实时编辑器,编辑器/命令行窗口,简述它们有什么区别?

☆ 思考题1-2:回忆一下保存、加载工作区变量的指令,清除命令行窗口、清除工作区变量、关闭图像窗口的指令,快速添加、取消注释的快捷键,注释、取消输出、新增节、构造矩阵、构造单元数组的标点符号。


☆ 思考题1-3:小hi在看书的时候看到了函数expand,他不知道是什么意思。你能帮帮他吗?



☆ 思考题1-4:学习设置MATLAB搜索路径的方法。你能让你的MATLAB列出所有搜索路径吗?你能把你的MATLAB路径设置一个D盘根目录吗?


☆ 思考题1-5:标点符号____可以使命令行不显示结果,____用来表示该行为注释行。


☆ 思考题1-6(选做):尝试修改下面代码段中的错误,并指出为什么出错。

clc,clear all,close all

m=0; % 赋初值
A=rand(1,100); % 1100列的随机数
for i=1:100
    m=rand(1);
    sum=sum+m*A(i)+
        0.0000009; % A的第i个数字与随机数m相乘,再加一个常数,累加至sum

sum; % 命令行窗口展示输出结果


部分思考题答案


思考题1-3

help expand

思考题1-5

  1. 有效的变量名称以字母开头,后跟字母、数字或下划线;
  2. 不能超过 MATLAB 的最大名称长度(63个字符),否则将被截断;
  3. 不能以关键词命名(可通过iskeyword查看所有关键词);
  4. 命名时尽量不与 MATLAB 中的函数重名(允许重名,但是不推荐);

思考题1-7

clc,clear all,close all
sum=0;
m=0; % 赋初值
A=rand(1,100); % 1100列的随机数
for i=1:100
    m=rand(1);
    sum=sum+m*A(i)+ ...
        0.0000009; % A的第i个数字与随机数m相乘,再加一个常数,累加至sum
end
sum % 命令行窗口展示输出结果

第2行,缺少sum的定义,没有赋初值,所以MATLAB就不知道第7行等号右侧的sum是什么东西。

第7行,应加上续行符号“…”,否则不能随意换行。

第9行,for函数缺少一个end,之后会讲到。

第10行,输出sum的结果由于加上“;”而取消了输出。当然,右侧工作区不论加不加分号都可以看到sum的运算结果




撰写:邓云泽、林耀
审核:华中师范大学HelloWorld程序设计协会工作人员


  1. 刘浩, 韩晶. MATLAB R2018a 完全自学一本通[M]. 北京:电子工业出版社. 2019. ↩︎

  2. 断点 - 搜狗百科[EB/OL]. doi: https://baike.sogou.com/v64819974.htm?ch=ch.bk.amb&fromTitle=%E6%96%AD%E7%82%B9 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K2SO4钾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值