gpt4 book ai didi

Matlab:创建具有重复值和交替值的带矩阵

转载 作者:行者123 更新时间:2023-12-02 09:20:51 25 4
gpt4 key购买 nike

假设我有 7 个值:a、b、c、d、e、fg

我想用这种方式构造一个 m x n 矩阵:

[ a b c d 0 0 0 0 . . . .
[ b e f g 0 0 0 0 . . . .
[ c f a b c d 0 0 . . . .
[ d g b e f g 0 0 . . . .
[ 0 0 c f a b c d 0 0 . .
[ 0 0 d g b e f g 0 0 . .
[ . . 0 0 c f a b c d . .
[ . . 0 0 d g b e f g . .

等等……

因此,所需的矩阵是对称的。值 ae 在主对角线上交替出现;值 bf 在第一个上对角线上交替出现;值 cg 在第二个上对角线上交替出现;值 d0 在第 3 个上对角线上交替出现。我希望能够使用 m x n 参数指定矩阵大小。

我过去常常使用 Mathematica 中的 SparseArrayBand 函数轻松完成此操作,但我在 Matlab 中找不到等效函数。有没有一种有效的方法可以在 Matlab 中构造这种矩阵?

最佳答案

您可以使用 spdiags在稀疏矩阵中指定上对角线,然后添加严格上三角部分的转置以实现精确对称:

>> n  = 6;
>> a = 1;b = 2;c = 3;d = 4;e = 5;f = 6;g = 7;
>> n = 6;
>> A = spdiags(repmat([[a;e] , [f;b] , [c;g] , [0;d]],n/2,1),0:3,n,n);
>> A = A + triu(A,1).';
>> issymmetric(A)
ans =
1
>> full(A)
ans =
1 2 3 4 0 0
2 5 6 7 0 0
3 6 1 2 3 4
4 7 2 5 6 7
0 0 3 6 1 2
0 0 4 7 2 5

您可能会注意到我翻转了 b/f0/d 来调整填充行为;可能有更好的方法来做到这一点。


对于维数可能为奇数的非方阵,我将构建最小大小的方阵稀疏矩阵,将实际矩阵作为子矩阵,并在末尾屏蔽掉不需要的部分:

>> m = 13;
>> n = 6;
>> p = max([m,n]);
>> p = p + mod(p,2); % added to make p even.
>> A = spdiags(repmat([[a;e] , [f;b] , [c;g] , [0;d]],p/2,1),0:3,p,p);
>> A = A + triu(A,1).';
>> A = A(1:m,1:n);
>> full(A)
ans =
1 2 3 4 0 0
2 5 6 7 0 0
3 6 1 2 3 4
4 7 2 5 6 7
0 0 3 6 1 2
0 0 4 7 2 5
0 0 0 0 3 6
0 0 0 0 4 7
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

构建起来效率有点低,但简单直接。

关于Matlab:创建具有重复值和交替值的带矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42730129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com