目标:
- 变量
- 赋值语句
- 矩阵
- m文件编写
一、变量
变量是保存数据信息的最基本的数据类型。变量的命名应遵循如下规则:
- 变量名必须以字母开头
- 变量名由字母、数字和下划线混合组成
- 变量名区分字母大小写
- MATLAB有一些特定含义的默认变量,可以直接使用,尽量避免另外自定义
变量名 | 默认值 |
i和j | 虚数单位 |
pi | 圆周率 |
ans | 存放最后一次无赋值变量语句的预算结果 |
inf | 无穷大 |
eps | 机器的浮点运算误差限(如果某变量的绝对值小于eps,则视为0) |
NaN | 不定式(0/0,或inf/inf,或超出存储大小的值) |
lasterr | 存放最后一次的错误信息 |
lastwarn | 存放最后一次的警告信息 |
二、赋值语句
MATLAB采用命令行形式的表达式语言,每一个命令就是一条语句。
1. 直接赋值语句
- 格式:赋值变量=赋值表达式
等号右边的表达式由变量名、常数、函数和运算符构成。
注意:
- 如果一条语句后面没有“ ; ”,MATLAB的命令行窗口将显示出运算结果,如果不想显示结果,就需要加“ ; ”
- 如果省略左边的赋值变量和等号,则表达式结果默认赋值给保留变量ans
- 如果表达式是字符串,则字符串需要使用单引号括起来
2. 函数调用语句
- [返回变量列表] = 函数名(输入变量列表)
等号右边的函数名对应一个存放在合适路径中的MATLAB文本文件。函数有内置函数和用户自定义函数。返回变量的列表和输入变量的列表均可由若干变量名组成。
注意:
- 函数的命名规则与变量名命名规则一致,但要避免与内置函数同名
- 对于内置函数可以直接调用;自定义函数,该函数所对应的M文件要保存到MATLAB可搜索的目录中
- 如果返回变量的个数大于1,他们之间要用逗号或者分号隔开。输入变量个数大于1,他们之间只能用逗号隔开
三、矩阵
矩阵有m行n列的矩阵,有m=n时为方阵,单位阵,转置矩阵,行向量和列向量。矩阵的表现形式和数组相似,以左括号“[”开始,以右括号“]”结束,每一行元素结束用行结束符号(分号“;”)或回车符分割,每个元素之间用元素分割符号(空格或“,”)分隔。
矩阵的表示:
可以直接在命令行输入矩阵,规则与上面讲到的相同
A = [1 5;3 7;2 4]
基本矩阵函数。
matlab提供了一些内置基本矩阵函数。
函数 | 说明 |
ones(n) | 生成一个n行n列的全一矩阵,参数也可为不同的两个值 |
zeros(n) | 生成一个n行n列的全0矩阵 |
eye(n) | 生成一个n行n列的单位矩阵 |
magic(n) | 生成一个n行n列的魔法矩阵,其每一行每一列元素和都相等 |
rand(n) | 一个n行n列的矩阵,元素为0~1之间均匀分布的随机数 |
randn(n) | 一个n行n列的矩阵,元素均值为0,方差为1的正态分布随机数 |
hilb(n) | Hilbert矩阵 |
vander(v) | Vander矩阵 |
hankel(r,c) | Hankel矩阵 |
hadamard(n) | Hadamar矩阵 |
matlab还提供了一个便利高效的表达式给等步长的行向量赋值,
冒号表达式。
格式:v = s:h:e
其中,s,e是标量,分别代表向量的起始值和终止值,h代表向量元素之间的步长值。
创建序列的函数:
matlab提供了创建序列的函数,分别为linspace和logspace。
linspace函数用于产生指定长度的等距数列:
- y = linspace(a,b):在(a,b)上产生100个线性等分点
- y = linspace(a,b,n):在(a,b)上产生n个线性等分点
logspace用于产生指定长度的对数等距数列:
- y = logspace(a,b):在之间产生50个对数等分向量
- y = logspace(a,b,n):在之间产生n个对数等分向量
矩阵运算
matlab中矩阵的运算包括矩阵的代数运算、矩阵的逻辑运算和矩阵的关系运算。
代数运算:
1.矩阵的算术运算
运算符 | 名称 | 命令实例 | 说明 |
+ | 加 | A+B | 如果矩阵A和B维度相同,则表示对应元素相加;如果其中一个矩阵为标量,则表示另一矩阵的所有元素加上该标量。 |
- | 减 | A-B | 如果矩阵A和B维度相同,则表示对应元素相减;如果其中一个矩阵为标量,则表示另一矩阵的所有元素减去该标量。 |
* | 矩阵乘 | A*B | 矩阵A与B相乘,A和B均可为向量或标量,但A的位数必须等于B的列数。 |
\ | 矩阵左除 | A\B | 方程A*X=B的解X |
/ | 矩阵右除 | A/B | 方程X*A=B的解X |
^ | 矩阵乘方 | A^B | 当A和B均为标量时,表示A的B次方幂;当A为方阵,B为正整数时,表示矩阵A的B次乘积;当A,B均为方阵时,无定义。 |
>> A = [1 1;2 3];
>> B = [1 2;5 3];
>> A/B
ans =
0.2857 0.1429
1.2857 0.1429
>> A\B
ans =
-2 3
3 -1
>> A^B
错误使用 ^
输入必须为标量和方阵。
要按元素进行 POWER 计算,请改用 POWER (.^)。
>> A^3
ans =
11 15
注意:右除运算,两矩阵的列数必须相等。左除运算,两矩阵的行数必须相等。
2.矩阵的运算函数
函数 | 功能 |
size(A) | 计算矩阵A的函数和列数 |
A' | 计算矩阵A的转置矩阵 |
inv(A) | 计算矩阵A的逆矩阵 |
length(A) | 计算矩阵A的长度 |
sum(A) | 如果A为向量,则计算A所有元素之和;如果A为矩阵,则产生一行向量,其元素分别为矩阵A各列元素之和 |
max(A) | 如果A为向量,则求出A所有元素的最大值;如果A为矩阵,则产生一行向量,元素为各列元素的最大值 |
>> clear all;
>> A = [1 2 3;4 5 6;7 8 9];
>> inv(A)
警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND = 2.202823e-18。
ans =
1.0e+16 *
0.3153 -0.6305 0.3153
-0.6305 1.2610 -0.6305
0.3153 -0.6305 0.3153
>> A'
ans =
1 4 7
2 5 8
3 6 9
3.矩阵的元素群运算
是指矩阵中的所有元素按单个元素进行运算。为了与矩阵作为整体的运算符号相区别,元素群运算约定,在矩阵运算符前加一个点符号“.”。元素群加、减运算的效果与矩阵加、减运算的效果是一致的,运算符也相同。
运算符 | 名称 | 命令实例 | 说明 |
.* | 矩阵群乘 | A.*B | 矩阵A与矩阵B对应元素相乘,A和B必须为同维矩阵,或者其中之一为标量 |
.\ | 矩阵群左除 | A.\B | 矩阵B除以矩阵A的对应元素,A和B必须为同维矩阵,或者其中之一为标量 |
./ | 矩阵群右除 | A./B | 矩阵A除以矩阵B的对应元素,A和B必须为同维矩阵,或者其中之一为标量 |
.^ | 矩阵群乘方 | A.^B | 矩阵A的各元素与矩阵B的对应元素的乘方运算,运算结果C=A.^B,其中C(i,j)=A(i,j)^B(i,j),A和B必须为同维矩阵。 |
>> clear all;
>> A = [1 3 7;2 5 8;3 6 9];
>> B = [1 1 1;0 5 8;3 7 11];
>> A .* B
ans =
1 3 7
0 25 64
9 42 99
>> A .^ B
ans =
1.0e+10 *
0.0000 0.0000 0.0000
0.0000 0.0000 0.0017
0.0000 0.0000 3.1381
4.元素群的函数
函数名 | 说明 | 函数名 | 说明 |
sin | 正弦函数 | real | 求复数的实部 |
cos | 余弦函数 | imag | 求复数的虚部 |
tan | 正切函数 | conj | 求复数的共轭 |
abs | 求函数的绝对值或复数的模 | exp | 自然指数函数 |
sqrt | 平方根函数 | log | 自然对数函数 |
angle | 求复数的复角 | log10 | 以10为底的对数函数 |
矩阵的关系运算:
关系运算符主要用于比较数、字符串、矩阵之间的大小或不等式关系。返回值为0或1.
关系操作符 | 说明 | 对应的函数 |
== | 等于 | eq(A,B) |
~= | 不等于 | ne(A,B) |
< | 小于 | lt(A,B) |
> | 大于 | gt(A,B) |
<= | 小于等于 | le(A,B) |
>= | 大于等于 | ge(A,B) |
注意:比较运算符都是双操作的运算符,两个操作数是大小相同的数组,或者其中一个为标量,例如:A>a,意义为A中的所有元素与a作比较。关系运算符比算术运算符具有更高的优先权。
>> clear all;
>> A = [1 2 3;4 5 8;9 7 6];
>> B = [1 4 7;2 5 8;3 6 9];
>> a = 2;
>> A == B
ans =
1 0 0
0 1 1
0 0 0
>> A == a
ans =
0 1 0
0 0 0
0 0 0
矩阵的逻辑运算:
在逻辑运算中,所有非零元素的逻辑值为真,用代码1表示;值为0的元素的逻辑值为0,用代码0表示。
逻辑操作符 | 说明 | 对应的函数 |
& | 逻辑与 | and(A,B) |
| | 逻辑或 | or(A,B) |
~ | 逻辑非 | nor(A,B) |
|| | 先决或 | |
&& | 先决与 |
注意:&,&&执行相同的运算,都是逻辑与、其结果也相同,但两者运算方式不同。A&B是分别先计算出A、B,然后进行逻辑与;A&&B首先计算A,如果A的某一元素为0,则结果对应的元素为0,而不计算B。|,||也是同样的区别。
四、M文件编写2.矩阵的运算
M文件可以分为脚本文件和函数文件。
1.脚本文件
脚本文件是由MATLAB语句构成的文本文件,以 .m为扩展名。运行命令文件的效果等价于从MATLAB命令窗口中按顺内逐条输入并运行文件中的指令。运行过程中产生的变量保存在MATLAB的工作空间中,脚本文件也可以访问当前工作空间的变量,其他脚本文件和函数可以共享这些变量。脚本文件常用于主程序的设计。
% 绘制一个肤色三维效果图
clear all
ab = [0 2*pi];
rtr = [2 0.5 1];
pq = [40 40];
box = [-3 3 -3 3 -2 2];
vue = [55 60];
tube('xyklein', ab, rtr, pq, box, vue);
shading interp
colormap(pink);
set(gcf, 'color', 'w');
2.函数文件
函数文件是由MATLAB语句构成的文本文件,并以 .m为扩展名。函数文件必须以关键字function语句引导,其基本结构为
function [返回参数1,返回参数2,...] = 函数名(输入参数1,输入参数2,...)
% 注释说明语段
输入,返回变量格式的监测语句
函数语句
特点:
- 函数名由读者自定义,规则与变量名相同
- 保存的文件名必须与定义的函数名一致
- 可以通过返回参数和输入参数实现参数的传递,返回参数使用[],输入参数使用()
- 注释语句由%引导,后面的语句不执行
- 如果函数较复杂,则正则的参数格式检测是必要的。
- 函数中输入和返回参数的实际个数分别由MATLAB内部保留变量nargin和nargout给出。只要运行了该函数,将自动生成这两个变量
- 函数末尾不需要使用end命令
% 实现一个n行m列的矩阵,是的该矩阵的第i行和第j列元素值为1/(i+j-1),
% 要求在编写的函数中实现以下几点:
% (1)如果只给出一个输入,则会自动生成一个方阵
% (2)在函数中给出合适的注释信息
% (3)检测输入和返回变量的个数,如果有错误,则给出错误信息
function A = M1_25(n,m)
% 该函数用于创建一个特征的矩阵
if nargout > 1
error('输出太多参数!');
end
if nargin == 1
m = n;
elseif(nargin == 0) || (nargin > 2)
error('输入参数错误!');
end
A = zeros(n,m);
for i = 1:n
for j = 1:m
A(i,j) = 1/(i+j-1);
end
end
运行结果:
>> A = M1_25(2,3)
A =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
>> A = M1_25(3)
A =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
>> A = M1_25(3,2,4)
错误使用 M1_25
输入参数太多。