Создать матрицу из N-4 строк и N-2 столбцов - PullRequest
1 голос
/ 08 апреля 2020

Не могли бы вы прокомментировать этот вопрос? Мне нужно создать матрицу в 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

Большое спасибо

Ответы [ 3 ]

1 голос
/ 08 апреля 2020

То, что вы пытаетесь создать, это матрица Теплица . Если вы знаете имя, это просто.

%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
0 голосов
/ 08 апреля 2020

попробуйте эту полностью векторизованную функцию:

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).';
0 голосов
/ 08 апреля 2020

Вы можете решить, используя функцию единичной матрицы 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

, который выдает тот же результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...