创建具有N-4行和N-2列的矩阵

  • 本文关键字:N-2 行和 N-4 创建 matlab
  • 更新时间 :
  • 英文 :


你能对这个问题发表意见吗?我需要在Matlab中创建一个矩阵,如下所述:

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

a     b     c     0     0     0
0     a     b     c     0     0
0     0     a     b     c     0
0     0     0     a     b     c

非常感谢

您试图创建的是toeplitz矩阵。一个你知道的名字,很简单。

%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;结果

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

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

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

产生输出的

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包含在一个向量中:

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

产生相同的输出。

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

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).';

相关内容

  • 没有找到相关文章