用Matlab生成一些矩阵

有一些确实是要好好想一想才是。

1. 生成 5 阶的单位阵和 8 阶均匀分布的随机矩阵

eye(5)
rand(8)

均匀分布的随机矩阵原来就是最普通的那个用 rand() 生成的矩阵哦。

2. 生成一个列向量  x = [1, 3, 5, 7, 9,  …, 99]

x=[1:2:99]';

先生成一个行向量,再转置。

3. 生成以 x 的前 8 个元素为对角线的矩阵 A

A=diag(x(1:8));

diag() 可以用来创建对角矩阵,也可用来获取矩阵的对角元素。

4. 生成一个与 A 同阶的满足正态分布的随机矩阵 B

B=randn(size(A));

生成满足正态分布的随机矩阵用 randn() 函数。与 A 同阶的矩阵,我们用 size(A) 获取 A 的行数、列数,不管 A 是不是方阵,行数、列数与 A 相同就对了。

5. 计算 A 的转置 与 B 的下三角部分的乘积 C

C=A'*tril(B);

没什么可说的。

6. 删除 C 的第三行和第二列

C(3,:)=[];C(:,2)=[];

也没什么可说的,基本操作。

7. 生成由 B 的第 2、4、5 行和第4、1 列组成的子矩阵 D

D=B([2,4,5],[4,1]);

同上。

8. 建立如下矩阵:

这才是我真正想写的。
一些矩阵

(1)没什么可说的。

A=2004*eye(10)

不知道是走火入魔了还是怎么着,我一开始写成了这样/笑哭:

A=diag(diag(2004*eye(10)))

(2)ones() 生成全是1的矩阵,eye() 生成单位矩阵,两个矩阵相减把对角线上的元素变成0.

A=10*ones(10)-10*eye(10)

(3)先生成一个元素全是1的矩阵,再给对角线上的元素都加上2003.

A=(2004-1)*eye(10)+ones(10)

(4)先生成一个元素都是 -10 的矩阵,再给对角线上的元素都加上20.

A=20*eye(10)+(-10)*ones(10)

(5)先生成一个对角线上的元素构成等差数列、其他元素都是 1 的矩阵,再用 tril() 函数取矩阵的下三角部分(也就是把矩阵的上半部分变成0)

A=tril(([10:10:100]-1).*eye(10)+ones(10))

(6)这个矩阵我是用循环生成的。我还发了条说说:

应该是受C语言的影响太深了,我可以用循环生成这个矩阵,但我今天想了半个小时,也没想到怎么通过基本的矩阵运算把这个矩阵表示出来/笑哭 明天再想想/笑哭/笑哭

不想去网上搜答案,你知道也不用告诉我。
format rat
A=zeros(10);
for m=1:10
for n=1:10
A(m,n)=(m+n)\1;
end
end
A

(7)先生成一个“每行元素相同”、“行与行之间呈等差数列”的矩阵,用 diag() 取对角线向上平移1个元素后线上的元素,再次使用 diag(),生成一个这些元素位置不变,其他位置元素均为0的矩阵,再加上一个对角线上的元素均为2004的对角矩阵。

A=2004*eye(5)+diag(diag([20:10:60]'.*ones(5),1),1)

不知道什么时候看错了,我一开始写的是:

A=2004*eye(5)+triu([20:10:60]'.*ones(5),1);

刚才才发现/笑哭


不知道什么原因,代码粘贴过来后,星号*会消失,我又给手动加上了。

留下评论

电子邮件地址不会被公开。 必填项已用*标注