Matlab 矩阵及其基本运算
Matlab 的功能非常强大,在计算领域是必备的工具。Matlab的编程是不同于软件编程的一个领域,它更加专注于算法的实现。
Matlab的命令和用法非常丰富,掌握Matlab的工具并非一朝一夕,那就从点点滴滴开始吧,一年乃至五年甚至更久。
本篇主要是Matlab 学习的开篇之作,介绍矩阵及其基本运算。
MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍 MATLAB 的命令及其用法。
1、矩阵的表示
1.1数值矩阵的生成
- 实数值矩阵的输入
不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗
号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于
一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,
会有多重的方括号。
>> vect_a = [1 2 3 4 5]
vect_a =
1 2 3 4 5
>> Matrix_B = [1 2 3;
>> 2 3 4;3 4 5]
Matrix_B = 1 2 3
2 3 4
3 4 5
>> Null_M = [ ] %生成一个空矩阵
- 复数矩阵输入
(1)由复数元素构造
例:
a1=[sqrt(2)*exp((pi/4)*i) 1+2i 1+3i;sqrt(2)*exp((-pi/4)*i) 1-2i 1-3i]
(2)由实矩阵构造
例:
a2re=[1 1 1;1 1 1];%实部实矩阵
a2im=[1 2 3;-1 -2 -3];%虚部实矩阵
a2=a2re+a2im*i%由实矩阵构造
1.2 符号矩阵的生成
1.用命令 sym 定义矩阵:
在 MATLAB 中输入符号向量或者矩阵的方法和输入数值类型的向量或者矩阵在形式上
很相像,只不过要用到符号矩阵定义函数 sym,或者是用到符号定义函数 syms.
>> sym_matrix = sym('[a b c;Jack,Help Me!,NO WAY!],')
sym_matrix =
[a b c]
[Jack Help Me! NO WAY!]
>> sym_digits = sym('[1 2 3;a b c;sin(x)cos(y)tan(z)]')
sym_digits =
[1 2 3]
[a b c]
[sin(x)cos(y)tan(z)]
2.用命令 syms 定义矩阵
先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。
>> syms a b c ;
>> M1 = sym('Classical');
>> M2 = sym(' Jazz');
>> M3 = sym('Blues')
>> syms_matrix = [a b c; M1, M2, M3;int2str([2 3 5])]
syms_matrix =
[ a b c]
[Classical Jazz Blues]
[ 2 3 5]
把数值矩阵转化成相应的符号矩阵。
数值型和符号型在 MATLAB 中是不相同的,它们之间不能直接进行转化。
1.3 大矩阵的生成
对于大型矩阵,一般创建 M 文件,以便于修改:
例 用 M 文件创建大矩阵,文件名为 example.m
exm=[ 456 468 873 2 579 55
21 687 54 488 8 13
65 4567 88 98 21 5
456 68 4589 654 5 987
5488 10 9 6 33 77]
在 MATLAB 窗口输入
>>example;
>>size(exm) %显示 exm 的大小
ans=
5 6 %表示 exm 有 5 行 6 列。
1.4 多维数组的创建
函数 cat
格式 A=cat(n,A1,A2,…,Am)
说明 n=1 和 n=2 时分别构造[A1;A2]和[A1,A2],都是二维数组,而 n=3 时可以构造
出三维数组。
1.5 特殊矩阵的生成
全零阵
函数 zeros
格式
B = zeros(n) %生成 n×n 全零阵
B = zeros(m,n) %生成 m×n 全零阵
B = zeros([m n]) %生成 m×n 全零阵
B = zeros(d1,d2,d3…) %生成 d1×d2×d3×…全零阵或数组
B = zeros([d1 d2 d3…]) %生成 d1×d2×d3×…全零阵或数组
B = zeros(size(A)) %生成与矩阵 A 相同大小的全零阵
单位阵
函数 eye
格式
Y = eye(n) %生成 n×n 单位阵
Y = eye(m,n) %生成 m×n 单位阵
Y = eye(size(A)) %生成与矩阵 A 相同大小的单位阵
全 1 阵
函数 ones
格式
Y = ones(n) %生成 n×n 全 1 阵
Y = ones(m,n) %生成 m×n 全 1 阵
Y = ones([m n]) %生成 m×n 全 1 阵
Y = ones(d1,d2,d3…) %生成 d1×d2×d3×…全 1 阵或数组
Y = ones([d1 d2 d3…]) %生成 d1×d2×d3×…全 1 阵或数组
Y = ones(size(A)) %生成与矩阵 A 相同大小的全 1 阵
均匀分布随机矩阵
函数 rand
格式
Y = rand(n) %生成 n×n 随机矩阵,其元素在(0,1)内
Y = rand(m,n) %生成 m×n 随机矩阵
Y = rand([m n]) %生成 m×n 随机矩阵
Y = rand(m,n,p,…) %生成 m×n×p×…随机矩阵或数组
Y = rand([m n p…]) %生成 m×n×p×…随机矩阵或数组
Y = rand(size(A)) %生成与矩阵 A 相同大小的随机矩阵
rand %无变量输入时只产生一个随机数
s = rand('state') %产生包括均匀发生器当前状态的 35 个元素的向量
rand('state', s) %使状态重置为 s
rand('state', 0) %重置发生器到初始状态
rand('state', j) %对整数 j 重置发生器到第 j 个状态
rand('state', sum (100*clock)) %每次重置到不同状态
例 :产生一个 3×4 随机矩阵
>> R=rand(3,4)
R =
0.9501 0.4860 0.4565 0.4447
0.2311 0.8913 0.0185 0.6154
0.6068 0.7621 0.8214 0.7919
例: 产生一个在区间[10, 20]内均匀分布的 4 阶随机矩阵
>> a=10;b=20;
>> x=a+(b-a)*rand(4)
x =
19.2181 19.3547 10.5789 11.3889
17.3821 19.1690 13.5287 12.0277
11.7627 14.1027 18.1317 11.9872
14.0571 18.9365 10.0986 16.0379
正态分布随机矩阵
函数 randn
格式
Y = randn(n) %生成 n×n 正态分布随机矩阵
Y = randn(m,n) %生成 m×n 正态分布随机矩阵
Y = randn([m n]) %生成 m×n 正态分布随机矩阵
Y = randn(m,n,p,…) %生成 m×n×p×…正态分布随机矩阵或数组
Y = randn([m n p…]) %生成 m×n×p×…正态分布随机矩阵或数组
Y = randn(size(A)) %生成与矩阵 A 相同大小的正态分布随机矩阵
randn %无变量输入时只产生一个正态分布随机数
s = randn('state') %产生包括正态发生器当前状态的 2 个元素的向量
s = randn('state', s) %重置状态为 s
s = randn('state', 0) %重置发生器为初始状态
s = randn('state', j) %对于整数 j 重置状态到第 j 状态
s = randn('state', sum(100*clock)) %每次重置到不同状态
例 产生均值为 0.6,方差为 0.1 的 4 阶矩阵
>> mu=0.6; sigma=0.1;
>> x=mu+sqrt(sigma)*randn(4)
x =
0.8311 0.7799 0.1335 1.0565
0.7827 0.5192 0.5260 0.4890
0.6127 0.4806 0.6375 0.7971
0.8141 0.5064 0.6996 0.8527
产生随机排列
函数 randperm
格式
p = randperm(n) %产生 1~n 之间整数的随机排列
>> randperm(6)
ans =
3 2 1 5 4 6
产生线性等分向量
函数 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)
y = logspace(a,pi)
计算矩阵中元素个数
n = numel(a) %返回矩阵 A 的元素的个数
产生以输入元素为对角线元素的矩阵
函数 blkdiag
格式
out = blkdiag(a,b,c,d,…) %产生以 a,b,c,d,…为对角线元素的矩阵
例
>> out = blkdiag(1,2,3,4)
out =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
友矩阵
函数 compan
格式
A = compan(u) %u 为多项式系统向量,A 为友矩阵,A 的第 1 行元素为
-u (2:n)/u(1),其中 u (2:n)为 u 的第 2 到第 n 个元素,A 为特
征值就是多项式的特征根。
命令 hadamard 矩阵
函数 hadamard
格式 H = hadamard(n) %返回 n 阶 hadamard 矩阵
>> h=hadamard(4)
h =
1 1 1 1
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1
命令 Hankel 方阵
函数 hankel
格式
H = hankel(c) %第 1 列元素为 c,反三角以下元素为 0。
H = hankel(c,r) %第 1 列元素为 c,最后一行元素为 r,如果 c 的最后一个元素
与 r 的第一个元素不同,交叉位置元素取为 c 的最后一个元素。
命令 Hilbert 矩阵
函数 hilb
格式
H = hilb(n) %返回 n 阶 Hilbert 矩阵,其元素为 H(i,j)=1/(i+j-1)。 例 1-17 产生一个 3 阶 Hilbert 矩阵
>> format rat %以有理形式输出
>> H=hilb(3)
H =
1 1/2 1/3
1/2 1/3 1/4
1/3 1/4 1/5
命令 逆 Hilbert 矩阵
函数 invhilb
格式
H = invhilb(n) %产生 n 阶逆 Hilbert 矩阵
命令 Magic(魔方)矩阵
函数 magic
格式
M = magic(n) %产生 n 阶魔方矩阵
>> M=magic(3)
M =
8 1 6
3 5 7
4 9 2
命令 Pascal 矩阵
函数 pascal
格式
A = pascal(n) %产生 n 阶 Pascal 矩阵,它是对称、正定矩阵,它的元素由
Pascal 三角组成,它的逆矩阵的所有元素都是整数。
A = pascal(n,1) %返回由下三角的 Cholesky 系数组成的 Pascal 矩阵
A = pascal(n,2) %返回 Pascal(n,1)的转置和交换的形式
例
>> A=pascal(4)
A =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
>> A=pascal(3,1)
A =
1 0 0
1 -1 0
1 -2 1
>> A=pascal(3,2)
A =
1 1 1
-2 -1 0
1 0 0
命令 托普利兹矩阵
函数 toeplitz
格式 T = toeplitz(c,r) %生成一个非对称的托普利兹矩阵,将 c 作为第 1 列,将 r 作
为第 1 行,其余元素与左上角相邻元素相等。
T = toeplitz® %用向量 r 生成一个对称的托普利兹矩阵
命令 Wilkinson 特征值测试阵
函数 wilkinson
格式
W = wilkinson(n) %返回 n 阶 Wilkinson 特征值测试阵
资料整理来源:[MATLAB6.0数学手册].蒲俊.吉家锋.伊良忠
今天的文章Matlab 矩阵的表示分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/27242.html