Как насчет этого с помощью spdiags:
B_size = 99;
A_size = B_size^2;
v = ones(A_size,1);
D = [v*-1, v*-1, v*4, v*-1, v*-1];
A = spdiags(D, [-B_size, -1, 0, 1, B_size], A_size, A_size);
Вот пример вывода для B_size = 4
:
D =
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
-1 -1 4 -1 -1
Колонки каждый представляет диагональ в нашей разреженной матрицей. Второй параметр [-B_size -1 0 1 B_size]
в вызове spdiags
указывает, для какой диагонали поставить каждый столбец (отрицательные числа ниже основной диагонали, положительные числа выше). Ненужные значения из векторов столбцов (нижние значения для отрицательных диагоналей, верхние значения для положительных диагоналей) игнорируются.
A
является разреженной матрицей, поэтому я покажу full(A)
, так что вы можете увидеть, что это на самом деле выглядит следующим образом:
>> full(A)
ans =
4 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
-1 4 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0
0 -1 4 -1 0 0 -1 0 0 0 0 0 0 0 0 0
0 0 -1 4 -1 0 0 -1 0 0 0 0 0 0 0 0
-1 0 0 -1 4 -1 0 0 -1 0 0 0 0 0 0 0
0 -1 0 0 -1 4 -1 0 0 -1 0 0 0 0 0 0
0 0 -1 0 0 -1 4 -1 0 0 -1 0 0 0 0 0
0 0 0 -1 0 0 -1 4 -1 0 0 -1 0 0 0 0
0 0 0 0 -1 0 0 -1 4 -1 0 0 -1 0 0 0
0 0 0 0 0 -1 0 0 -1 4 -1 0 0 -1 0 0
0 0 0 0 0 0 -1 0 0 -1 4 -1 0 0 -1 0
0 0 0 0 0 0 0 -1 0 0 -1 4 -1 0 0 -1
0 0 0 0 0 0 0 0 -1 0 0 -1 4 -1 0 0
0 0 0 0 0 0 0 0 0 -1 0 0 -1 4 -1 0
0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 4 -1
0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 4
магазин как разреженная матрица https://uk.mathworks.com/help/ matlab/ref/sparse.html (если у вас есть достаточно новая версия) – Richard
@ Richard «Введена перед R2006a» - Думаю, не большая опасность не иметь достаточно новой версии. – beaker
@ Richard Редкие матрицы были введены в MATLAB около версии 7.0 (около 2004 года). Версии MATLAB этого старого не могут работать в большинстве операционных систем в настоящее время, поэтому можно с уверенностью сказать, что любой текущий пользователь MATLAB будет иметь версию, которая старше 7.0. – rayryeng