【MATLAB】矩阵的建立与访问

参考博客:

https://blog.csdn.net/kebu12345678/article/details/80949367

https://blog.csdn.net/cnds123/article/details/99645919

数值数据的输出格式(format)

format命令的格式: format 格式符

注意:format命令只影响数据输出格式 ,而不影响数据的计算和存储。

>> format long 
>>> 50/3 
ans = 16.666666666666668 
>> format 
>>> 50/3 
ans = 
16.6667

一、 MATLAB 函数的调用格式

(1)函数的调用格式为:

函数名(函数自变量的值)

函数在运算时是将函数逐项作用于矩阵 的每个元素上,所以最后运算的结果就 是一个与自变量同型的矩阵。

标量是矩阵的特例

>> A=[4,2;3,6] A = 4     2 3     6 >> B=exp(A) B = 54.5982    7.3891 20.0855  403.4288

常用函数的应用

① 三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以 角度为单位的函数就在函数名后面加“d”,以示区别。

>> sin(pi/2) ans = 1 >> sind(90) ans = 1

② abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。

>> abs(-4) ans = 4 >> abs(3+4i) ans = 5 >> abs('a') ans = 97

③用于取整的函数有fix、floor、ceil、round。

>> round(4.7) ans = 5 >> fix(-3.2) ans = -3 >> floor(3.6) ans = 3 >> ceil(-3.8) ans = -3

round 函数是按照四舍五入的规则来取整。
ceil 是向上取整,取大于等于这个数的第一个整数。
floor 是向下取整,取小于等于这个数的第一个整数。 (floor 天花板)
fix 是固定取靠近0的那个整数,也就是舍去小数取整。

在这里插入图片描述

二、MATLAB矩阵表示及矩阵元素的引用

(1) 利用直接输入法建立矩阵

将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔

>> A=[1,2,3;4,5,6;7,8,9] 
A = 
	1     2     3 
	4     5     6 
	7     8     9
(2) 利用已建好的矩阵建立更大的矩阵

一个大矩阵可以由已经建立好的小矩阵拼接而成

>> A=[1,2,3;4,5,6;7,8,9]; 
>> B=[-1,-2,-3;-4,-5,-6;-7,-8,-9]; 
>> C=[A,B;B,A] 
C = 1     2     3    -1    -2    -3 
	4     5     6    -4    -5    -6 
	7     8     9    -7    -8    -9 
	-1    -2    -3     1     2     3 
	-4    -5    -6     4     5     6 
	-7    -8    -9     7     8     9
(3) 用实部矩阵和虚部矩阵构成复数矩阵
>>B=[1,2,3;4,5,6];
>>C=[6,7,8;9,10,11];
>>A=B+i*C
A =
	1.0000 + 6.0000i   2.0000 + 7.0000i   3.0000 + 8.0000i
	4.0000 + 9.0000i   5.0000 +10.0000i   6.0000 +11.0000i
(4) 冒号表达式

在这里插入图片描述

在这里插入图片描述

冒号表达式:

起始:[步长:]终止 

生成行向量,省略步长,则默认为1

等价于linspace (a,b,n) 函数,此matlab函数返回a与b之间均匀间隔点的n个元素的行向量,当n省略时,生成100个。

阅读文献时请注意:矩阵中行列的意思,大陆将水平(横)的称行,垂直(竖)的称列,但台湾的行和列与大陆恰好相反。即大陆把 row 叫行,把 column 叫列,台湾把 row 叫列,把 column 叫行,跟我们大陆正好相反。

符号矩阵的生成

  1. sym函数
    sym函数用于建立单个符号对象,其常用调用格式为:

符号对象名=sym(A)

将由A来建立符号对象。其中,A可以是一个数值常量、数值矩阵或数值表达式(不加单引号),此时符号对象为一个符号常量;A也可以是一个变量名(加单引号),这时符号对象为一个符号变量。

>>sin(sym(pi/3))
>>ans =
		3^(1/2)/2

符号计算的结果是一个精确的数学表达式, 也可以是一个数值

三、matlab中引用元素方法:

①下标。
②索引序号 他们之间的关系A(i,j)的序号为(j-1)×m+i
③布尔(逻辑)法。

矩阵访问一律用(),元胞数组用{}
a(i,j) %第i行第j列队元素
a(:,j) %第j列的所有元素
a(2:end,j) %第j列中第2行到最后一行的元素
a(:,3:5) %第3〜5列的所有元素
a(x) %第x个元素(x为从最左边第1列开始编号,若a为4行5列,则a(10)==a(2,3))

下标法

矩阵同一行元素可用逗号或空格分隔。

在这里插入图片描述

【注】(1)matlab中元素中下标的序号是从一开始的;
(2)matlab中元素按列存储,依次第一列,第二列等。Matlab的存储顺序是8,3,4,1,5,9,6,7,2,如下图所示:

在这里插入图片描述

★下标法引用的例子

A(i,j):其中 i 和 j 可以是一维向量、标量、“:”号 或者 “end”,示例如下:

A(2:3,3👎1)表示引用数组中的2~ 3行,3~1列对应的元素

>>A(2:3,3:-1:1)
 ans =
     7     5     3
     2     9     4

A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒数第n行或列

>>A(:,end)
 ans =
     6
     7
     2

A(1,end-1)表示引用第1行倒数第2个元素

>>A(1,end-1)
 ans =
     1

A(:,[2,3])表示引用第 2、3 列元素

>> A(:,[2,3])
ans =
     1     6
     5     7
     9     2
索引法

A(index):index可以是任意的数组(可以是一维或者二维),index的元素必须是正整数。

ind2sub 和 sub2ind 函数

ind2sub函数
ind2sub和sub2ind这对函数,是互逆的一对函数。ind2sub把数组或者矩阵的线性索引转化为相应的下标;sub2ind则正好相反,将下标转化为线性索引。

下标和索引之间可以通过 ind2sub 和 sub2ind 函数相互转换,具体可以看帮助(在命令行窗口中输入 help 函数名 按下回车键)

[I,J] = ind2sub(siz,IND)
IND = sub2ind(siz,I,J)

二维矩阵: IND = sub2ind(SIZ,I,J)
SIZ是转换矩阵的大小,一般用size函数求得;
I是下标中的行数,J是下标中的列数;
返回值IND是转化后对应的序列号(索引号);
还有使用A(:)就可以将数组A转换为列向量

The ind2sub function determines the equivalent subscript values corresponding to a single index into an array

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

A(😃 将数组A转换为列向量

A(8):表示引用A的第8个元素

>>A(8)
ans =
     7

B=A([1 5 2 2 1 3]):表示依次引用A的第1,5,2,2,1,3个元素,返回与index尺寸相同的数组,也就是说size(B)=size(index)

>>B=A([1 5 2 2 1 3])
B =
     8     5     3     3     8     4

A([2 7 9;1 1 1;8 7 6]):返回的时侯是一个3*3的矩阵

>>A([2 7 9;1 1 1;8 7 6])
ans =
     3     6     2
     8     8     8
     7     6     9
布尔法引用

A(X):X是一个有0和1组成布尔型数据,且size(A)=size(X),对应位置为1则留下该数据,0则去掉,最后按A中的存储顺序,返回一个列向量

假如说A是3*3的数组

A(logical([1 0 0;0 1 0;0 0 1])):表示引用了数组A的对角线元素,注意必须使用logical将0/1数组转换为布尔型

A(x)%引用对应位置为1的数据,返回列向量

x=logical([1 1 0;0 1 1;1 0 1])%将double转化为boolean型数据

x =
3×3 logical 数组

1 1 0

0 1 1

1 0 1

A(x)%引用对应位置为1的数据,返回列向量

ans =
8
4
1
5
7
2

如果想要写一段小程序,只需要在每一句话的后面加一个英文分号,再回车即可。如实现两个二维矩阵相加的小程序a+b。

a=[5 6;7 8];
b=[1 2;3 4];
c=a+b;
disp©

 6     8

10 12

利用空矩阵删除矩阵的元素
>> A=[1,2,3,0,0;7,0,9,2,6;1,4,-1,1,8] 
A = 
	1     2     3     0     0 
	7     0     9     2     6
	1     4    -1     1     8 
>> A(:,[2,4])=[] 
A = 
	1     3     0
	7     9     6 
	1    -1     8
改变矩阵的形状

reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重 新排成m×n的二维矩阵。
注意:reshape函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。

>> x=[23,45,65,34,65,34,98,45,78,65,43,76];
>> y=reshape(x,3,4) 
y =
    23    34    98    65
    45    65    45    43
    65    34    78    76

A(😃 :将矩阵A的每一列元素堆叠起来,成为一个列向量。

A =[-45,65,71;27,35,91] A = -45 65 71 27 35 91 >> B=A(😃 B = -45 27 65 35 71 91
A(:)等价于reshape(A,6,1)。

四、创建数组,添加元素

A=[];
A(1)=2;
A(2)=3;
A(3)=7;

在这里插入图片描述

在这里插入图片描述

添加列向量
A = [1 2; 3 4; 5 10]
A = [A [7;8;9]]
1     2     7
     3     4     8
     5    10     9
A = [1 2; 3 4; 5 10]
A = [A [7;8;9]]
B = [1,2,3;4,5,6;7,8,9]
C = [A B]
     1     2     7     1     2     3
     3     4     8     4     5     6
     5    10     9     7     8     9
A = [1 2; 3 4; 5 10]
A = [A [7;8;9]]
disp(A)
B = [1,2,3;4,5,6;7,8,9]
C = [A B]
D = [A;B]
D =
     1     2     7
     3     4     8
     5    10     9
     1     2     3
     4     5     6
     7     8     9

在这里插入图片描述

五、创建三维数组的三种方法

(1) 使用下标创建三维数组
for i=1:2
    for j=1:2
        for k=1:3
            A(i,j,k)=i+j+k;
        end
    end
end
disp(A)

输出为:

(:,:,1) =

     3     4
     4     5


(:,:,2) =

     4     5
     5     6


(:,:,3) =

     5     6
     6     7
(2) 使用低维数组创建三维数组

可以先创建一个二维数组,然后再通过第三维数组与其关系生成第三维数组;

D2=[1,2,3;4,5,6;7,8,9];

D3(:,:,1)=D2;
D3(:,:,2)=2*D2;
D3(:,:,3)=3*D2;

disp(D3)

输出为:

(:,:,1) =
     1     2     3
     4     5     6
     7     8     9

(:,:,2) =
     2     4     6
     8    10    12
    14    16    18

(:,:,3) =
     3     6     9
    12    15    18
    21    24    27
(3) 使用创建函数创建三维数组

使用 cat 命令来创建高维数组。
cat命令:

C = cat(dim,A1,A2,A3,A4…)

其中dim表示的是创建数组的维度,A1,A2,A3,A4表示的是各维度上的数组。

D2=[1,2,3;4,5,6;7,8,9];
C=cat(3,D2,2*D2,3*D2);

disp(C)

输出为:

(:,:,1) =
     1     2     3
     4     5     6
     7     8     9

(:,:,2) =
     2     4     6
     8    10    12
    14    16    18

(:,:,3) =
     3     6     9
    12    15    18
    21    24    27
特殊矩阵

 通用性的特殊矩阵
 用于专门学科的特殊矩阵

1.通用的特殊矩阵
 zeros函数:产生全0矩阵,即零矩阵。
 ones函数:产生全1矩阵,即幺矩阵。
 eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。
 rand函数:产生(0,1)区间均匀分布的随机矩阵。
 randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。

zeros函数的调用格式:
 zeros(m):产生m×m零矩阵。
 zeros(m,n):产生m×n零矩阵。
 zeros(size(A)):产生与矩阵A同样大小的零矩阵。

>> A=zeros(2,3) 
A = 
	0     0     0 

	0     0     0 
>> zeros(size(reshape(A,3,2))) 
ans = 
	0     0
 	0     0
 	0     0

例1 首先产生5阶两位随机整数矩阵A,再产生均值为0.6、方差为0.1的5阶
正态分布随机矩阵B,最后验证(A+B)I=IA+BI(I为单位矩阵)。
 rand函数:产生(0,1)开区间均匀分布的随机数x。
 fix(a+(b-a+1)*x):产生[a,b]区间上均匀分布的随机整数。
 randn函数:产生均值为0、方差为1的标准正态分布随机数x。
 μ+σx:得到均值为μ、方差为σ2的随机数

size函数

A = [1 2; 3 4; 5 10]
a = size(A)
b = size(a)
disp(A)
disp(a)
disp(b)
A =
     1     2
     3     4
     5    10
a =
     3     2
b =
     1     2

注:size() 函数返回值为矩阵

A = [1 2; 3 4; 5 10]
size(A,1)
size(A,2)
1 表示行数; 2表示列数

如果是向量使用 length
v=[1 23 46 6]
length(v)
length(A)

返回最大维度;最好对向量使用

pwd
显示当前路径

ls
显示当前路径下文件

cd 路径名

mat 文件为二进制文件, 存储空间小

w = randn(1,10000);
hist(w,50)

在这里插入图片描述

参考博客:
https://blog.csdn.net/cnds123/article/details/99645919

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何为xl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值