收藏 分销(赏)

第二讲-矩阵计算功能-src.doc

上传人:二*** 文档编号:4830414 上传时间:2024-10-14 格式:DOC 页数:6 大小:61KB 下载积分:5 金币
下载 相关 举报
第二讲-矩阵计算功能-src.doc_第1页
第1页 / 共6页
本文档共6页,全文阅读请下载到手机保存,查看更方便
资源描述
第四章 矩阵计算功能 1. 向量及其运算 1.1 向量的生成 1.2 向量的基本运算 2. 矩阵及其运算 2.1 矩阵的输入 2.1.1 直接输入 >> A = [1 2; 3 4] >> B = [11 12 13; 21 22 23] >> C = [A; 5 6] >> D = [B [14 15]']' >> a = 2.7358; b = 33/79; >> E = [1, 2*a+i*b, b*sqrt(a); sin(pi/4), a+5*b, 3.5+i] 2.1.2 常用矩阵生成函数输入 2.1.2.1 单位阵 eye(m, n) >> clear >> A = eye(3) >> B = eye(3, 4) >> C = eye(4, 3) 2.1.2.2 对角阵 diag([]) >> clear >> A = diag([1 2 3 4]) 2.1.2.3 全1矩阵 ones(N1, N2, ... Nk) >> clear >> A = ones(3) >> B = ones(3, 4) >> C = ones(2, 3, 4) 2.1.2.4 0矩阵 zeros(N1, N2, ..., Nk) >> clear >> A = zeros(3) >> B = zeros(3, 4) >> C = zeros(2, 3, 4) 2.1.2.5 随机矩阵 2.1.2.5.1 均匀分布 rand(N1, N2, ..., Nk) >> clear >> A = rand(3) >> B = rand(3, 4) >> C = rand(2, 3, 4) >> 产生的随机数在0~1之间,要产生其他区间的数据,必须进行额外的变换 >> ? 如何产生[a, b)之间的数? 2.1.2.5.2 正态分布 randn >> clear >> A = randn(3) >> B = randn(3, 4) >> C = randn(2, 3, 4) >> NOTE: randn产生的是标准正态分布,要产生均值为mu, 标准差为sigma的正态分布矩阵,可采用 A = mu + sigma * rand(N1, N2, ..., Nk)。如产生均值为1,方差为4的3*4的正态分布的矩阵,可采用 >> D = 1 + 2*randn(3, 4) 2.1.2.5.3 其他分布 random('name', P1, P2, ..., Pk) >> name 的取值 'beta' or 'Beta', 'bino' or 'Binomial', 'chi2' or 'Chisquare', 'exp' or 'Exponential', 'ev' or 'Extreme Value', 'f' or 'F', 'gam' or 'Gamma', 'gev' or 'Generalized Extreme Value', 'gp' or 'Generalized Pareto', 'geo' or 'Geometric', 'hyge' or 'Hypergeometric', 'logn' or 'Lognormal', 'nbin' or 'Negative Binomial', 'ncf' or 'Noncentral F', 'nct' or 'Noncentral t', 'ncx2' or 'Noncentral Chi-square', 'norm' or 'Normal', 'poiss' or 'Poisson', 'rayl' or 'Rayleigh', 't' or 'T', 'unif' or 'Uniform', 'unid' or 'Discrete Uniform', 'wbl' or 'Weibull'. >> 显然,不同的分布需要的参数也不同,如果只需要一个参数,如二项分布'bino', 则需要指定N和p值和需要生成的矩阵的大小,可以采用如下方法生成3*4的N=100,p=0.2的二项分布矩阵: >> A = random('bino', 100, 0.2, 3, 4) >> 或另外一种方法: >> B = random('bino', 100, 0.2, [3 4]) 2.1.2.5 魔方数组 magic(n) >> A = magic(4); B = magic(5); >> A, B, >> sum(A), sum(B), >> sum(A, 2), sum(B')', 2.1.3 在数组编译器中创建 2.2 矩阵下标引用 >> A = [101 102 103 104; 201 202 203 204; 301 302 303 304]; >> disp(A); 2.2.1 单个引用 >> A(1, 1) >> A(1, 2) >> A(3, 3) >> % A(4, 3) -- 输入错误,系统会禁止执行 2.2.2 所有元素作为一个列向量引用 >> A(:) 2.2.3 引用某一行或某一列 >> A(1, :) >> A(3, :) >> A(:, 2) >> A(:, 4) 2.2.4 抽取子矩阵 >> A(1:2, 3:4) >> A(2:end, [2 4]) >> A([1 end], [1 3:4]) >> NOTE: 上面的引用方式称为全下标法,除了全下标法外,还有单下标法和逻辑标识法 >> A>202; s = find(A>202); >> A>202 >> s >> B = A(s); >> B >> NOTE: 单下标法按给定的向量s生成由s指定的一维数组,若s是行/列数组,则A(s)则是相同行列的行/列数组。注意排列次序是先列后行 >> L=A>202; B=A(L); >> A, L, B >> NOTE: 逻辑标识法根据给定的与A同样大小的逻辑数组L中的1元素选出A对应的元素,并按单下标次序排列成长列数组 >> 其他示例 >> clear; >> A = [101 102 103 104; 201 202 203 204; 301 302 303 304] >> D = diag(A) >> diag(D) >> A(1); A(2); A(3); >> A(1), A(2), A(3) >> A([1 2 3 4]); >> A([1 2 3 4]) >> A([1 2 3 4]'); >> A([1 2 3 4]') >> L = A>202 >> A(L) = NaN % 赋值 >> A(:, 4) = Inf % 赋值 >> A(:, 3) = [] % 缩维 2.2.5 数组的其他常用操作 >> reshape -- 在总元素个数不变的情况下,改变数组的行、列数 repmat -- 按指定的行列数“铺放”模块数组,以形成更大的数组 flipud -- 上下交换对称位置的数组元素 fliplr -- 左右交换对称位置的数组元素 rot90 -- 逆时针旋转90° >> clear >> A = 1:12 >> A = reshape(A, 3, 4) >> B = reshape(A, 2, 6) >> C = reshape(B', 4, 3) >> D = repmat(A, 3, 2) >> E = flipud(A) >> F = fliplr(A) >> clear >> A = peaks(20)+10; >> D = repmat(A, 2, 3); % 铺地板模式 >> E = flipud(A); % 上下翻转 >> F = fliplr(A); % 左右翻转 >> G = rot90(A); % 逆时针旋转90° >> H = rot90(A, 2); % 旋转180° >> subplot(2, 3, 1); >> mesh(A); hold on; contour(A); >> title('A=peaks(20)+10'); >> subplot(2, 3, 2); >> mesh(D); hold on; contour(D); >> title('repmat(A, 2, 3)'); >> axis([0 60 0 40]); >> subplot(2, 3, 3); >> mesh(E); hold on; contour(E); >> title('flipud(A)'); >> subplot(2, 3, 4); >> mesh(F); hold on; contour(F); >> title('fliplr(A)'); >> subplot(2, 3, 5); >> mesh(G); hold on; contour(G); >> title('rot90(A)'); >> subplot(2, 3, 6); >> mesh(H); hold on; contour(H); >> title('rot90(A, 2)'); 2.3 矩阵的基本数值运算 2.3.1 数乘 >> clear >> A = magic(4) >> B = 2*A >> C = A*3 >> D = B/2 >> E = 2\B 2.3.2 矩阵的加减法 >> clear >> A = magic(3) >> B = ones(3) >> C = A + B >> D = A - B >> E = A + i*diag(diag(A)) 2.3.3 数组的加减乘除与乘方 >> clear >> A = 1:4 >> B = A.^2 >> C = A.*A >> D = B./A >> clear >> A = magic(5) >> A = A(1:4, 1:4) >> B = magic(4) >> C = A + B >> D = A - B >> E = C./A >> F = A.\C >> G = A.^2 >> H = 2.^A 2.3.4 矩阵的乘除法 >> clear >> A = (1:4)' >> B = ones(4, 1) >> C = A'* B >> D = B'* A >> E = A * B' >> F = B * A' >> G = meshgrid(1:5) >> [X Y] = meshgrid(1:5) >> [U V] = meshgrid(1:5, 1:2:10) >> clear >> A = magic(5) >> A = A(1:4, 1:4) >> B = magic(4) >> C = A*B >> % D = 1/A % 错误, 静止执行 >> D = eye(4)/A >> E = inv(A) % 逆函数 >> F = B/A % F = B * inv(A) >> G = A\B % F = inv(A) * B 2.3.5 方阵的幂次方 >> clear >> A = magic(4) >> B = A^2 >> C = A*A >> D = A.^2 >> E = A.*A >> F = A^(1/2) >> F*F >> G = A^(1/3) >> G*G*G >> abs(ans) >> H = sqrtm(A) >> H-F 2.3.6 转置与共轭转置 >> A = magic(4) + i*pascal(4) >> B = A' >> C = A.' 2.3.7 数组的函数运算 >> sin, cos, tan, cot, sec, csc: a***, ***h, a***h exp, sqrt, pow2, log, log10, log2 ceil, floor, fix, round, mod, rem, abs, angle, real, imag, conj, sign 上述函数都支持数组运算规则,如 >> >> A = pi/8*magic(4) >> B = sin(A) >> C = sign(B) >> D = exp(B) >> 例:根据欧姆定律:R=U/I, 其中R、U、I分布式电阻、电压和电流。在某次测量某电阻的阻抗值的实验中,测得的电压、电流分别如向量Us和Is表示,求该电阻的阻抗值 >> Us = [0.89 1.20 3.09 4.27 3.62 7.71 8.99 7.92 9.70 10.41]; >> Is = [.028 .040 .100 .145 .118 .258 .299 .257 .308 .345]; >> 算法1: >> L = length(Us); >> r = 0; >> for k = 1:L >> r = r + Us(k)/Is(k); >> end >> r = r / L >> 算法2: 向量化程序 >> R = Us./Is >> R = mean(R) % 计算R的期望 2.3.8 数组的关系运算 >> A = magic(4); B = pascal(4); >> C = A>B % >, <, >=, <=, ==, ~= 2.3.9 数组的逻辑运算 >> A = rand(4) > 0.5 >> B = rand(4) > 0.5 >> C = A & B >> D = A | B >> E = ~A >> F = xor(A, B) 2.4 特征参数运算 2.4.1 特征值与特征向量 >> eig | eigs - 计算矩阵的特征值和特征向量 E = eig(X) 命令生成由矩阵X的特征值组成的列向量 [V D] = eig(X) 生成两个矩阵V和D,其中V是以X的特征向量作为列向量组成的矩阵, D是由特征值作为主对角元素构成的对角阵 eigs是使用迭代法求解矩阵的特征值和特征向量 >> X = magic(3) >> A = [1 0 0; 0 0 3; 0 9 0] >> E = eig(X) >> [V D] = eig(X) >> Ea = eigs(A) >> [Va Da] = eigs(A) 2.4.2 矩阵的指数与对数运算 expm >> expm(X) = V*diag(exp(diag(D)))/V 其中 [V D] = eig(X) logm(expm(X)) = X >> X = rand(4) >> Y = expm(X) >> Z = logm(Y) 2.4.3 方阵的逆运算 inv >> A = [1 0 0 0; 1 2 0 0; 2 1 3 0; 1 2 1 4] >> B = inv(A) 2.4.4 方阵的行列式 >> x = det(A) >> y = det(B) >> x*y 2.4.5 矩阵/向量的范数 >> 矩阵的p范数定义为 norm(X, p) = sum(abs(A).^p).^(1/p) >> X = hilb(4) % 希尔伯特矩阵,H(i, j) = 1/(i+j-1) >> norm(X) % X 的2范数 >> norm(X, 2) % 同上 >> norm(X, 1) % 1范数 max(sum(abs(X))) >> norm(X, inf) % 无穷范数 max(sum(abs(X'))) >> norm(X, 'fro') % Frobenius范数,sqrt(sum(diag(A'*A))) >> 2.4.6 条件数 >> cond(X, p) = norm(X, p)*norm(inv(X), p) 判断一个矩阵病态的程度 >> clear; clc >> A = magic(4)+eye(4)*1e-4 >> b1 = ones(4, 1) >> b2 = b1; b2(4) = b2(4) + 1e-4 >> x1 = A\b1 >> x2 = A\b2 >> C = cond(A) % 相当于 cond(A, 2) = norm(A) 2.4.7 矩阵的秩 -- rank(X) >> clear >> T = rand(6) >> rank(T) >> A = magic(6) >> rank(A) >> rank(magic(10)) >> rank(magic(20)) >> X = 2:50; >> for I=1:length(X) >> Y(I) = rank(magic(X(I))); >> end >> plot(X, Y, '.-'); 2.4.9 矩阵的迹 >> 迹:矩阵主对角线上所有元素的和 >> M = magic(5) >> trace(M) >> sum(diag(M)) 2.5 线性代数矩阵的分解运算 2.6 特殊处理函数 2.7 特殊矩阵的生成 2.8 稀疏矩阵的生成
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 环境建筑 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服