为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Matlab_矩阵计算

2014-01-16 50页 doc 280KB 54阅读

用户头像

is_050127

暂无简介

举报
Matlab_矩阵计算矩阵及其基本运算 -------------------------------------------------------------------------------- 第1章 矩阵及其基本运算 MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍MATLAB的命令及其用法。 1.1 矩阵的表示 1.1.1 数值矩阵的生成 1.实数值矩阵输入 MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。 不管是任何矩阵(向量),我们可以直接按...
Matlab_矩阵计算
矩阵及其基本运算 -------------------------------------------------------------------------------- 第1章 矩阵及其基本运算 MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本从最基本的运算单元出发,介绍MATLAB的命令及其用法。 1.1 矩阵的示 1.1.1 数值矩阵的生成 1.实数值矩阵输入 MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。 不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如: >> Time = [11 12 1 2 3 4 5 6 7 8 9 10] Time = 11 12 1 2 3 4 5 6 7 8 9 10 >> X_Data = [2.32 3.43;4.37 5.98] X_Data = 2.43 3.43 4.37 5.98 >> 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 = [ ] %生成一个空矩阵 2.复数矩阵输入 复数矩阵有两种生成方式: 第一种方式 例1-1 >> a=2.7;b=13/25; >> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1] C= 1.0000 5.4000 + 0.5200i 0.8544 0.7071 5.3000 4.5000 第2种方式 例1-2 >> R=[1 2 3;4 5 6], M=[11 12 13;14 15 16] R = 1 2 3 4 5 6 M = 11 12 13 14 15 16 >> CN=R+i*M CN = 1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i 4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i 1.1.2 符号矩阵的生成 在MATLAB中输入符号向量或者矩阵的方法和输入数值类型的向量或者矩阵在形式上很相像,只不过要用到符号矩阵定义函数sym,或者是用到符号定义函数syms,先定义一些必要的符号变量,再像定义普通矩阵一样输入符号矩阵。 1.用命令sym定义矩阵: 这时的函数sym实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的符号或者是表达式,而且长度没有限制,只是将方括号置于用于创建符号表达式的单引号中。如下例: 例1-3 >> 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定义矩阵 先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。 例1-4 >> 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中是不相同的,它们之间不能直接进行转化。MATLAB提供了一个将数值型转化成符号型的命令,即sym。 例1-5 >> Digit_Matrix = [1/3 sqrt(2) 3.4234;exp(0.23) log(29) 23^(-11.23)] >> Syms_Matrix = sym(Digit_Matrix) 结果是: Digit_Matrix = 0.3333 1.4142 3.4234 1.2586 3.3673 0.0000 Syms_Matrix = [ 1/3, sqrt(2), 17117/5000] [5668230535726899*2^(-52),7582476122586655*2^(-51),5174709270083729*2^(-103)] 注意:矩阵是用分数形式还是浮点形式表示的,将矩阵转化成符号矩阵后,都将以最接近原值的有理数形式表示或者是函数形式表示。 1.1.3 大矩阵的生成 对于大型矩阵,一般创建M文件,以便于修改: 例1-6 用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.1.4 多维数组的创建 函数 cat 格式 A=cat(n,A1,A2,…,Am) 说明 n=1和n=2时分别构造[A1;A2]和[A1,A2],都是二维数组,而n=3时可以构造出三维数组。 例1-7 >> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2; >> A4=cat(3,A1,A2,A3) A4(:,:,1) = 1 2 3 4 5 6 7 8 9 A4(:,:,2) = 1 4 7 2 5 8 3 6 9 A4(:,:,3) = 0 -2 -4 2 0 -2 4 2 0 或用另一种原始方式可以定义: 例1-8 >> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2; >> A5(:,:,1)=A1, A5(:,:,2)=A2, A5(:,:,3)=A3 A5(:,:,1) = 1 2 3 4 5 6 7 8 9 A5(:,:,2) = 1 4 7 2 5 8 3 6 9 A5(:,:,3) = 0 -2 -4 2 0 -2 4 2 0 1.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)) %每次重置到不同状态 例1-9 产生一个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 例1-10 产生一个在区间[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)) %每次重置到不同状态 例1-11 产生均值为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之间整数的随机排列 例1-12 >> 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,…为对角线元素的矩阵 例1-13 >> 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为特征值就是多项式的特征根。 例1-14 求多项式 的友矩阵和根 >> u=[1 0 -7 6]; >> A=compan(u) %求多项式的友矩阵 A = 0 7 -6 1 0 0 0 1 0 >> eig(A) %A的特征值就是多项式的根 ans = -3.0000 2.0000 1.0000 命令 hadamard矩阵 函数 hadamard 格式 H = hadamard(n) %返回n阶hadamard矩阵 例1-15 >> 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的最后一个元素。 例1-16 >> c=1:3,r=7:10 c = 1 2 3 r = 7 8 9 10 >> h=hankel(c,r) h = 1 2 3 8 2 3 8 9 3 8 9 10 命令 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 阶魔方矩阵 例1-18 >> 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)的转置和交换的形式 例1-19 >> 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) %用向量r生成一个对称的托普利兹矩阵 例1-20 >> c=[1 2 3 4 5]; >> r=[1.5 2.5 3.5 4.5 5.5]; >> T=toeplitz(c,r) T = 1 5/2 7/2 9/2 11/2 2 1 5/2 7/2 9/2 3 2 1 5/2 7/2 4 3 2 1 5/2 5 4 3 2 1 命令 Wilkinson特征值测试阵 函数 wilkinson 格式 W = wilkinson(n) %返回n阶Wilkinson特征值测试阵 例1-21 >> W=wilkinson(4) W = 3/2 1 0 0 1 1/2 1 0 0 1 1/2 1 0 0 1 3/2 >> W=wilkinson(7) W = 3 1 0 0 0 0 0 1 2 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 2 1 0 0 0 0 0 1 3 1.2 矩阵运算 1.2.1 加、减运算 运算符:“+”和“-”分别为加、减运算符。 运算规则:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。 例1-22 >>A=[1, 1, 1; 1, 2, 3; 1, 3, 6] >>B=[8, 1, 6; 3, 5, 7; 4, 9, 2] >>A+B=A+B >>A-B=A-B 结果显示:A+B= 9 2 7 4 7 10 5 12 8 A-B= -7 0 -5 -2 -3 -4 -3 -6 4 1.2.2 乘法 运算符:* 运算规则:按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。 1.两个矩阵相乘 例1-23 >>X= [2 3 4 5; 1 2 2 1]; >>Y=[0 1 1; 1 1 0; 0 0 1; 1 0 0]; Z=X*Y 结果显示为: Z= 8 5 6 3 3 3 2.矩阵的数乘:数乘矩阵 上例中:a=2*X 则显示:a = 4 6 8 10 2 4 4 2 向量的点乘(内积):维数相同的两个向量的点乘。 数组乘法: A.*B表示A与B对应元素相乘。 3.向量点积 函数 dot 格式 C = dot(A,B) %若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。 C = dot(A,B,dim) %在dim维数中给出A与B的点积 例 >>X=[-1 0 2]; >>Y=[-2 -1 1]; >>Z=dot(X, Y) 则显示:Z = 4 还可用另一种算法: sum(X.*Y) ans= 4 4.向量叉乘 在数学上,两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。在Matlab中,用函数cross实现。 函数 cross 格式 C = cross(A,B) %若A、B为向量,则返回A与B的叉乘,即C=A×B,A、B必须是3个元素的向量;若A、B为矩阵,则返回一个3×n矩阵,其中的列是A与B对应列的叉积,A、B都是3×n矩阵。 C = cross(A,B,dim) %在dim维数中给出向量A与B的叉积。A和B必须具有相同的维数,size(A,dim)和size(B,dim)必须是3。 例1-24 计算垂直于向量(1, 2, 3)和(4, 5, 6)的向量。 >>a=[1 2 3]; >>b=[4 5 6]; >>c=cross(a,b) 结果显示: c= -3 6 -3 可得垂直于向量(1, 2, 3)和(4, 5, 6)的向量为±(-3, 6, -3) 5.混合积 混合积由以上两函数实现: 例1-25 计算向量a=(1, 2, 3)、b=(4, 5, 6)和c=(-3, 6, -3) 的混合积 解: >>a=[1 2 3]; b=[4 5 6]; c=[-3 6 -3]; >>x=dot(a, cross(b, c)) 结果显示:x = 54 注意:先叉乘后点乘,顺序不可颠倒。 6.矩阵的卷积和多项式乘法 函数 conv 格式 w = conv(u,v) %u、v为向量,其长度可不相同。 说明 长度为m的向量序列u和长度为n的向量序列v的卷积(Convolution)定义为: 式中:w向量序列的长度为(m+n-1),当m=n时, w(1) = u(1)*v(1) w(2) = u(1)*v(2)+u(2)*v(1) w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1) … w(n) = u(1)*v(n)+u(2)*v(n-1)+ … +u(n)*v(1) … w(2*n-1) = u(n)*v(n) 例1-26 展开多项式 解:>> w=conv([1,2,2],conv([1,4],[1,1])) w = 1 7 16 18 8 >> P=poly2str(w,'s') %将w表示成多项式 P = s^4 + 7 s^3 + 16 s^2 + 18 s + 8 7.反褶积(解卷)和多项式除法运算 函数 deconv 格式 [q,r] = deconv(v,u) %多项式v除以多项式u,返回商多项式q和余多项式r。 注意:v、u、q、r都是按降幂排列的多项式系数向量。 例1-27 ,则其卷积为 >>u = [1 2 3 4] >>v = [10 20 30] >>c = conv(u,v) c = 10 40 100 160 170 120 则反褶积为 >>[q,r] = deconv(c,u) q = 10 20 30 r = 0 0 0 0 0 0 8.张量积 函数 kron 格式 C=kron (A,B) %A为m×n矩阵,B为p×q矩阵,则C为mp×nq矩阵。 说明 A与B的张量积定义为: A B与B A均为mp×nq矩阵,但一般地A B B A。 例1-28 求A B。 >> A=[1 2;3 4];B=[1 2 3;4 5 6;7 8 9]; >> C=kron(A,B) C = 1 2 3 2 4 6 4 5 6 8 10 12 7 8 9 14 16 18 3 6 9 4 8 12 12 15 18 16 20 24 21 24 27 28 32 36 1.2.3 集合运算 1.两个集合的交集 函数 intersect 格式 c = intersect(a,b) %返回向量a、b的公共部分,即c= a∩b。 c = intersect(A,B,'rows') %A、B为相同列数的矩阵,返回元素相同的行。 [c,ia,ib] = intersect(a,b) %c为a、b的公共元素,ia表示公共元素在a中的位置,ib表示公共元素在b中位置。 例1-29 >> A=[1 2 3 4;1 2 4 6;6 7 1 4] A = 1 2 3 4 1 2 4 6 6 7 1 4 >> B=[1 2 3 8;1 1 4 6;6 7 1 4] B = 1 2 3 8 1 1 4 6 6 7 1 4 >> C=intersect(A,B,'rows') C = 6 7 1 4 例1-30 >> A = [1 9 6 20]; B = [1 2 3 4 6 10 20]; >> [c,ia,ib] = intersect(A,B) c = 1 6 20 ia = 1 3 4 ib = 1 5 7 2.检测集合中的元素 函数 ismember 格式 k = ismember(a,S) %当a中元素属于S时,k取1,否则,k取0。 k = ismember(A,S,'rows') %A、S有相同的列,返回行相同k取1,不相同取0的列向量。 例1-31 >> S=[0 2 4 6 8 10 12 14 16 18 20]; >> a=[1 2 3 4 5 6]; >> k=ismember(a,S) k = 0 1 0 1 0 1 %1表示相同元素的位置 例1-32 >> A=[1 2 3 4;1 2 4 6;6 7 1 4] >> B=[1 2 3 8;1 1 4 6;6 7 1 4] >> k=ismember(A,B,'rows') k = 0 0 1 %1表示元素相同的行 3.两集合的差 函数 setdiff 格式 c = setdiff(a,b) %返回属于a但不属于b的不同元素的集合,C = a-b。 c = setdiff(A,B,'rows') %返回属于A但不属于B的不同行 [c,i] = setdiff(…) %c与前面一致,i表示c中元素在A中的位置。 例1-33 >> A = [1 7 9 6 20]; B = [1 2 3 4 6 10 20]; >> c=setdiff(A,B) c = 7 9 例1-34 >> A=[1 2 3 4;1 2 4 6;6 7 1 4] >> B=[1 2 3 8;1 1 4 6;6 7 1 4] >> c=setdiff(A,B,'rows') c = 1 2 3 4 1 2 4 6 4.两个集合交集的非(异或) 函数 setxor 格式 c = setxor(a,b) %返回集合a、b交集的非 c = setxor(A,B,'rows') %返回矩阵A、B交集的非,A、B有相同列数。 [c,ia,ib] = setxor(…) %ia、ib表示c中元素分别在a (或A)、b(或B)中位置 例1-35 >> A=[1 2 3 4]; >> B=[2 4 5 8]; >> C=setxor(A,B) C = 1 3 5 8 例1-36 >> A=[1 2 3 4;1 2 4 6;6 7 1 4] A = 1 2 3 4 1 2 4 6 6 7 1 4 >> B=[1 2 3 8;1 1 4 6;6 7 1 4] B = 1 2 3 8 1 1 4 6 6 7 1 4 >> [C,ia,ib]=setxor(A,B,'rows') C = 1 1 4 6 1 2 3 4 1 2 3 8 1 2 4 6 ia = 1 2 ib = 2 1 5.两集合的并集 函数 union 格式 c = union(a,b) %返回a、b的并集,即c = a∪b。 c = union(A,B,'rows') %返回矩阵A、B不同行向量构成的大矩阵,其中相同行向量只取其一。 [c,ia,ib] = union(…) %ia、ib分别表示c中行向量在原矩阵(向量)中的位置 例1-37 >> A=[1 2 3 4]; >> B=[2 4 5 8]; >> c=union(A,B) 则结果为 c = 1 2 3 4 5 8 例1-38 >> A=[1 2 3 4;1 2 4 6] A = 1 2 3 4 1 2 4 6 >> B=[1 2 3 8;1 1 4 6] B = 1 2 3 8 1 1 4 6 >> [c,ia,ib]=union(A,B,'rows') c = 1 1 4 6 1 2 3 4 1 2 3 8 1 2 4 6 ia = 1 2 ib = 2 1 6.取集合的单值元素 函数 格式 b = unique (a) %取集合a的不重复元素构成的向量 b = unique (A,'rows') %返回A、B不同行元素组成的矩阵 [b,i,j] = unique (…) %i、j体现b中元素在原向量(矩阵)中的位置 例1-39 >> A=[1 1 2 2 4 4 6 4 6] A = 1 1 2 2 4 4 6 4 6 >> [c,i,j]=unique(A) c = 1 2 4 6 i = 2 4 8 9 j = 1 1 2 2 3 3 4 3 4 例1-40 >> A=[1 2 2 4;1 1 4 6;1 1 4 6] A = 1 2 2 4 1 1 4 6 1 1 4 6 >> [c,i,j]=unique(A,'rows') c = 1 1 4 6 1 2 2 4 i = 3 1 j = 2 1 1 1.2.4 除法运算 Matlab提供了两种除法运算:左除(\)和右除(/)。一般情况下,x=a\b是方程a*x =b的解,而x=b/a是方程x*a=b的解。 例:a=[1 2 3; 4 2 6; 7 4 9] b=[4; 1; 2]; x=a\b 则显示:x= -1.5000 2.0000 0.5000 如果a为非奇异矩阵,则a\b和b/a可通过a的逆矩阵与b阵得到: a\b = inv(a)*b b/a = b*inv(a) 数组除法: A./B表示A中元素与B中元素对应相除。 1.2.5 矩阵乘方 运算符:^ 运算规则: (1)当A为方阵,P为大于0的整数时,A^P表示A的P次方,即A自乘P次;P为小于0的整数时,A^P表示A-1的P次方。 (2)当A为方阵,p为非整数时,则 其中V为A的特征向量, 为特征值对角矩阵。如果有重根,以上指令不成立。 (3)标量的矩阵乘方PA,标量的矩阵乘方定义为 式中V,D取自特征值分解AV=AD。 (4)标量的数组乘方P.^A,标量的数组乘方定义为 数组乘方:A.^P:表示A的每个元素的P次乘方。 1.2.6 矩阵函数 命令 方阵指数 函数 expm 格式 Y = expm(A) %使用Pade近似算法计算eA,这是一个内部函数,A为方阵。 Y=expm1(A) %使用一个M文件和内部函数相同的算法计算eA Y=expm2(A) %使用泰勒级数计算eA Y=expm3(A) %使用特征值和特征向量计算eA 命令 矩阵的对数 函数 logm 格式 Y = logm(X) %计算矩阵X的对数,它是expm(X)的反函数。 [Y,esterr] = logm(X) %esterr为相对残差的估计值:norm(expm(Y)-X)/norm(X) 例1-41 >> A=[1 1 0;0 0 2;0 0 -1]; >> Y=expm(A) Y = 2.7183 1.7183 1.0862 0 1.0000 1.2642 0 0 0.3679 >> A=logm(Y) A = 1.0000 1.0000 0.0000 0 0 2.0000 0 0 -1.0000 命令 方阵的函数 函数 funm 格式 F = funm(A,fun) %A为方阵,计算由fun指定的A的矩阵函数,fun可以是任意基本函数,如sin、cos等等,例如:funm(A, ’exp’)=expm(A)。 [F,esterr] = funm(A,fun) %esterr为结果所产生的相对误差的估计值。 命令 矩阵的方根 函数 sqrtm 格式 X = sqrtm(A) %矩阵A的平方根A1/2,相当于X*X=A,求X。若A的特征值有非负实部,则X是唯一的;若A的特征值有负的实部,则X为复矩阵;若A为奇异矩阵,则X不存在。 [X,resnorm] = sqrtm(A) % resnorm为结果产生的相对误差 [X,alpha,condest] = sqrtm(A) % alpha为稳定因子,condest为结果的条件数的估计值。 命令 矩阵A的多项式 函数 polyvalm 格式 polyvalm(P, A) %P为多项式系数向量,方阵A为多项式变量,返回多项式值。 1.2.7 矩阵转置 运算符:′ 运算规则:若矩阵A的元素为实数,则与线性代数中矩阵的转置相同。 若A为复数矩阵,则A转置后的元素由A对应元素的共轭复数构成。 若仅希望转置,则用如下命令:A.′。 1.2.8 方阵的行列式 函数 det 格式 d = det(X) %返回方阵X的多项式的值 例1-42 >> A=[1 2 3;4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 >> D=det(A) D = 0 1.2.9 逆与伪逆 命令 逆 函数 inv 格式 Y=inv(X) %求方阵X的逆矩阵。若X为奇异阵或近似奇异阵,将给出警告信息。 例1-43 求 的逆矩阵 方法一 >>A=[1 2 3; 2 2 1; 3 4 3]; >>Y=inv(A)或Y=A^(-1) 则结果显示为 Y = 1.0000 3.0000 -2.0000 -1.5000 -3.0000 2.5000 1.0000 1.0000 -1.0000 方法二:由增广矩阵 进行初等行变换 >>B=[1, 2, 3, 1, 0, 0; 2, 2, 1, 0, 1, 0; 3, 4, 3, 0, 0, 1]; >>C=rref(B) %化行最简形 >>X=C(:, 4:6) %取矩阵C中的A^(-1)部分 显示结果如下: C = 1.0000 0 0 1.0000 3.0000 -2.0000 0 1.0000 0 -1.5000 -3.0000 2.5000 0 0 1.0000 1.0000 1.0000 -1.0000 X = 1.0000 3.0000 -2.0000 -1.5000 -3.0000 2.5000 1.0000 1.0000 -1.0000 例1-44 >> A=[2 1 -1;2 1 2;1 -1 1]; >> format rat %用有理格式输出 >> D=inv(A) D = 1/3 0 1/3 0 1/3 -2/3 -1/3 1/3 0 命令 伪逆 函数 pinv 格式 B = pinv(A) %求矩阵A的伪逆 B = pinv(A, tol) %tol为误差:max(size(A))*norm(A)*eps 说明 当矩阵为长方阵时,方程AX=I和XA=I至少有一个无解,这时A的伪逆能在某种程度上代表矩阵的逆,若A为非奇异矩阵,则pinv(A) = inv(A)。 例1-45 >> A=magic(5); %产生5阶魔方阵。 >> A=A(:,1:4) %取5阶魔方阵的前4列元素构成矩阵A。 A = 17 24 1 8 23 5 7 14 4 6 13 20 10 12 19 21 11 18 25 2 >> X=pinv(A) %计算A的伪逆 X = -0.0041 0.0527 -0.0222 -0.0132 0.0069 0.0437 -0.0363 0.0040 0.0033 0.0038 -0.0305 0.0027 -0.0004 0.0068 0.0355 0.0060 -0.0041 0.0314 0.0211 -0.0315 1.2.10 矩阵的迹 函数 trace 格式 b=trace (A) %返回矩阵A的迹,即A的对角线元素之和。 1.2.11 矩阵和向量的范数 命令 向量的范数 函数 norm 格式 n = norm(X) %X为向量,求欧几里德范数,即 。 n = norm(X,inf) %求 -范数,即 。 n = norm(X,1) %求1-范数,即 。 n = norm(X,-inf) %求向量X的元素的绝对值的最小值,即 。 n = norm(X, p) %求p-范数,即 ,所以norm(X,2) = norm(X)。 命令 矩阵的范数 函数 norm 格式 n = norm(A) %A为矩阵,求欧几里德范数 ,等于A的最大奇异值。 n = norm(A,1) %求A的列范数 ,等于A的列向量的1-范数的最大值。 n = norm(A,2) %求A的欧几里德范数 ,和norm(A)相同。 n = norm(A,inf) %求行范数 ,等于A的行向量的1-范数的最大值 即:max(sum(abs(A')))。 n = norm(A, 'fro' ) %求矩阵A的Frobenius范数 , 即sqrt(sum(diag(A'*A))),不能用矩阵p-范数的定义来求。 命令 范数的估计值 函数 normest 格式 nrm = normest(A) %矩阵A的2-范数(欧几里德范数)的估计值,相对误差小于106。 nrm = normest(A,tol) %tol为指定相对误差 [nrm,count] = normest(…) %count给出计算估计值的迭代次数 1.2.12 条件数 命令 矩阵的条件数 函数 cond 格式 c = cond(X) %求X的2-范数的条件数,即X的最大奇异值和最小奇异值的商。 c = cond(X,p) %求p-范数的条件数,p的值可以是1、2、inf或者’fro’。 说明 线性方程组AX=b的条件数是一个大于或者等于1的实数,用来衡量关于数据中的扰动,也就是A/或b对解X的灵敏度。一个差条件的方程组的条件数很大。条件数的定义为: 命令 1-范数的条件数估计 函数 condest 格式 c = condest (A) %方阵A的1-范数的条件数的下界估值。 [c,v] = condest (A) %v为向量,满足 ,即norm(A*v,1) =norm(A,1)*norm(v,1)/c。 [c,v] = condest (A,t) %求上面的c和v,同时显示出关于计算的步骤信息。如果t=1,则计算的每步都显示出来;如果t=-1,则给出商c/rcond(A)。 命令 矩阵可逆的条件数估值 函数 rcond 格式 c = rcond(A) %对于差条件矩阵A来说,给出一个接近于0的数;对于好条件矩阵A,则给出一个接近于1的数。 命令 特征值的条件数 函数 condeig 格式 c = condeig(A) %返回矩阵A的特征值的条件数 [V,D,c] = condeig(A) %D为A的特征值对角阵,V为A的特征向量。 1.2.13 矩阵的秩 函数 rank 格式 k = rank (A) %求矩阵A的秩 k = rank (A,tol) %tol为给定误差 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数 diag 格式 X = diag(v,k) %以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。 X = diag(v) %以v为主对角线元素,其余元素为0构成X。 v = diag(X,k) %抽取X的第k条对角线元素构成向量v。k=0:抽取主对角线元素;k>0:抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。 v = diag(X) %抽取主对角线元素构成向量v。 例1-46 >> v=[1 2 3]; >> x=diag(v,-1) x = 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 >> A=[1 2 3;4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 >> v=diag(A,1) v = 2 6 2.上三角阵和下三角阵的抽取 函数 tril %取下三角部分 格式 L = tril(X) %抽取X的主对角线的下三角部分构成矩阵L L = tril(X,k) %抽取X的第k条对角线的下三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。 函数 triu %取上三角部分 格式 U = triu(X) %抽取X的主对角线的上三角部分构成矩阵U U = triu(X,k) %抽取X的第k条对角线的上三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。 例1-47 >> A=ones(4) %产生4阶全1阵 A = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >> L=tril(A,1) %取下三角部分 L = 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 >> U=triu(A,-1) %取上三角部分 U = 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 1 3.矩阵的变维 矩阵的变维有两种方法,即用“:”和函数“reshape”,前者主要针对2个已知维数矩阵之间的变维操作;而后者是对于一个矩阵的操作。 (1)“:”变维 例1-48 > A=[1 2 3 4 5 6;6 7 8 9 0 1] A = 1 2 3 4 5 6 6 7 8 9 0 1 >> B=ones(3,4) B = 1 1 1 1 1 1 1 1 1 1 1 1 >> B(=A( B = 1 7 4 0 6 3 9 6 2 8 5 1 (2)Reshape函数变维 格式 B = reshape(A,m,n) %返回以矩阵A的元素构成的m×n矩阵B B = reshape(A,m,n,p,…) %将矩阵A变维为m×n×p×… B = reshape(A,[m n p…]) %同上 B = reshape(A,siz) %由siz决定变维的大小,元素个数与A中元素个数 相同。 例1-49 矩阵变维 >> a=[1:12]; >> b=reshape(a,2,6) b = 1 3 5 7 9 11 2 4 6 8 10 12 4.矩阵的变向 (1)矩阵旋转 函数 格式 B = rot90 (A) %将矩阵A逆时针方向旋转90° B = rot90 (A,k) %将矩阵A逆时针方向旋转(k×90°),k可取正负整数。 例1-50 >> A=[1 2 3;4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 >> Y1=rot90(A),Y2=rot90(A,-1) Y1 = %逆时针方向旋转 3 6 9 2 5 8 1 4 7 Y2 = %顺时针方向旋转 7 4 1 8 5 2 9 6 3 (2)矩阵的左右翻转 函数 fliplr 格式 B = fliplr(A) %将矩阵A左右翻转 (3)矩阵的上下翻转 函数 flipud 格式 B = flipud(A) %将矩阵A上下翻转 例1-51 >> A=[1 2 3;4 5 6] A = 1 2 3 4 5 6 >> B1=fliplr(A),B2=flipud(A) B1 = 3 2 1 6 5 4 B2 = 4 5 6 1 2 3 (4)按指定维数翻转矩阵 函数 flipdim 格式 B = flipdim(A,dim) % flipdim(A,1) = flipud(A),并且flipdim(A,2)=fliplr(A)。 例1-52 >> A=[1 2 3;4 5 6] A = 1 2 3 4 5 6 >> B1=flipdim(A,1),B2=flipdim(A,2) B1 = 4 5 6 1 2 3 B2 = 3 2 1 6 5 4 (5)复制和平铺矩阵 函数 repmat 格式 B = repmat(A,m,n) %将矩阵A复制m×n块,即B由m×n块A平铺而成。 B = repmat(A,[m n]) %与上面一致 B = repmat(A,[m n p…]) %B由m×n×p×…个A块平铺而成 repmat(A,m,n) %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵。 例1-53 >> A=[1 2;5 6] A = 1 2 5 6 >> B=repmat(A,3,4) B = 1 2 1 2 1 2 1 2 5 6 5 6 5 6 5 6 1 2 1 2 1 2 1 2 5 6 5 6 5 6 5 6 1 2 1 2 1 2 1 2 5 6 5 6 5 6 5 6 5.矩阵的比较关系 矩阵的比较关系是针对于两个矩阵对应元素的,所以在使用关系运算时,首先应该保证两个矩阵的维数一致或其中一个矩阵为标量。关系运算是对两个矩阵的对应运算进行比较,若关系满足,则将结果矩阵中该位置元素置为1,否则置0。 MATLAB的各种比较关系运算有见表1-1。 表1-1 运算符 含义 运算符 含义 > 大于关系 < 大于关系 = = 等于关系 >= 大于或等于关系 <= 小于或等于关系 ~ = 不等于关系 例1-54 >> A=[1 2 3 4;5 6 7 8];B=[0 2 1 4;0 7 7 2]; >> C1=A==B, C2=A>=B, C3=A~=B C1 = 0 1 0 1 0 0 1 0 C2 = 1 1 1 1 1 0 1 1 C3 = 1 0 1 0 1 1 0 1 6.矩阵元素的数据变换 对于小数构成的矩阵A来说,如果我们想对它取整数,有以下几种方法: (1)按-∞方向取整 函数 floor 格式 floor(A) %将A中元素按-∞方向取整,即取不足整数。 (2)按+∞方向取整 函数 ceil 格式 ceil(A) %将A中元素按+∞方向取整,即取过剩整数。 (3)四舍五入取整 函数 round 格式 round (A) %将A中元素按最近的整数取整,即四舍五入取整。 (4)按离0近的方向取整 函数 fix 格式 fix (A) %将A中元素按离0近的方向取整 例1-55 >> A=-1.5+4*rand(3) A = 2.3005 0.4439 0.3259 -0.5754 2.0652 -1.4260 0.9274 1.5484 1.7856 >> B1=floor(A),B2=ceil(A),B3=round(A),B4=fix(A) B1 = 2 0 0 -1 2 -2 0 1 1 B2 = 3 1 1 0 3 -1 1 2 2 B3 = 2 0 0 -1 2 -1 1 2 2 B4 = 2 0 0 0 2 -1 0 1 1 (5)矩阵的有理数形式 函数 rat 格式 [n,d]=rat (A) %将A表示为两个整数矩阵相除,即A=n./d。 例1-56 对于上例中的A >> [n,d]=rat(A) n = 444 95 131 -225 2059 -472 166 48 1491 d = 193 214 402 391 997 331 179 31 835 (6)矩阵元素的余数 函数 rem 格式 C = rem (A, x) %表示A矩阵除以模数x后的余数。若x=0,则定义rem(A, 0)=NaN,若x≠0,则整数部分由fix(A./x)表示,余数C=A-x.*fix (A./x)。允许模x为小数。 7.矩阵逻辑运算 设矩阵A和B都是m×n矩阵或其中之一为标量,在MATLAB中定义了如下的逻辑运算: (1)矩阵的与运算 格式 A&B或and(A, B) 说明 A与B对应元素进行与运算,若两个数均非0,则结果元素的值为1,否则为0。 (2)或运算 格式 A|B或or(A, B) 说明 A与B对应元素进行或运算,若两个数均为0,则结果元素的值为0,否则为1。 (3)非运算 格式 ~A或not (A) 说明 若A的元素为0,则结果元素为1,否则为0。 (4)异或运算 格式 xor (A,B) 说明 A与B对应元素进行异或运算,若相应的两个数中一个为0,一个非0,则结果为0,否则为1。 例1-57 >> A=[0 2 3 4;1 3 5 0],B=[1 0 5 3;1 5 0 5] A = 0 2 3 4 1 3 5 0 B = 1 0 5 3 1 5 0 5 >> C1=A&B,C2=A|B,C3=~A,C4=xor(A,B) C1 = 0 0 1 1 1 1 0 0 C2 = 1 1 1 1 1 1 1 1 C3 = 1 0 0 0 0 0 0 1 C4 = 1 1 0 0 0 0 1 1 1.2.15 符号矩阵运算 1.符号矩阵的四则运算 Matlab 6.x 抛弃了在4.2版中为符号矩阵设计的复杂函数形式,把符号矩阵的四则运算简化为与数值矩阵完全相同的运算方式,其运算符为:加(+)、减(-)、乘(×)、除(/、\)等或:符号矩阵的和(symadd)、差(symsub)、乘 (symmul)。 例1-58 >> >> ; >>C=B-A >>D=a\b 则显示: C= x-1/x 1-1/(x+1) x+2-1/(x+2) -1/(x+3) D= -6*x-2*x^3-7*x^2 1/2*x^3+x+3/2*x^2 6+2*x^3+10*x^2+14*x -2*x^2-3/2*x-1/2*x^3 2.其他基本运算 符号矩阵的其他一些基本运算包括转置(')、行列式(det)、逆(inv)、秩(rank)、幂(^)和指数(exp和expm)等都与数值矩阵相同 3.将数值矩阵转化为符号矩阵 函数 sym 格式 B=sym(A) %将A转化为符号矩阵B 例1-59 >> A=[2/3,sqrt(2),0.
/
本文档为【Matlab_矩阵计算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索