簡體   English   中英

使用`diag()`命令構造循環矩陣

[英]Using `diag()` Command to Construct Circulant Matrix

問題是:編寫一個MATLAB程序,該程序使用diag命令通過n個循環矩陣生成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 command in MATLAB

(這是我的起點,我在使用diag命令構造矩陣時遇到了麻煩。請幫忙)。

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

for i = 1:n

有趣的是,由於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;

%%// 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
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

最簡單的無循環方法是利用循環矩陣的傅立葉特性並使用FFT:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM