MATLAB矩阵及其运算
来源:互联网 发布:淘宝优惠券怎么做兼职 编辑:程序博客网 时间:2024/05/17 23:53
1. 矩阵的创建
创建矩阵有如下4种方法:直接输入法、载入外部数据法、利用 MATLAB 内置函数、利用 M 文件编辑器。
1.1 直接输入法
最简单地建立矩阵的方法是从键盘直接输入矩阵的元素——将矩阵的元素用方括号括起来,按矩阵行的顺序输入个元素,同一行的个元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。如果只输入一行则形成一个数组(又称作向量)。矩阵或数组中的元素可以是任何 MATLAB 表达式,可以是实数,也可以是复数。
在此方法下创建矩阵要注意以下规则:
- 矩阵元素必须在”[ ]”内;
- 矩阵同行元素之间用空格(或“,”)隔开;
- 矩阵的行与列之间用“;”隔开。
A=[1 2 3;4 5 6;7 8 9] B=[1,2,3;4,5,6;7,8,9]
1.2 载入外部数据
在 MATLAB 中,load 函数用于载入生成的包含矩阵的二进制文件,或者读取包含数值数据的文本文件。文本文件中的数字应排列成矩形,每行只能包含矩阵的一行元素,元素与元素之间用空格分隔,各行元素的个数必须相等。
例如,创建一个包含下列数字的文本文件:
1 2 3 4 5 6 7 8
把该文件命名为 data.txt,并保存在 MATLAB 的目录下。如需读取该文件,可在命令行窗口输入:
>>load data.txt
系统将读取该文件并创建一个变量 data,包含上面的这个矩阵。在 MATLAB 工作空间中可以查看这个变量。
% 读取数据 trees load trees % 读取二进制数据文件 image(X) % 以图像的形式显示数组 X colormap(map) % 设置颜色查找表为 map
运行结果为:
1.3 利用 MATLAB 内置函数
在 MATLAB 中,系统内置特殊函数可以用于创建矩阵,通过这些函数,可以很方便地得到想要的特殊矩阵。
利用几个内置函数来创建矩阵。
Z1=zeros(5,4) % 产生 5*4 全为 0 的矩阵 Z2=ones(5,4) % 产生 5*4 全为 1 的矩阵 Z3=eye(5,4) % 产生 5*4 的单位矩阵 Z4=rand(5,4) % 产生 5*4 的在(0,1)区间均匀分布的随机阵 Z5=randn(5,4) % 产生 5*4 的均值为0,方差为1的标准正态分布随机矩阵 Z6=hilb(3) % 产生 3 维的 Hilbert 阵 Z7=magic(3) % 产生 3 阶的魔方阵
1.4 利用 M 文件编辑器
此方法需要用 MATLAB 自带的文件编辑器或其他文件编辑器来创建一个文件,代码和要在 MATLAB 命令行窗口中输入的命令一样,然后以 .m 格式保存该文件。
如:A=[23 22 56;42 5 80;7 76 89],把输入的内容以纯文本方式存盘(设该文件名为 matrix.m)。
% 在MATLAB 命令行窗口中输入 matrix >>matrix A = 12 22 56 42 5 80 7 76 89
即运行该 M 文件,就会自动建立一个名为 matrix 的矩阵。
2. 矩阵的寻访
在 MATLAB 中,矩阵的寻访主要有下标元素访问、单元素访问和多元素访问,下面将进行介绍。
2.1 下标元素访问
- “双下标”表示法:即分别表示行与列,矩阵中的元素都有对应的“第几行,第几列”。
“单下标”表示法:一种线性下标表示法,系统默认矩阵的所有元素按照从上到下,行从左到右排成一列,只需要使用一个下标索引就可以定位矩阵中的任何一个元素。
MATLAB 还提供了用户下标计算函数,sub2ind 用于双下标计算单下标,ind2sub 用于单下标计算双下标,以方便不同下标之间的转换。
clear all >> A=[2 5 9 20;3 6 7 22;7 8 9 23;5 8 24 25] A = 2 5 9 20 3 6 7 22 7 8 9 23 5 8 24 25 >> A(4,3) % 使用双下标访问 A 矩阵的第 4 行第 3 列 ans = 24 >> A(12) % 使用单下标访问 A 矩阵的第 4 行第 3 列 ans = 24 >> sub2ind(size(A),3,4) % 双下标转换为单下标 ans = 15 >> A(15) ans = 23
2.2 单元素访问
在 MATLAB 中,必须指定两个参数,即其所在行数和列数,才能访问一个矩阵中的单个元素。例如,访问矩阵 M 中的任何一个元素。
M =( row, column ): 其中 row 和 column 分别代表行数和列数。
% 对矩阵 M 的单元素进行访问 >> M=randn(3) >> x=M(1,2) >> y=M(2,3) >> z=M(3,3) M = 0.5377 0.8622 -0.4336 1.8339 0.3188 0.3426 -2.2588 -1.3077 3.5784 x = 0.8622 y = 0.3426 z = 3.5784
2.3 多元素访问
矩阵多元素的访问,包括访问该矩阵的某一行或某一列的若干元素、整行或整列元素、若干行或若干列的元素以及矩阵所有元素等。
- A( e1:e2:e3):表示取数组或者矩阵 A 的第 e1 元素开始每隔 e2 步长一直到 e3 的所有元素;
- A( [m n l] ):表示取数组或矩阵 A 中的第 m,n,l 个元素;
- A( : , j ):表示取 A 矩阵的第 j 列全部元素;
- A( i , : ):表示 A 矩阵第 i 行的全部元素;
- A( i : i+m , : ):表示取 A 矩阵第 i~i+m 行的全部元素;
- A( : , k : k+m ):表示取 A 矩阵第 k~k+m 列的全部元素;
- A( i : i+m , k : k+m ):表示取 A 矩阵第 i~i+m 行内,并在第 k~k+m 列中的所有元素;
- 还可利用一般向量和 end 运算符来表示矩阵下标,从而获得子矩阵。end 表示某一维的末尾元素下标。
% 对创建的矩阵进行多元素访问 M=randn(4) M(1,:) % 访问第一行所有元素 M(1:3,:) % 访问 1~3 行所有元素 M(:,2) % 访问第 2 列所有元素 M(:) % 访问所有元素
3. 矩阵的拼接
矩阵的拼接有按照水平方向拼接和按照垂直方向拼接两种。例如,对矩阵 A 和 B 进行拼接,拼接表达式分别如下:
水平方向拼接:C = [ A B ] 或 C= [ A, B ]
垂直方向拼接:C= [ A ; B]
【注意】:矩阵拼接时,必须满足原始矩阵维数对应,如果不满足条件,则拼接不会成功,即出错。
clear all; A=magic(3) B=eye(3) E=[A,B] %按水平方向拼接 F=[A;B] %按垂直方向拼接
在 MATLAB 中,出来使用矩阵拼接符[ ],还可以使用矩阵拼接函数。
cat 函数用于按指定的方向连接矩阵。其调用格式为
C= cat ( dim, A, B ):按照 dim 指定的方向连接矩阵 A 与 B,构造出矩阵 C。
C= cat ( dim, A1, A2, A3, A4,… ): A1, A2, A3, A4,… 表示被连接的多个矩阵。
>> clear all; >> A1=[2 2;3 4] >> A2=[5 6;7 8]; >> C1=cat(1,A1,A2) %垂直拼接 >> C2=cat(2,A1,A2) %水平拼接 >> C3=cat(3,A1,A2) %三维数组
repmat 函数用于通过输入矩阵的备份拼接出一个大矩阵。调用格式如下:
B= repmat ( A, m, n) 或 B=repmat ( A, [ m, n ]):repmat 函数建立一个大矩阵 B,B 是由矩阵 A 的备份拼接而成的,纵向摆 m 个备份,横向摆 n 个备份,B 中总共包含 m*n 个A。A 为被用来进行复制的矩阵;m 为纵向上复制 A 的次数;n 为横向上复制 A 的次数。
B=repmat(A , [ m n p … ]):repmat 函数生成一个多维(m*n*p*… ) 数组 B,B 由矩阵 A 的m*n*p*… 个备份在多个方向拼接而成。
N=repmat(1,[3,3]) N = 1 1 1 1 1 1 1 1 1
horzcat 函数用于对矩阵进行水平拼接。其调用格式如下:
C=horzcat ( A1, A2, … ):水平连接多个矩阵 A1,A2,… ,参数列表中的所由矩阵都必须有相同的行数。
horzcat 函数连接 n 维数组是沿第二维(即行)的方向,因此被连接数组的第一维和其他维的大小必须匹配。
clear all A=magic(5); A(4:5,:)=[] B=magic(3)*1000 C=horzcat(A,B)
vertcat 函数用于垂直连接矩阵。其调用格式如下:
C=vertcat ( A1, A2, … ):用于垂直连接多个矩阵 A1,A2,…,参数列表中的所有矩阵都必须有相同的列数。该函数连接 n 维数组是沿第一维(即列)的方向。
clear all; A=magic(5); A(:,4:5)=[] B=magic(3)*1000 C=vertcat(A,B)
blkdiag 函数用于通过输入的矩阵构造一个块对角矩阵。其调用格式如下:
T=blkdiag(A,B,C,D,…):blkdiag 函数用输入的矩阵 A,B,C,D,…构造一个块对角矩阵 T。
clear all; A=eye(2); B=ones(2,2); C=[1 2;3 4;5 6]; D=magic(3); T=blkdiag(A,B,C,D) T = 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 3 4 0 0 0 0 0 0 0 5 6 0 0 0 0 0 0 0 0 0 8 1 6 0 0 0 0 0 0 3 5 7 0 0 0 0 0 0 4 9 2
- MATLAB矩阵及其运算
- MATLAB 02-矩阵及其运算
- MATLAB中矩阵及其运算
- matlab笔记(2)----矩阵及其运算
- MATLAB程序设计教程(2)——MATLAB矩阵及其运算
- 矩阵及其运算
- 线性代数 矩阵及其运算
- 矩阵及其运算
- 矩阵及其基本运算
- 矩阵分块及其运算
- matlab矩阵运算
- matlab 向量/矩阵运算
- Matlab 矩阵运算
- matlab矩阵运算
- Matlab 矩阵运算
- Matlab中矩阵运算
- matlab 矩阵基础运算
- Matlab中的矩阵运算
- Java线程池的那些事
- iOS多线程编程之NSOperation
- [PHP实例] 使用PHPZip解压缩文件
- iOS中的initialize与load两个类方法简单理解
- UITextField的总结
- MATLAB矩阵及其运算
- Linux常用命令大全
- centos 安装jdk
- 隐藏ion-nav-back-button的文字
- 继承虚函数&数组名做参数
- 线性布局案例(2)
- NDK开发之c++调用java
- 强化学习向光连接资料
- 【Spring】spring-mvc hibernate druid jdbc等数据源事务配置详解(解决注解事务不生效问题)