如何把Matlab当做计算器来使用

Matlab操作界面

把Matlab当做计算器来使用时, 要熟悉界面中的三个基本窗口分别是什么, 和哪些作用.

image-20200627150329174

  • 当前工作目录
  • 命令行窗口
  • 工作区

命令行窗口就是主要的输入命令的位置, 工作区记录了当前有哪些变量.

基本操作

Matlab当做计算器使用时, 基本的四则运算符包括: +,-,*,\^(乘方).在命令行窗口处输入你想计算的数学算式, 计算的结果会用ans= ...来显示.计算的基本规则是从左到右的结合方式, 运算符之间的优先级与我们的数学上的认知完全相符, 即使你对数学算式的优先级也不清楚也没关系, 优先级最高的运算符是( ),因此, 可以利用( )来调整计算的先后顺序,达到我们想要的结果.

例题:

计算:

  1. cos((1+2+3+4)35)\cos (\sqrt{\frac{(1+2+3+4)^{3}}{5}})
  2. sin(π)+ln(tan(1))\sin (\sqrt{\pi})+\ln (\tan (1))
  3. 23.5×1.72^{3.5 \times 1.7}
  4. esin(10)e^{\sin (10)}

上面的四道题出了基本的加减乘除四则运算之外, 还涉及到了许多函数. 在Matlab 中 内置了这些函数, 但是这些函数该如何来写, 这里会列举出一些常见的函数的表达式的写法. 但是我们很难记住全部的函数, 因此要简单学习一下如何使用Matlab文档. 查询文档有两种方式, 一种是查询在线文档 ,一种是查询内置文档. 查询在线文档的好处是文档是最新版本的. 查询内置文档的好处是, 可以离线查询,又可以避免出现最新文档不适用于你的Matlab版本的问题.虽然我不知道会不会有这种问题

下面介绍两种文档查询的方法.当我们想要查询ln函数在Matlab中如何表达时, 可以进入在线文档的网页中直接搜索ln,如下图:image-20200627153107858

搜索结果显示log代表自然对数, 点击查看详细信息.

image-20200627153236274

在无网络条件下, 可以使用Matlab 的内置文档.在Matlab右上角搜索框内输入想要查询的内容.比如查询cos函数的用法时, image-20200627153539161

输入后点击回车.

image-20200627153655460

点击查看详细信息.

image-20200627153725347

现在, 可以开始解答上面的四个例题了.

  1. cos(((1+2+3+4)^(3)/5)^(0.5))image-20200627154102870
  2. sin(sqrt(pi))+log(tan(1))image-20200627154210602
  3. 2^(3.5*1.7)image-20200627154306439
  4. exp(sin(10))image-20200627154346941

下面列举一些常用的数学函数和数学常量, 在Matlab中的写法.

  1. exp :以e为底的指数运算
  2. log: 自然对数
  3. log10: 以10为底的对数
  4. log2: 以2为底的对数
  5. sqrt: 平方根
  6. inf: 无穷大
  7. pi: 圆周率
  8. i,j: 虚数单位
  9. NaN: 非数
  10. sin,cos,tan: 三角函数

另外, 对于一个复杂的算式 , 可以采用分步骤运算的方式求最终结果,

image-20200627155354908

变量

Matlab中的变量不需要去声明类型, 只需用=赋予初值即可.

例如:

image-20200627155628834

此时的工作区显示了当前的变量A和它的值.

image-20200627155731044

  • Matlab中的变量区分大小写.
  • 变量不能以数字开头.

双击工作区中的变量, 可以查看他的详细信息.

image-20200627160111062

这表明了A是一个double类型的实数.Matlab和其他程序设计语言一样, 拥有很多种数据类型, 比如 ,命令行窗口输入str='this is str', 可查看到如下结果:

image-20200627160412920

Matlab的数据类型如下所示:

image-20200627160629575

在Matlab变量的命名规则中, 并没有规定不允许与内置函数同名. 当我们定义一个变量cos='this string.'后, 有想要调用cos余弦函数时, Matlab给出的结果是这样的.

image-20200627160933884

这表明, 当函数名与用户定义变量名称相同时, 会优先调用用户变量. 因此, 使用Matlab定义变量时应该避免使用与函数名称相同的变量名称. 但是, 现在我们已经定义了cos变量, 该如何进行余弦运算呢?

claer函数用来清除当前工作区中的变量. 但是这个函数很危险, 执行clear后, 工作区中的变量将会被全部清除, 应该谨慎使用. 现在我们只想清除cos变量. 可以执行claer cos, 执行后, cos变量就被清除掉, 可以进行余弦运算了.

输出格式

上面做的四道例题的输出结果都是小数形式, 但是在某些问题的计算中, 我们可能需要分数结果, 或者科学计数法表示的结果. 对于输出格式的调整, 可以使用format

首先我们查看一下Matlab中圆周率可以显示到多少位.

image-20200627161938380

但圆周率远不止这几位, 想要得到更加精准的结果. 可以执行format long, 再进行查看

image-20200627162106609

下面列举出常用的输出格式:

  1. short
  2. long
  3. shortE
  4. longE
  5. bank: 保留两位小数
  6. hex: 16进制
  7. rat: 分数形式

其中,带E的是科学计数法的表示形式.

例题:

计算:313+414+515=\frac{3}{13}+\frac{4}{14}+\frac{5}{15}=

  1. 232/273
  2. 233/273
  3. 131/275
  4. 132/2730
  5. 0.84981384981682
  6. 0.84981484981683
  7. 0.84981584981684
  8. 0.84981684981685

我们可以在matlab中计算上面的算式, 再以不同格式的形式查看结果即可.

image-20200627163045624

正确答案显而易见, 1和8.

几个有用的功能

  1. ;分号的作用是不显示当前的计算结果.

    image-20200627163531231

  2. \uparrow可以查看输入的历史命令,并选择.

    image-20200627163700974

  3. clc: 清空命令行窗口

  4. who: 显示在工作区中的变量

    image-20200627163842451

  5. whos: 显示工作区变量的信息

    image-20200627163906545

矩阵的输入

Matlab的中文意思就是矩阵实验室, 在实际的工程应用中, 几乎所有的变量都是向量或者矩阵. 矩阵运算是Matlab最擅长的运算.下面介绍矩阵的输入:

  1. 输入一个行向量:

    >> a=[1 2 3 4]

  2. 输入一个列向量:

    >> b=[1;2;3;4]

分别计算a*bb*a观察结果:

image-20200627164649199

不难看出, 矩阵的输入过程中以行为单位输入, 每个元素之间用space隔开, 每行结束用;隔开.

A=[121651793127]A=\left[\begin{array}{lll} 1 & 21 & 6 \\ 5 & 17 & 9 \\ 31 & 2 & 7 \end{array}\right]

输入过程是:>> A=[1 21 6;5 17 9;31 2 7]Matlab中的结果如下

image-20200627165130864

当我们想要输入一个很长的向量, 比如想要输入[1 2 … 100]这样的等差的100维行向量时, 可使用:运算符来实现简化输入,1:100即代表从1开始,100终止公差为1的等差序列.

:的两种用法:

  1. j:k=>[j j+1 j+2 ... j+m]: 以j起始,公差为1 , 小于等于K的最后一个整数为终止的等差序列.
  2. j:i:k=>[j j+i j+2i ... j+mi]: 第一种用法的扩充, 指定了步长为i.

例如:1:5

image-20200627175350072

2:2.5:15

image-20200627180016670

:不仅可以用于数字, 字符序列也可以使用.

str='a':2:'h'的结果:

image-20200627180240717

元素的索引

矩阵元素的索引方式为A(),其中A代表矩阵名称, 矩阵名称后跟随小括号, 就是对矩阵元素的索引.索引分为以下几种方式, 分别举例尝试, 体会其特点与不同之处.

  1. A(8):

    image-20200627165436001

    取矩阵的第8个元素,得到的结果是9, 以行优先的方式编号时,元素9的序号应该是6, 以列优先的方式编号可以发现 元素9的序号是8. 因此, 第一种以单一元素序号索引的方式是以列优先的方式对元素进行编号, 取其对应下标上的元素.比如A(6)的ans是2, A(2)的ans是5.

  2. A([1 3 5 7 9]):

    image-20200627170041539

    第二种索引方式与第一种的不同之处在于, 小括号内不再是单一数字, 而是一个行向量. 从结果上看, 结果向量也是一个行向量, 结果行向量的维数与索引行向量的维数相同, 可以表达为: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)]吗?

    image-20200627170654893

  3. A([1 3;5 7]):

    这种其实和第二种异曲同工,其结果应为[A(1) A(3);A(5) A(7)]

    image-20200627170952639

  4. A(3,2):

    这种索引方式与前几种最大的不同之处在于, 小括号内有,,其实这就是我们最熟悉的二维坐标系的索引方式,,的左侧是行序号,右侧是列序号. 其索引结果是单一元素.

    image-20200627171220549

  5. A([1 3],[1 3]):

    这种是看起来最复杂的一种索引方式, 除了有,之外, ,两侧也不再是单一数字, 而是都变成了向量形式. 根据索引中,的意义可知, ,左侧代表行的序号,右侧是列的序号.因此这种索引方式的意义是, 取A矩阵的第一行和第三行,第一列和第三列组成ans.

    image-20200627173905501

    那么问题来了A([1;3],[1 3])是否有意义,A([1;2],[1;3])等都能否执行.直接看结果.

    image-20200627174159583

    从这个结果上看,,左右的向量是行向量还是列向量都是相同的意义,都不会报错.

能够正确索引矩阵元素, 就可以灵活的对矩阵元素进行修改.

例题:

对A矩阵做如下变换:

image-20200627174529528

这只是矩阵元素索引的一个简答练习,答案如下:

1
2
>> A([1 3],2)=[76;0];
>> A([1 2],[2 3])=[0 0;0 0];

在矩阵元素的索引中, 依然可是使用:,这里的:不仅具有上面输入等差序列的作用,另一个作用是全选的意思.比如:

image-20200627180613850

删除第三行, 可以执行A(3,:)=[].

矩阵的运算

矩阵的拼接

在线性代数中, 求解方程组时常常需要对方程组的增广矩阵(A b)进行讨论,Matlab中增广矩阵的写法也很简单.

C=[A b]即可

image-20200627181249977

上图中在求增广矩阵前对矩阵维数进行了扩充, 一遍和b向量的维数相同.

其实,增广矩阵只是矩阵拼接的一种方式, 只要满足拼接条件的矩阵, 可以用此方式进行任意的拼接.比如:F=[A B;C;D E]

矩阵的运算

矩阵的运算可以分为+,-,*,/,.*,.\,^,'等,下面进行一一介绍.

image-20200627182141204

  • x1=A+a

    image-20200627182234320

    矩阵加常数的运算结果是一个矩阵, 结果矩阵中的每一个元素由原矩阵的对应元素加常数a所得.

  • x2=A/a

    image-20200627182429130

    矩阵除以一个常数的结果是矩阵的每一个元素除以这个常数.

  • x3=A./a

    image-20200627182550621

    对于矩阵与常数的运算来说, /./没有区别.

  • x4=A^a

    image-20200627182722462

    简单的矩阵乘方运算.

  • x5=A.^a

    image-20200627182841224

    ^.^的区别在于,.^是对矩阵的每一个元素进行乘方运算,而^是矩阵的乘方运算.

  • y1=A+B

    image-20200627183026600

    矩阵加法.

  • y2=A*B

    image-20200627183103638

    矩阵乘法.

  • y3=A.*B

    image-20200627183154092

    矩阵与矩阵的.*是矩阵对应元素相乘.

  • y4=A/B

    image-20200627183510635

    经验证, 矩阵相除, 实际上是取涉及取逆矩阵的运算. 其中inv()是矩阵求逆的函数.

  • y5=A./B

    image-20200627183655055

    规律已经显而易见, ./即对应元素相除.

  • C=A'

    image-20200627183800208

    矩阵转置.

image-20200627183902248

一些特殊矩阵和相关函数

特殊矩阵:

  1. eyes(n):n维单位矩阵.
  2. zeros(n1,n2):n1×n2n1\times n2维零矩阵.
  3. ones(n1,n2):n1×n2n1\times n2维所有元素都是1的矩阵.
  4. diag([x y z]):对角线为x,y,z的对角矩阵.

矩阵相关函数:

  1. max(A):求每一列的最大元素.

    image-20200627184920870

  2. max(max(A)): 返回矩阵中的最大元素.

  3. min(A):与1同理.

  4. sum(A):返回每列元素和组成的行向量.

    image-20200627185002202

    sum(sum(A))即可求得矩阵中所有元素的和.

  5. mean(A):返回 由每一列平均值组成的行向量.

    image-20200627185206387

    mean(mean(A))即可求得所有元素的平均值.

  6. sort(A): 对每个列向量进行从小到大排序, 每个列向量独立运作.

  7. sortrows(A):对A矩阵按行分割, 按每个行向量的第一个元素从小到大排列, 组成结果矩阵.

  8. size(A): 返回A矩阵的行数和列数.

  9. length(A):测量一个向量的长度.

  10. find(A==4):返回等于4的元素的位置.

    image-20200627190451561

资料链接

参考视频 参考讲义