如何在 MATLAB 中基于向量创建三角矩阵?

发布于 2024-07-25 06:15:57 字数 484 浏览 4 评论 0原文

假设我有一个像这样的向量:

A = [101:105]

这实际上是:

[ 101, 102, 103, 104, 105 ]

我只想使用向量/矩阵函数和运算符来生成矩阵:

101 102 103 104 105
102 103 104 105 0
103 104 105 0   0
104 105 0   0   0
105 0   0   0   0

或以下矩阵:

101 102 103 104 105
0   101 102 103 104
0   0   101 102 103
0   0   0   101 102
0   0   0   0   101

有人有什么想法吗?

(我在 MATLAB 方面是个新手,但我一直背负着这些东西......)

Let's say I've got a vector like this one:

A = [101:105]

Which is really:

[ 101, 102, 103, 104, 105 ]

And I'd like to use only vector/matrix functions and operators to produces the matrix:

101 102 103 104 105
102 103 104 105 0
103 104 105 0   0
104 105 0   0   0
105 0   0   0   0

or the following matrix:

101 102 103 104 105
0   101 102 103 104
0   0   101 102 103
0   0   0   101 102
0   0   0   0   101

Any ideas anyone?

(I'm very much a novice in MATLAB, but I've been saddled this stuff...)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

倾城花音 2024-08-01 06:15:57

hankel(A) 将为您提供第一个矩阵

triu(toeplitz(A)) 将为您提供第二个矩阵。

——洛伦

hankel(A) will get you the first matrix

triu(toeplitz(A)) will get you the second one.

--Loren

旧瑾黎汐 2024-08-01 06:15:57

最佳解决方案由 洛伦。 还可以使用 SPDIAGS 创建这些矩阵:

vec = 101:105;
A = full(spdiags(repmat(vec,5,1),0:4,5,5));  % The second matrix
B = fliplr(full(spdiags(repmat(fliplr(vec),5,1),0:4,5,5)));  % The first matrix

我记得在发现 Loren 提到的一些内置函数之前,我曾创建过这样的带状矩阵。 它并不像使用它们那么简单和干净,但它确实有效。 =)

The best solutions are listed by Loren. It's also possible to create these matrices using SPDIAGS:

vec = 101:105;
A = full(spdiags(repmat(vec,5,1),0:4,5,5));  % The second matrix
B = fliplr(full(spdiags(repmat(fliplr(vec),5,1),0:4,5,5)));  % The first matrix

I recall creating banded matrices like this before I found out about some of the built-in functions Loren mentioned. It's not nearly as simple and clean as using those, but it worked. =)

明明#如月 2024-08-01 06:15:57

我的方法是创建一个矩阵 A

101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105

然后找到一个矩阵 B,这样当您乘以 A*B 时你会得到你想要的结果。 基本上是先在纸上做线性代数,然后让 Matlab 进行计算。

The way I'd go about it is to create a matrix A:

101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105

And then find a matrix B such that when you multiply A*B you'll get the result you want. Basically do the linear algebra on paper first and then have Matlab do the calculation.

謌踐踏愛綪 2024-08-01 06:15:57

要生成具有这种规则模式的三角矩阵,请使用 toeplitz 函数,例如,

m=toeplitz([1,0,0,0],[1,2,3,4])

对于其他情况,请使用 rot90(m)

For generating such triangular matrices with such a regular pattern, use the toeplitz function, e.g.

m=toeplitz([1,0,0,0],[1,2,3,4])

for the other case, use rot90(m)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文