用`diag()`命令构造循环矩阵

时间:2014-04-19 19:13:46

标签: matlab matrix linear-algebra

以下是问题:    编写一个MATLAB程序,它使用diag命令生成n个循环矩阵:给定向量v =(v1 v2 v3 .... vn)。循环矩阵的例子:

A = [1 2 3 4 5;
     5 1 2 3 4;
     4 5 1 2 3;
     3 4 5 1 2;
     2 3 4 5 1]

注意连续行的环绕模式 使用diag command in MATLAB

(这是我的开始,我无法使用diag命令构建矩阵。请帮助。)

n = length(v);
a = zeros(n);

for i = 1:n

4 个答案:

答案 0 :(得分:3)

有趣的是,自all the circulant matrices are made diagonal by the DFT起,你也可以做那样的事情

// given vector
v = [1 2 3 4 5];
n = numel(v);
// DFT matrix
F = dftmtx(n);
//circulant matrix
V = (F*diag(fft(v))*F')./n;

答案 1 :(得分:1)

<强>代码

%%// Given vector v
v = [1 2 3 4 5];

%%// Parameters
n = numel(v);
arr1 = [v1(2:end) v1];

%%// Construct circulant matrix
A1 = zeros(n);
for k = -(n-1):n-1
    A1 = A1+ arr1(k+n)*diag(ones(n-abs(k),1),k);
end

答案 2 :(得分:1)

function m = prgrm9( x )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here

m = diag(x(1)* ones(1,length(x)));

for i = 2: length(x)
   m = m + diag(x(i) * ones(1, length(x)-(i-1)),i-1)+ diag(x(i)*ones(1,i-1),i-(length(x)+1));
end

答案 3 :(得分:0)

在没有任何循环的情况下执行此操作的最简单方法是利用循环矩阵的傅立叶属性并使用FFT:

V = ifft( fft( diag( fft(x) ), [], 1 ), [], 2 );