如何把Matlab当做计算器来使用
Matlab操作界面
把Matlab当做计算器来使用时, 要熟悉界面中的三个基本窗口分别是什么, 和哪些作用.
- 当前工作目录
- 命令行窗口
- 工作区
命令行窗口就是主要的输入命令的位置, 工作区记录了当前有哪些变量.
基本操作
Matlab当做计算器使用时, 基本的四则运算符包括: +
,-
,*
,\
和^
(乘方).在命令行窗口处输入你想计算的数学算式, 计算的结果会用ans= ...
来显示.计算的基本规则是从左到右的结合方式, 运算符之间的优先级与我们的数学上的认知完全相符, 即使你对数学算式的优先级也不清楚也没关系, 优先级最高的运算符是( )
,因此, 可以利用( )
来调整计算的先后顺序,达到我们想要的结果.
例题:
计算:
上面的四道题出了基本的加减乘除四则运算之外, 还涉及到了许多函数. 在Matlab 中 内置了这些函数, 但是这些函数该如何来写, 这里会列举出一些常见的函数的表达式的写法. 但是我们很难记住全部的函数, 因此要简单学习一下如何使用Matlab文档. 查询文档有两种方式, 一种是查询在线文档 ,一种是查询内置文档. 查询在线文档的好处是文档是最新版本的. 查询内置文档的好处是, 可以离线查询,又可以避免出现最新文档不适用于你的Matlab版本的问题.虽然我不知道会不会有这种问题
下面介绍两种文档查询的方法.当我们想要查询ln
函数在Matlab中如何表达时, 可以进入在线文档的网页中直接搜索ln
,如下图:
搜索结果显示log
代表自然对数, 点击查看详细信息.
在无网络条件下, 可以使用Matlab 的内置文档.在Matlab右上角搜索框内输入想要查询的内容.比如查询cos
函数的用法时,
输入后点击回车.
点击查看详细信息.
现在, 可以开始解答上面的四个例题了.
cos(((1+2+3+4)^(3)/5)^(0.5))
sin(sqrt(pi))+log(tan(1))
2^(3.5*1.7)
exp(sin(10))
下面列举一些常用的数学函数和数学常量, 在Matlab中的写法.
exp
:以e为底的指数运算log
: 自然对数log10
: 以10为底的对数log2
: 以2为底的对数sqrt
: 平方根inf
: 无穷大pi
: 圆周率i
,j
: 虚数单位NaN
: 非数sin,cos,tan
: 三角函数
另外, 对于一个复杂的算式 , 可以采用分步骤运算的方式求最终结果,
变量
Matlab中的变量不需要去声明类型, 只需用=
赋予初值即可.
例如:
此时的工作区显示了当前的变量A和它的值.
- Matlab中的变量区分大小写.
- 变量不能以数字开头.
双击工作区中的变量, 可以查看他的详细信息.
这表明了A是一个double类型的实数.Matlab和其他程序设计语言一样, 拥有很多种数据类型, 比如 ,命令行窗口输入str='this is str'
, 可查看到如下结果:
Matlab的数据类型如下所示:
在Matlab变量的命名规则中, 并没有规定不允许与内置函数同名. 当我们定义一个变量cos='this string.'
后, 有想要调用cos
余弦函数时, Matlab给出的结果是这样的.
这表明, 当函数名与用户定义变量名称相同时, 会优先调用用户变量. 因此, 使用Matlab定义变量时应该避免使用与函数名称相同的变量名称. 但是, 现在我们已经定义了cos
变量, 该如何进行余弦运算呢?
claer
函数用来清除当前工作区中的变量. 但是这个函数很危险, 执行clear
后, 工作区中的变量将会被全部清除, 应该谨慎使用. 现在我们只想清除cos
变量. 可以执行claer cos
, 执行后, cos
变量就被清除掉, 可以进行余弦运算了.
输出格式
上面做的四道例题的输出结果都是小数形式, 但是在某些问题的计算中, 我们可能需要分数结果, 或者科学计数法表示的结果. 对于输出格式的调整, 可以使用format
首先我们查看一下Matlab中圆周率可以显示到多少位.
但圆周率远不止这几位, 想要得到更加精准的结果. 可以执行format long
, 再进行查看
下面列举出常用的输出格式:
short
long
shortE
longE
bank
: 保留两位小数hex
: 16进制rat
: 分数形式
其中,带E的是科学计数法的表示形式.
例题:
计算:
- 232/273
- 233/273
- 131/275
- 132/2730
- 0.84981384981682
- 0.84981484981683
- 0.84981584981684
- 0.84981684981685
我们可以在matlab中计算上面的算式, 再以不同格式的形式查看结果即可.
正确答案显而易见, 1和8.
几个有用的功能
-
;
分号的作用是不显示当前的计算结果. -
可以查看输入的历史命令,并选择.
-
clc
: 清空命令行窗口 -
who
: 显示在工作区中的变量 -
whos
: 显示工作区变量的信息
矩阵的输入
Matlab的中文意思就是矩阵实验室, 在实际的工程应用中, 几乎所有的变量都是向量或者矩阵. 矩阵运算是Matlab最擅长的运算.下面介绍矩阵的输入:
-
输入一个行向量:
>> a=[1 2 3 4]
-
输入一个列向量:
>> b=[1;2;3;4]
分别计算a*b
与b*a
观察结果:
不难看出, 矩阵的输入过程中以行为单位输入, 每个元素之间用space
隔开, 每行结束用;
隔开.
输入过程是:>> A=[1 21 6;5 17 9;31 2 7]
Matlab中的结果如下
当我们想要输入一个很长的向量, 比如想要输入[1 2 … 100]这样的等差的100维行向量时, 可使用:
运算符来实现简化输入,1:100
即代表从1开始,100终止公差为1的等差序列.
:
的两种用法:
j:k
=>[j j+1 j+2 ... j+m]
: 以j起始,公差为1 , 小于等于K的最后一个整数为终止的等差序列.j:i:k
=>[j j+i j+2i ... j+mi]
: 第一种用法的扩充, 指定了步长为i.
例如:1:5
2:2.5:15
:
不仅可以用于数字, 字符序列也可以使用.
str='a':2:'h'
的结果:
元素的索引
矩阵元素的索引方式为A()
,其中A代表矩阵名称, 矩阵名称后跟随小括号, 就是对矩阵元素的索引.索引分为以下几种方式, 分别举例尝试, 体会其特点与不同之处.
-
A(8)
:取矩阵的第8个元素,得到的结果是9, 以行优先的方式编号时,元素9的序号应该是6, 以列优先的方式编号可以发现 元素9的序号是8. 因此, 第一种以单一元素序号索引的方式是以列优先的方式对元素进行编号, 取其对应下标上的元素.比如
A(6)
的ans是2,A(2)
的ans是5. -
A([1 3 5 7 9])
:第二种索引方式与第一种的不同之处在于, 小括号内不再是单一数字, 而是一个行向量. 从结果上看, 结果向量也是一个行向量, 结果行向量的维数与索引行向量的维数相同, 可以表达为:
ans=[A(1) A(3) A(5) A(7) A(9)]
.大胆猜测:A([1;3;5;7])
的ans是[A(1);A(3);A(5);A(7)]
吗? -
A([1 3;5 7])
:这种其实和第二种异曲同工,其结果应为
[A(1) A(3);A(5) A(7)]
-
A(3,2)
:这种索引方式与前几种最大的不同之处在于, 小括号内有
,
,其实这就是我们最熟悉的二维坐标系的索引方式,,
的左侧是行序号,右侧是列序号. 其索引结果是单一元素. -
A([1 3],[1 3])
:这种是看起来最复杂的一种索引方式, 除了有
,
之外,,
两侧也不再是单一数字, 而是都变成了向量形式. 根据索引中,
的意义可知,,
左侧代表行的序号,右侧是列的序号.因此这种索引方式的意义是, 取A矩阵的第一行和第三行,第一列和第三列组成ans.那么问题来了
A([1;3],[1 3])
是否有意义,A([1;2],[1;3])
等都能否执行.直接看结果.从这个结果上看,
,
左右的向量是行向量还是列向量都是相同的意义,都不会报错.
能够正确索引矩阵元素, 就可以灵活的对矩阵元素进行修改.
例题:
对A矩阵做如下变换:
这只是矩阵元素索引的一个简答练习,答案如下:
1 | >> A([1 3],2)=[76;0]; |
在矩阵元素的索引中, 依然可是使用:
,这里的:
不仅具有上面输入等差序列的作用,另一个作用是全选的意思.比如:
删除第三行, 可以执行A(3,:)=[]
.
矩阵的运算
矩阵的拼接
在线性代数中, 求解方程组时常常需要对方程组的增广矩阵(A b)进行讨论,Matlab中增广矩阵的写法也很简单.
C=[A b]
即可
上图中在求增广矩阵前对矩阵维数进行了扩充, 一遍和b向量的维数相同.
其实,增广矩阵只是矩阵拼接的一种方式, 只要满足拼接条件的矩阵, 可以用此方式进行任意的拼接.比如:F=[A B;C;D E]
矩阵的运算
矩阵的运算可以分为+
,-
,*
,/
,.*
,.\
,^
,'
等,下面进行一一介绍.
-
x1=A+a
矩阵加常数的运算结果是一个矩阵, 结果矩阵中的每一个元素由原矩阵的对应元素加常数a所得.
-
x2=A/a
矩阵除以一个常数的结果是矩阵的每一个元素除以这个常数.
-
x3=A./a
对于矩阵与常数的运算来说,
/
与./
没有区别. -
x4=A^a
简单的矩阵乘方运算.
-
x5=A.^a
^
与.^
的区别在于,.^
是对矩阵的每一个元素进行乘方运算,而^
是矩阵的乘方运算. -
y1=A+B
矩阵加法.
-
y2=A*B
矩阵乘法.
-
y3=A.*B
矩阵与矩阵的
.*
是矩阵对应元素相乘. -
y4=A/B
经验证, 矩阵相除, 实际上是取涉及取逆矩阵的运算. 其中
inv()
是矩阵求逆的函数. -
y5=A./B
规律已经显而易见,
./
即对应元素相除. -
C=A'
矩阵转置.
一些特殊矩阵和相关函数
特殊矩阵:
eyes(n)
:n维单位矩阵.zeros(n1,n2)
:维零矩阵.ones(n1,n2)
:维所有元素都是1的矩阵.diag([x y z])
:对角线为x,y,z的对角矩阵.
矩阵相关函数:
-
max(A)
:求每一列的最大元素. -
max(max(A))
: 返回矩阵中的最大元素. -
min(A)
:与1同理. -
sum(A)
:返回每列元素和组成的行向量.sum(sum(A))
即可求得矩阵中所有元素的和. -
mean(A)
:返回 由每一列平均值组成的行向量.mean(mean(A))
即可求得所有元素的平均值. -
sort(A)
: 对每个列向量进行从小到大排序, 每个列向量独立运作. -
sortrows(A)
:对A矩阵按行分割, 按每个行向量的第一个元素从小到大排列, 组成结果矩阵. -
size(A)
: 返回A矩阵的行数和列数. -
length(A)
:测量一个向量的长度. -
find(A==4)
:返回等于4的元素的位置.