Я пытаюсь создать функцию, которая берет вектор любой длины и использует его записи для генерации матрицы размера mxn, где m и n - произвольные числа. Если матрица имеет большее количество записей, чем исходный вектор, записи должны повторяться. Например, вектор, (1,2,3,4) будет составлять матрицу 3x3 (1,2,3; 4,1,2; 3,4,1).
Пока у меня есть эта функция :
function A = MyMatrix(Vector,m,n)
A = reshape([Vector,Vector(1:(m*n)-length(Vector))],[m,n]);
end
, что в некоторых случаях успешно:
>> m=8;n=5;Vector=(1:20);
>> A = MyMatrix(Vector,m,n)
A =
1 9 17 5 13
2 10 18 6 14
3 11 19 7 15
4 12 20 8 16
5 13 1 9 17
6 14 2 10 18
7 15 3 11 19
8 16 4 12 20
Однако это работает только для значений m и n, которые умножаются на число, меньшее или равное удвоенному числу записей в «Вектор», так что 40 в этом случае. Когда mn больше 40, этот код выдает:
>> m=8;n=6;Vector=(1:20);
>> A = MyMatrix(Vector,m,n)
Index exceeds the number of array elements (20).
Error in MyMatrix (line 3)
A = reshape([Vector,Vector(1:(m*n)-length(Vector))],[m,n]);
Я пытался создать обходной путь, используя такие функции, как repmat
, однако до сих пор я не смог создать матрицу с большей м и н.