首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建N-4行N-2列的矩阵

创建N-4行N-2列的矩阵
EN

Stack Overflow用户
提问于 2020-04-08 07:14:30
回答 3查看 36关注 0票数 1

你对这个问题有什么意见吗?我需要在Matlab中创建一个矩阵,如下所示:

对于给定的N和三个值abc。我想创建一个(N-4)x(N-2)矩阵,例如N=8

代码语言:javascript
复制
    a     b     c     0     0     0

    0     a     b     c     0     0

    0     0     a     b     c     0

    0     0     0     a     b     c

非常感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-08 16:00:17

您尝试创建的是一个toeplitz matrix。一个你知道名字的,它很简单。

代码语言:javascript
复制
%construct the first row
row=zeros(N-2,1);
row(1:3)=[a,b,c];
%construct the first column
col=zeros(N-4,1);
col(1)=a;
%call the function
toeplitz(col,row)

使用a=4;b=2;c=3;N=8;得到的结果

代码语言:javascript
复制
ans =

     4     2     3     0     0     0
     0     4     2     3     0     0
     0     0     4     2     3     0
     0     0     0     4     2     3
票数 1
EN

Stack Overflow用户

发布于 2020-04-08 07:35:40

您可以使用单位矩阵函数eye()和一些矩阵连接来求解:

代码语言:javascript
复制
N = 8;

a = 1;
b = 2;
c = 3;

a_I = [zeros(N-4, 0), a*eye(N-4), zeros(N-4, 2)];
b_I = [zeros(N-4, 1), b*eye(N-4), zeros(N-4, 1)];
c_I = [zeros(N-4, 2), c*eye(N-4), zeros(N-4, 0)];

X = a_I + b_I + c_I

它会产生输出

代码语言:javascript
复制
X =
     1     2     3     0     0     0
     0     1     2     3     0     0
     0     0     1     2     3     0
     0     0     0     1     2     3

你也可以让它更通用一点,让标量abc包含在一个向量中:

代码语言:javascript
复制
N = 8;

v = [1 2 3];

X = zeros(N-4, N-2);
for ii = 1:length(v)
    X = X + [zeros(N-4, ii-1), v(ii)*eye(N-4), zeros(N-4, length(v)-ii)];
end

这会产生相同的输出。

票数 0
EN

Stack Overflow用户

发布于 2020-04-08 10:55:39

试试这个完全矢量化的函数:

代码语言:javascript
复制
function b=bandmat(a, N, M)
% license: CC-BY
% example: bandmat([1,2,3],4,6)
b=a(:).';
b(M+1)=0;
b=repmat(b,1,N);
b=reshape(b(1:end-N),M,N).';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61090890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档