【Matlab入门】第一章 Matlab基础
- 引言
- 第一章 Matlab基础
引言
你好!欢迎查看此系列笔记。为何说是笔记而不是教程呢,是因为这就是真真切切的我自己学习的记录,从R2022a版本到R2024a,这意味着该系列笔记可能会一直更新下去,倘若有重大更迭,我也会及时更新。观看者遇到问题,可以在评论区反馈,我争取及时交流修改。初始笔记均以R2022a版本为基准,后续补充或修改内容将以最新版作为基准。此系列笔记可能不是全站最好的,但是我会努力做到最完备。笔记采用循序渐进的方式,譬如第一章我不会讲点乘,而是在第二章矩阵后才会讲。
第一章 Matlab基础
本章从初学者角度入手,从Matlab界面,运算符,数据类型,到基本函数和数学量,基本操作。让你能看懂matlab,会常识。
一、初识界面
我没有对界面做箭头标注,一是因为我懒(直言不讳,嘿嘿),二是避免许多人保存图片收藏学习的行为,知识只有学到脑子里才是知识,收藏和收集具有成瘾性。
再回到界面来,最上方是菜单栏和工具栏(这一部分你们可能比我的格子多),包含了许多工具和附加计算器,由于本系列教程均由基本代码实现,所以你点击它的机会很少。可以看到官方将标题栏分为了6个部分,第一个部分是文件处理类,参考各类办公软件,不再赘述,注意新建或者打开的格式通常都是mat格式;第二个部分是数据的导入和导出,通常也使用mat格式文件;第三部分比较重要的是代码效率分析;Simulink不用管,暂时用不到;然后是布局和路径设置;最后是在线帮助。
向下的部分比较单调,不再用单独的图片演示。左侧显示的是当前路径,中间的附带fx的窗口是命令行窗口,fx后有两个>,我们的代码就在这两个符号之后输入;右侧上下两栏分别是工作区栏(存放变量信息的)和历史记录栏(显示你用过的命令)。
二、变量和算数运算符
1.变量
Ⅰ 命名原则
以字母或者下划线开头,但是很少用下划线开头,后面可以跟字母、数字和下划线,变量名严格区分字母的大小写(学过C语言的一定是倒背如流)。
Ⅱ 通常的赋值格式
变量=表达式。右边的表达式,小到一个数字,大到一个方程或者矩阵,引用变量前必须赋值。
Ⅲ 内置变量
Matlab有一个内置的变量ans,倘若你没有定义新变量,值默认赋给ans,所以自己定义变量的时候要规避ans,以防发生混乱。本例计算了7和8的乘积并自动赋值给了ans:
>> 7*8 ans = 56
Ⅳ 变量的查询
who命令用于查看现实工作空间中的所有变量,whos可以用于查看工作空间中变量的详细属性,使用方式如代码块所示:
>> a = 6 a = 6 >> b = 7 b = 7 >> who 您的变量为: a b >> whos Name Size Bytes Class Attributes a 1x1 8 double b 1x1 8 double
运行完这一块代码,我们看到,matlab也是有数据类型的。
Ⅴ 引用变量的方式
直接调用变量名即可,其实matlab也有类似于C语言指针和JAVA类的东西,但是目前为止无需了解。例如,计算x = 56和3.5的乘积:
>>y = x * 3.5 y = 196
Ⅵ 符号变量
在本系列更新到第四章(方程求解)的时候,我认识到需要补充符号变量这一概念。在 MATLAB 中,syms()函数用于定义符号变量。符号变量是一种特殊类型的变量,用于表示数学表达式中的符号和变量,而不是数值。在定义符号变量之后,我们可以使用其进行计算,例如求解方程、求导、积分、求极限、求解线性代数问题等。需要注意的是,符号计算是一种复杂的运算,通常比数值计算更慢,并且可能会导致精度损失。因此,在使用符号计算时应该注意控制计算的复杂度和精度,以避免出现不必要的错误。
简单来说,符号变量就是为求未知量而生的,倘若用普通的变量,无法达到求未知的效果。
详细的符号变量使用方法请见第四章(解方程)和第五章(微积分计算和级数展开)。
2.算数运算符
老生常谈,无非加减乘除幂运算
Ⅰ 一般运算符
加和减的优先级最低,乘和除的优先级第二,幂运算的优先级最高。除法运算中,右除\优先于左除/,同样的,优先级可以通过圆括号来改变,无需过于纠结。右除和左除需要严格区分,被除数和除数是完全相反的:
>>9/3 ans = 3 >> 9\3 ans = 0.3333
Ⅱ 需要特殊注意的求余运算
Matlab中没有求余运算符号,%并不代表求余。rem()和mod()函数专门用于求余(在本章第五部分再介绍)。作为一门语言,它和C类似,但是也有不同,切记不可过度联想,张冠李戴。
Ⅲ 补充内容(分号和续行符号)
分号、续行符。在上方的代码示例中,每一句代码后方没有任何符号,赋一个值,后方输出重复一次,再输入大量代码的时候,显然会占用很大篇幅,可以在语句末尾加一个分号,仅赋值,但不求屏幕输出;续行符为三个点:… 用于屏幕换行的接续输入,接下来是代码展示:
>> a = 6; >> b = 123 + 245 + ... 12345 b = 12713
三、赋值运算
“=”赋值运算符,介绍变量的时候已经提到过。我们这里还要介绍递归赋值这个特殊用法,如代码块所示:
>> x = 86;x = x + 4 x = 90
四、分数的不同表达方式
作为初学者,我不会详细介绍Matlab中无关紧要的数值类型,这里仅对分数的表达方式做一定的区分,主要是单精度(4位)、双精度(15位)和分数形式:
1. 单精度形式
>> format short;pi ans = 3.1416
2.双精度形式
>> format long;pi ans = 3.141592653589793
3.分数形式
>> format rat;pi ans = 355/113
4.我为什么使用format函数来介绍小数类型
format函数主要用于设置输出格式,可以将数值用特定的方式来展示,所以此处用了format 格式;变量名的代码来展示不同的小数格式。根据官网,格式处的类型还可以为hex(16进制格式)、自定义的格式,在此不再介绍,感兴趣可自行研究。
五、基本数学量和基本函数(极其重要,务必掌握)
1.上文中出现的pi
圆周率,使用时直接调用。
2.自然指数
格式为exp(x),处为待定数,表示自然指数的x次方。特殊的,matlab中输入e不可直接输入,而要输入exp(1),如代码块所示,做个简单的运算验证一下:
>> log(exp(1)) ans = 1
3.对数
格式为log(x) ,这是以e为底的对数函数。以其它为底时的格式:log底(x),譬如有log2(2)=1。
4.平方根
格式为sqrt(x),x可以为负数,matlab会输出复数形式。
5.三角函数
和现实一样,直接按照现实的方式来表示,但是要注意反三角函数前缀不是arc,而是a。
6.inf和NaN
前者表示无穷大,除以0或者溢出等运算会产生inf,其次在变上限积分的运算中非常有用;后者表示既不是实数也不是复数的非数字值,比如0除以0或者inf除以inf的时候会产生NaN。
7.绝对值
函数为abs(),括号里内容为现实中绝对值号里的东西。
8.求余专用函数
rem(m,n)表示m除以n所得的余数,rem(x,0)的值是多少呢,你们自己想一下。还有mod(m,n)函数,也表示m除以n所得的余数。这两个函数有何区别呢。主要体现在符号上,rem的结果正负会随着m的正负变化而变化,对于n的符号变化爱答不理。而mod正好相反。
9.复数的表示
和现实一样,直接在虚部补个i。i和j都默认为虚数单位,自定义变量的时候注意避开。
10.disp函数(窗口显示函数)
disp 函数用于在命令窗口中显示数据。它可以接受各种类型的输入数据,包括数字、字符向量、字符数组、逻辑值、结构体、单元格数组、函数句柄等等(其中很多对于初学者都没必要了解)。
该函数的输出形式是根据输入数据的类型和大小自动确定的。对于单个数字或字符向量,输出结果是一行文本。对于多行文本或大型数据结构(譬如矩阵),输出结果可能会跨多行,并自动换行以适应命令窗口的大小。来个代码块试试看:
>> x = [1,2,3;4,5,6;7,8,9];y = 11;disp(x),disp(y) 1 2 3 4 5 6 7 8 9 11
注意disp函数的输入内容是单一的,不能输入多个同时输出。
11.窗口小命令(软件交互)
clc函数清空命令行窗口内容,clear清除所有变量,close all关闭所有的figure窗口(譬如生成的函数图像窗口,第三章会讲到),clear all:清除工作空间的所有变量、函数。clear 变量名还可以清楚指定的变量;esc按钮:清除你正在编辑的命令行;按下tab:补全代码;quit:关闭matlab。
六、小技巧:极其方便的修正手法
有时输入表达式发生错误,当按下回车后认识到需要修改其中一点代码,只需要方向键向上移动,此时会自动补全上方的历史代码,修正错误,然后按下回车重新运行即可。
七、代码注释方法
1.我们为什么要注释代码
作为一个程序员(只要你使用的是高级语言),编写代码时,最好添加描述代码的注释。注释有助于其他人员理解代码,并且有助于我们在稍后返回代码时再度记起这段代码的作用。在代码开发和测试期间,还可以使用注释来注释掉任何不需要运行的代码。在实时编辑器中,可以在代码前后插入文本行来描述过程或代码。
由于matlab语言和其他高级语言的相似性,代码移植时展现的功能性说明显得必不可少。所以我们不光要做注释,还要做的好。同样的,matlab的代码注释也分单行和多行。
2.单行注释方式
既可以单起一行专门放注释,还可以在某一句代码后方跟一句注释,符号为%,单行注释内容在该符号的右侧添加:
>> % 定义变量x和y >> x = 5;y = 6 % 定义完毕
3.多行注释方式
还是使用百分号,但是为了续行输入我们的注释,还需要用大括号括起来,格式为%{…内容…%}
>> %{ 这是一段代码注释 “Hello world!” %}
在为什么要添加注释的部分中,还提到了可以利用注释将不运行的代码"封装起来"。也是利用了多行注释的方式:
a = magic(3); %{ sum(a) diag(a) sum(diag(a)) %} sum(diag(fliplr(a)))
3-5行的代码都不会被执行,如有运行需要,直接放出来即可。更加复杂的代码注释方式我不再介绍,对于语言学习者我更提倡直接输入注释代码。
八、文件基础(包括导入、保存等)
1.保存
Ⅰ 保存mat格式文件(位置参考第一部分的界面介绍)
- 找到变量菜单区
- 选择“保存工作区为”
- 输入文件名点击保存
Ⅱ 变量的保存:使用命令save 文件名 变量名列表将变量存入指定的mat文件中。譬如:
>>save 'monosaka.mat' a b
或者:
>>save ('file1.mat','p','q')
2.读取
Ⅰ 从 excel 文件读取数据
>> A = xlsread('monosaka.xlsx')
此处的A可以为数,也可以为数组或者矩阵
Ⅱ 读入txt文本(这个我没有试过,权当了解),以下三条代码为具体格式。
>>[A,B,C,...] = textread(filename,format) >>[A,B,C,...] = textread(filename,format,N) >>[...] = textread(...,param,value,...)
Ⅲ 变量的读取:
>>load(filename,'-mat',variables)
本章节更新记录
2024.2.13首次发布。
2024.2.14一次修订:优化了目录,便于查找。
2024.2.16二次修订:添加了符号变量内容和代码注释方法、disp显示函数。
[1]:Matlab公司Mathworks官网-帮助中心