matlab使用教程(3)—矩阵和表达式

简介: 内置函数是 MATLAB 核心的一部分,因此这些函数非常高效,但计算详细信息是不可访问的。与大多数其他编程语言一样,MATLAB 语言提供数学表达式,但与大多数编程语言不同的是,这些表达式涉及整个矩阵。当 MATLAB 遇到新的变量名称时,它会自动创建变量,并分配适当大小的存储。您已经验证丢勒雕刻中的矩阵确实是一个幻方矩阵,同时在验证过程中,您已经尝试了几个 MATLAB 矩阵运算。但原本用于图形的函数。MATLAB 会优先处理矩阵的列,因此获取行总和的一种方法是转置矩阵,计算转置的列总和,然后转置结果。

1.矩阵

1.1关于矩阵

       在 MATLAB 环境中,矩阵是由数字组成的矩形数组。有时,1×1 矩阵(即标量)和只包含一行或一列的矩阵(即向量)会附加特殊含义。MATLAB 采用其他方法来存储数值数据和非数值数据,但刚开始时,通常最好将一切内容都视为矩阵。MATLAB 旨在尽可能简化运算。其他编程语言一次只能处理一个数字,而MATLAB 允许您轻松快捷地处理整个矩阵。

       开始学习 MATLAB 的最佳方法是了解如何处理矩阵。启动 MATLAB 并按照每个示例操作。您可以采用多种不同方法在 MATLAB 中输入矩阵:

       • 输入元素的明确列表。

       • 从外部数据文件加载矩阵。

       • 使用内置函数生成矩阵。

       • 使用您自己的函数创建矩阵,并将其保存在文件中。

       首先,以元素列表的形式输入丢勒的矩阵。您只需遵循一些基本约定:

       • 使用空格或逗号分隔行的元素。

       • 使用分号 ; 表示每行末尾。

       • 使用方括号 [ ] 将整个元素列表括起来。

       要输入丢勒矩阵,只需在命令行窗口中键入下面的内容即可

A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

image.gif

       MATLAB 显示刚才您输入的矩阵:

A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1

image.gif

       输入矩阵之后,MATLAB 工作区会自动记住此矩阵。您可以将其简称为 A。现在,您已经在工作区中输入 A,让我们看看它为什么如此有趣吧。它有什么神奇的地方呢?

1.2矩阵求和、转置和对角矩阵

       您可能已经注意到,幻方矩阵的特殊属性与元素的不同求和方法相关。如果沿任何行或列求和,或者沿两条主对角线中的任意一条求和,您将始终得到相同数字。让我们使用 MATLAB 来验证这一点。尝试的第一个语句是

sum(A)

image.gif

       MATLAB 返回的结果为

ans =
34 34 34 34

image.gif

       如果未指定输出变量,MATLAB 将使用变量 ans(answer 的缩略形式)来存储计算结果。您已经计算包含 A 的列总和的行向量。每个列的总和都相同,即幻数和 34。

       行总和如何处理?MATLAB 会优先处理矩阵的列,因此获取行总和的一种方法是转置矩阵,计算转置的列总和,然后转置结果。

       MATLAB 具有两个转置运算符。撇号运算符(例如,A')执行复共轭转置。它会围绕主对角线翻转矩阵,并且还会更改矩阵的任何复数元素的虚部符号。点撇号运算符 (A.') 转置矩阵,但不会影响复数元素的符号。对于包含所有实数元素的矩阵,这两个运算符返回相同结果。因此

A'

image.gif

       生成

ans =
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1

image.gif

       而

sum(A')'

image.gif

       生成包含行总和的列向量

ans =
34
34
34
34

image.gif

       有关避免双重转置的其他方法,请在 sum 函数中使用维度参数:

sum(A,2)

image.gif

       生成

ans =
34
34
34
34

image.gif

       使用 sumdiag 函数可以获取主对角线上的元素的总和:

diag(A)

image.gif

       生成

ans =
16
10
7
1

image.gif

       而

sum(diag(A))

image.gif

       生成

ans =
34

image.gif

       从数学上讲,另一条对角线(即所谓的反对角线)并不是十分重要,因此 MATLAB 没有对此提供现成的函数。但原本用于图形的函数 fliplr 可以从左往右地翻转矩阵:

sum(diag(fliplr(A)))
ans =
34

image.gif

       您已经验证丢勒雕刻中的矩阵确实是一个幻方矩阵,同时在验证过程中,您已经尝试了几个 MATLAB 矩阵运算。下面各部分继续使用此矩阵来演示 MATLAB 的其他功能。

1.3.magic 函数

       MATLAB 实际包含一个内置函数,该函数可创建几乎任意大小的幻方矩阵。此函数称为 magic 也就不足为奇了:

B = magic(4)

image.gif

B =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

       此矩阵几乎与丢勒雕刻中的矩阵相同,并且具有所有相同的“神奇”性质;唯一区别在于交换了中间两列。

       您可以交换 B 的中间两列,使其看起来像丢勒 A。针对 B 中的每一行,按照指定顺序(1、3、2、4)对列进行重新排列:

A = B(:,[1 3 2 4])

image.gif

A =

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

1.4生成矩阵

       MATLAB 软件提供了四个用于生成基本矩阵的函数。

zeros                        全部为零的矩阵

ones                        全部为1的矩阵

rand                         均匀分布的随机矩阵

randn                       正态分布的随机矩阵

       下面给出了一些示例:

Z = zeros(2,4)

image.gif

Z =

0 0 0 0

0 0 0 0

F = 5*ones(3,3)

image.gif

F =

5 5 5

5 5 5

5 5 5

N = fix(10*rand(1,10))

image.gif

N =

9 2 6 4 8 7 4 0 8 4

R = randn(4,4)

image.gif

R =

0.6353 0.0860 -0.3210 -1.2316

-0.6014 -2.0046 1.2366 1.0556

0.5512 -0.4931 -0.6313 -0.1132

-1.0998 0.4620 -2.3252 0.3792

2.表达式

2.1变量

       与大多数其他编程语言一样,MATLAB 语言提供数学表达式,但与大多数编程语言不同的是,这些表达式涉及整个矩阵。MATLAB 不需要任何类型声明或维度说明。当 MATLAB 遇到新的变量名称时,它会自动创建变量,并分配适当大小的存储。如果此变量已存在,MATLAB 会更改其内容,并根据需要分配新存储。例如,

num_students = 25

image.gif

       创建一个名为 num_students 的 1×1 矩阵,并将值 25 存储在该矩阵的单一元素中。要查看分配给任何变量的矩阵,只需输入变量名称即可。变量名称包括一个字母,后面可以跟随任意数目的字母、数字或下划线。MATLAB 区分大小写;它可以区 分大写和小写字母。Aa 不是相同变量。尽管变量名称可以为任意长度,MATLAB 仅使用名称的前 N 个字符(其中 N 是函数namelengthmax返回的数字),并忽略其余字符。因此,很重要的一点是,应使每个变量名称的前 N 个字符保持唯一,以 便 MATLAB 能够区分变量。

N = namelengthmax

image.gif

N =

63

2.2数字

       MATLAB 使用传统的十进制记数法以及可选的小数点和前导加号或减号来表示数字。科学记数法使用字母e 来指定 10 次方的缩放因子。虚数使用 ij 作为后缀。下面给出了合法数字的一些示例:

3 -99 0.0001 9.6397238 1.60210e-20 6.02252e23 1i -3.14159j 3e5i

       MATLAB 使用 IEEE® 浮点标准规定的 long 格式在内部存储所有数字。浮点数的有限精度约为 16 位有效小数位数,有限范围约为 10-308 至 10+308。以双精度格式表示的数字的最大精度为 52 位。任何需要 52 位以上的双精度数字都会损失一定精度。例如,下面的代码因截断而将两个不相等的值显示为相等:

x = 36028797018963968;
y = 36028797018963972;
x == y

image.gif

ans =

1

       整数的可用精度为 8 位、16 位、32 位和 64 位。将相同数字存储为 64 位整数会保留精度:

x = uint64(36028797018963968);
y = uint64(36028797018963972);
x == y

image.gif

ans =

0

       MATLAB 软件存储复数的实部和虚部。该软件根据上下文采用不同方法来处理各个部分的量值。例如,sort 函数根据量值进行排序,如果量值相等,则根据相位角度排序。

sort([3+4i, 4+3i])

image.gif

ans =

4.0000 + 3.0000i 3.0000 + 4.0000i

       这是由相位角度所致:

angle(3+4i)

image.gif

ans =

0.9273

angle(4+3i)

image.gif

ans =

0.6435

       “等于”关系运算符 == 要求实部和虚部相等。其他二进制关系运算符 ><>=<= 忽略数字的虚部,而仅考虑实部。

2.3矩阵运算符

       表达式使用大家熟悉的算术运算符和优先法则。

+        加法

-          减法

*         乘法

/         除法

\         左除

^        幂

'         复共轭转置

( )       指定计算顺序

2.4数组运算符

       如果矩阵不用于线性代数运算,则成为二维数值数组。数组的算术运算按元素执行。这意味着,加法和减法运算对数组和矩阵都是相同的,但乘法运算不相同。MATLAB 的乘法数组运算表示法中包含点,也就是小数点。运算符列表包括

+        加法

-         减法

.*        元素乘法

./        逐元素除法

.\        逐元素左除

.^       逐元素幂

.'        非共轭数组转置

       如果使用数组乘法将丢勒的幻方矩阵自乘

A.*A

image.gif

       则会生成一个数组,该数组包含介于 1 至 16 之间的整数的平方,并且以不常见的顺序排列:

ans =

256 9 4 169

25 100 121 64

81 36 49 144

16 225 196 1

2.5构建表

       数组运算对构建表非常有用。假定 n 为列向量

n = (0:9)';

image.gif

       然后,

pows = [n n.^2 2.^n]

image.gif

       构建一个平方和 2 次幂的表:

pows =

0 0 1

1 1 2

2 4 4

3 9 8

4 16 16

5 25 32

6 36 64

7 49 128

8 64 256

9 81 512

       初等数学函数逐元素处理数组元素。因此

format short g
x = (1:0.1:2)';
logs = [x log10(x)]

image.gif

       构建一个对数表。

logs =

1.0 0

1.1 0.04139

1.2 0.07918

1.3 0.11394

1.4 0.14613

1.5 0.17609

1.6 0.20412

1.7 0.23045

1.8 0.25527

1.9 0.27875

2.0 0.30103

2.6函数

       MATLAB 提供了大量标准初等数学函数,包括 abssqrtexpsin。生成负数的平方根或对数不会导致错误;系统会自动生成相应的复数结果。MATLAB 还提供了许多其他高等数学函数,包括贝塞尔函数和gamma 函数。其中的大多数函数都接受复数参数。有关初等数学函数的列表,请键入

help elfun

image.gif

       有关更多高等数学函数和矩阵函数的列表,请键入

help specfun
help elmat

image.gif

       某些函数(例如,sqrtsin)是内置函数。内置函数是 MATLAB 核心的一部分,因此这些函数非常高效,但计算详细信息是不可访问的。其他函数使用 MATLAB 编程语言实现,因此可以访问其计算详细信息。内置函数与其他函数之间存在一些差异。例如,对于内置函数,您看不到代码。对于其他函数,您可以看到代码,甚至可以根据需要修改代码。一些特殊函数提供了有用的常量值。

pi                3.14159265...

i                  虚数单位 −1

j                  与 i 相同

eps             浮点相对精度 ε = 2−52

realmin      最小浮点数 2−1022

realmax     最大浮点数 (2 − ε)21023

Inf              无穷

NaN           非数字

       通过将非零值除以零或计算明确定义的溢出(即超过 realmax)的数学表达式,会生成无穷值。通过尝试计算 0/0Inf-Inf 等没有明确定义的数值的表达式,会生成非数字。函数名称不会保留。您可以使用如下新变量覆盖任何函数名称

eps = 1.e-6

image.gif

       并在后续计算中使用该值。可以使用以下命令恢复原始函数

clear eps

image.gif

2.7表达式示例

       您已经学习了 MATLAB 表达式的几个示例。下面是一些其他示例及生成的值:

rho = (1+sqrt(5))/2

image.gif

rho =

1.6180

a = abs(3+4i)

image.gif

a =

5

z = sqrt(besselk(4/3,rho-i))

image.gif

z =

0.3730+ 0.3214i

huge = exp(log(realmax))

image.gif

huge =
1.7977e+308
toobig = pi*huge

image.gif

toobig =

Inf

相关文章
|
6月前
|
索引
matlab--------矩阵重构,重新排列的相关函数说明
matlab--------矩阵重构,重新排列的相关函数说明
179 0
matlab--------矩阵重构,重新排列的相关函数说明
|
6月前
|
索引
matlab日常学习-------矩阵
matlab日常学习-------矩阵
73 0
|
6月前
【Simulink】示波器图形数据导入Matlab重新绘图的简明教程(论文)
【Simulink】示波器图形数据导入Matlab重新绘图的简明教程(论文)
|
9天前
|
Python Windows
SciPy 教程 之 SciPy Matlab 数组 1
本教程介绍了如何使用 SciPy 的 `scipy.io` 模块处理 Matlab 数组。通过 `savemat()` 方法可以将数据导出为 Matlab 格式的文件,而 `loadmat()` 方法则用于从 Matlab 文件中导入数据。示例展示了如何导出和导入一维数组,并解决了导入时数组维度增加的问题。
7 1
|
1月前
|
Serverless
MATLAB中的矩阵与向量运算
【10月更文挑战第2天】本文全面介绍了MATLAB中的矩阵与向量运算,包括基本操作、加减乘除、转置、逆矩阵、行列式及各种矩阵分解方法。通过丰富的代码示例,展示了如何利用矩阵运算解决线性方程组、最小二乘法拟合、动态系统模拟和电路分析等问题。掌握这些运算不仅提升编程效率,还能在工程计算和科学研究中发挥重要作用。
51 1
|
3月前
|
Go C++ Windows
Matlab 冰壶仿真游戏安装及教程
在Matlab上安装并运行冰壶仿真游戏的详细教程,包括编译环境准备、通过APP安装或直接运行源代码的方式,以及游戏的基本操作步骤。
35 0
|
5月前
|
算法 数据可视化 数据挖掘
大学生必备!GitHub星标破千的matlab教程(从新手到骨灰级玩家)
MATLAB(Matrix Laboratory)是MathWorks公司推出的用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的商业数学软件。 MATLAB具有数值分析、数值和符号计算、工程与科学绘图、数字图像处理、财务与金融工程等功能,为众多科学领域提供了全面的解决方案。
|
5月前
|
机器学习/深度学习 存储 移动开发
MATLAB数据类型和运算符+矩阵创建
MATLAB数据类型和运算符+矩阵创建
63 1
|
5月前
|
算法 数据可视化 数据挖掘
大学生必备!GitHub星标破千的matlab教程(从新手到骨灰级玩家)
MATLAB(Matrix Laboratory)是MathWorks公司推出的用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的商业数学软件。 MATLAB具有数值分析、数值和符号计算、工程与科学绘图、数字图像处理、财务与金融工程等功能,为众多科学领域提供了全面的解决方案。
|
5月前
|
数据可视化 数据挖掘 计算机视觉
Matlab教程:入门指南
Matlab教程:入门指南