Проблема с созданием одной строки матрицы - PullRequest
1 голос
/ 08 января 2020

У меня это для l oop, который создает матрицу из 1825 столбцов. Эта матрица содержит значение в диапазоне от 0 до 1 с шагом 0,013888888889 и шагом с шагом 25 (поэтому после 25 нулей оно достигает 0,013888888889, а затем после 25 раз снова увеличивается). Моя проблема в том, что последние 25 столбцов, содержащих 1, не созданы. Вместо матрицы с 1x1825 я получаю матрицу 1x1800 без 1 с. Это код:

coutput=repmat([0], 1,25);
for n=0.013888888889:0.013888888889:1 

    coutput = [coutput repmat([n],1,25)];

end

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Проблема связана с вашей переменной l oop:

n = 0.013888888889:0.013888888889:1 

Давайте сравним:

temp = 0:0.013888888889:1;
temp([1 2 end-1 end])

n = 72;
temp = linspace(0, 1, n+1);
temp([1 2 end-1 end])

Мы получаем:

ans =
   0.00000   0.01389   0.97222   0.98611

ans =
   0.00000   0.01389   0.98611   1.00000

Используя ваше решение мы получаем вектор с размерами 1x72, тогда как «более точная» версия дает вектор с размерами 1x73. Итак, в конце концов, это проблема округления.

Оставшуюся часть можно упростить, используя repmat и reshape:

k = 25;
out = reshape(repmat(temp, k, 1), 1, (n+1) * k)

( Вывод здесь опущен.)

Надеюсь, это поможет!

1 голос
/ 08 января 2020

Как указано выше HansHirse, это проблема округления. Вы не должны использовать значения с плавающей точкой в ​​качестве индексов l oop.

Простой и правильный способ реализации вашего l oop заключается в следующем:


for n=1:72
   n = ii/72;
   %...
end

Но, конечно, этот код было бы намного эффективнее использовать решение Ханса repmat + reshape, потому что оно избегает многократного перераспределения выходного массива внутри l oop.

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