GerwelsJI 2020-05-07
??MATLAB是基于矩阵和数组计算的,可以直接对矩阵和数组进行整体的操作,MATLAB有三种矩阵运算类型:矩阵的代数运算、矩阵的关系运算和矩阵的逻辑运算。其中,矩阵的代数运算应用最广泛。本文主要讲述矩阵的基本操作,涉及矩阵的创建、矩阵的代数运算、关系运算和逻辑运算等基本知识。
% 1. 直接输入法创建矩阵 >> A = [1,2,3; 4,5,6; 7,8,9] A = 1 2 3 4 5 6 7 8 9
% 2. 函数法创建矩阵 >> zeros(3) % 生成3x3的全零矩阵 ans = 0 0 0 0 0 0 0 0 0 >> zeros(3,2) % 生成3x2的全零矩阵 ans = 0 0 0 0 0 0 >> eye(3) % 生成单位矩阵 ans = 1 0 0 0 1 0 0 0 1 >> ones(3) % 生成全1矩阵 ans = 1 1 1 1 1 1 1 1 1 >> magic(3) % 生成3x3的魔方阵 ans = 8 1 6 3 5 7 4 9 2 >> diag(1:3) % 对角矩阵 ans = 1 0 0 0 2 0 0 0 3 >> diag(1:5,1) % 对角线向上移1位矩阵 ans = 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 4 0 0 0 0 0 0 5 0 0 0 0 0 0 >> diag(1:5,-1) % 对角线向下移1位矩阵 ans = 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 4 0 0 0 0 0 0 5 0 >> triu(ones(3,3)) % 上三角矩阵 ans = 1 1 1 0 1 1 0 0 1 >> tril(ones(3,3)) % 下三角矩阵 ans = 1 0 0 1 1 0 1 1 1
>> rand(3) % 生成随机矩阵 ans = 0.2898 0.8637 0.0562 0.4357 0.8921 0.1458 0.3234 0.0167 0.7216 >> rand(‘state‘,0); % 设定种子数,产生特定种子数下相同的随机数 >> rand(3) ans = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 >> a = 1; b = 100; >> x = a + (b-a)* rand(3) % 产生区间(1,100)内的随机数 x = 38.2127 20.7575 91.1133 89.9610 31.0064 53.0040 43.4711 54.2917 31.3762 >> a = 1; b = 100; >> a + fix(b * rand(1,50)) % 产生50个[1,100]内的随机正整数 ans = 列 1 至 15 4 72 77 6 63 27 32 53 41 90 58 57 40 70 57 列 16 至 30 35 60 28 5 84 11 73 45 100 57 47 42 22 24 32 列 31 至 45 87 26 97 31 38 35 71 62 76 80 22 90 90 94 28 列 46 至 50 48 26 37 53 39
>> randn(3) % 生成均值为0,方差为1的正太分布随机数矩阵 ans = -0.4326 0.2877 1.1892 -1.6656 -1.1465 -0.0376 0.1253 1.1909 0.3273 >> randperm(10) % 生成1-10之间随机分布10个正整数 ans = 4 9 10 2 5 8 1 3 7 6 % 多项式x^3 - 7x + 6 的伴随矩阵 >> u = [1,0,-7,6]; >> A = compan(u) % 生成伴随矩阵 A = 0 7 -6 1 0 0 0 1 0 >> eig(A) % 此处eig()函数用于求特征值 % 利用伴随矩阵求得方程的根 ans = -3.0000 2.0000 1.0000
>> A = [1,1;2,2]; >> B = [1,1;2,2]; >> A A = 1 1 2 2 >> B B = 1 1 2 2 >> A + B ans = 2 2 4 4 >> B-A ans = 0 0 0 0 >> A * B ans = 3 3 6 6 >> A^2 ans = 3 3 6 6 >> A^3 ans = 9 9 18 18
>> C = magic(3) C = 8 1 6 3 5 7 4 9 2 >> size(C) ans = 3 3 >> length(C) ans = 3 >> sum(C) ans = 15 15 15 >> max(C) ans = 8 9 7 >> C‘ ans = 8 3 4 1 5 9 6 7 2 >> inv(C) ans = 0.1472 -0.1444 0.0639 -0.0611 0.0222 0.1056 -0.0194 0.1889 -0.1028
元素群运算,是指矩阵中的所有元素按单个元素进行运算,也即是对应位置进行运算。
>> A = [1,2;3,4]; >> B = [1,2;3,4]; >> A .* B ans = 1 4 9 16 >> A ./ B ans = 1 1 1 1 >> A .\ B ans = 1 1 1 1 >> A .^ B ans = 1 4 27 256
MATLAB提供了几乎所有初等函数,包括三角函数、对数函数、指数函数和复数运算函数等。大部分的MATLAB函数运算都是分别作用于函数变量(矩阵)的每一个元素。
>> x = [0, pi/6, pi/4, pi/3]; >> y = tan(x) y = 0 0.5774 1.0000 1.7321 >> y = sin(x) y = 0 0.5000 0.7071 0.8660
在使用关系运算时,首先应保证两个矩阵的维数相等或至少一个为标量。若参与运算的对象为两个矩阵,则关系运算对两个矩阵的对应元素进行关系比较,若关系满足,则将结果矩阵中该位置的元素置1,否则置0。若参与运算的对象之一为标量,则关系运算将矩阵的每一个元素与该标量逐一进行关系比较,若关系满足,则将结果矩阵中该位置的元素置1,否则置0。
>> A = [1,1;1,1]; >> B = [0,1;2,3]; >> A > B ans = 2×2 logical 数组 1 0 0 0 >> A >= B ans = 2×2 logical 数组 1 1 0 0 >> A == B ans = 2×2 logical 数组 0 1 0 0 >> A ~= B ans = 2×2 logical 数组 1 0 1 1
逻辑运算中,所有非零元素的逻辑值为“真”,用代码“1”表示;值为零的元素的逻辑值为“假”,用代码“0”表示。逻辑运算规则与关系运算基本一致,也是针对两个矩阵的对应元素。
>> A & B ans = 2×2 logical 数组 0 1 1 1 >> A | B ans = 2×2 logical 数组 1 1 1 1 >> ~ A ans = 2×2 logical 数组 0 0 0 0 >> ~B ans = 2×2 logical 数组 1 0 0 0