首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MATLAB中手工建立toeplitz矩阵

如何在MATLAB中手工建立toeplitz矩阵
EN

Stack Overflow用户
提问于 2020-08-14 17:05:37
回答 3查看 182关注 0票数 0

我需要在MATLAB中构建一个名为H的toeplitz矩阵,其中H的大小为256 x 256,来自大小为64 x 1的向量h。我需要用Hl-th element列的H-th element行填充矩阵H,如下所示:

H(l,p) = h(l-p) if 0 <= (l-p) =< 64。否则,返回H(l,p)=0;

我编写的代码如下:

代码语言:javascript
复制
h = randn(64,1); 

H = zeros(256,256); 
for l= 1:256
    for p = 1 : 256 
        if (l-p <= 64 && l-p >= 0)  
            H(l,p) = h(l-p); 
        end 
    end 
end

但是,我认为代码中有一个错误,因为它没有给我预期的结果。

如何获得toeplitz矩阵?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-14 17:16:36

l-p=0出现了一个问题,因为h(0)会调用h的第0个元素,而且由于MATLAB使用从1开始的索引,所以会崩溃。只需删除检查中的等号:

代码语言:javascript
复制
h = randn(64,1); 

H = zeros(256,256); 
for l= 1:256
    for p = 1 : 256 
        if (l-p <= 64 && l-p > 0)  % Removed the = sign
            H(l,p) = h(l-p); 
        end 
    end 
end
票数 3
EN

Stack Overflow用户

发布于 2020-08-14 17:14:22

您可以只使用toeplitz

代码语言:javascript
复制
H = toeplitz(h_extended)

其中使用0h的大小从64扩展到256。

票数 2
EN

Stack Overflow用户

发布于 2020-08-14 22:29:38

下面是一种手动使用vectorizationimplicit expansion而不是循环的方法:

代码语言:javascript
复制
t = 1:numel(h);
H = h(abs(t-t.')+1); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63409806

复制
相关文章

相似问题

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