你对这个问题有什么意见吗?我需要在Matlab中创建一个矩阵,如下所示:
对于给定的N和三个值a、b和c。我想创建一个(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非常感谢
发布于 2020-04-08 16:00:17
您尝试创建的是一个toeplitz matrix。一个你知道名字的,它很简单。
%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发布于 2020-04-08 07:35:40
您可以使用单位矩阵函数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你也可以让它更通用一点,让标量a,b和c包含在一个向量中:
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这会产生相同的输出。
发布于 2020-04-08 10:55:39
试试这个完全矢量化的函数:
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).';https://stackoverflow.com/questions/61090890
复制相似问题