2016-02-23 3 views
1

Я пытаюсь создать массив с числом столбцов, равным выбранному размеру бункера. Я хочу, чтобы каждая строка в массиве использовала значения в t в последовательности. Например, t идет от -4 до 4 с интервалом 0,01 секунды. Если ширина бункера равна 6, я бы хотел, чтобы строка 1 была [-4 -3.99 -3.98 -3.97 -3.96 -3.95], а затем строка 2 была бы [-3.99 -3.98 -3.97 -3.96 -3.95 -3.94] ... и это повторяется до последней строки в момент времени = 4 секунды. Я получил код, начинающий работать, но я только делаю его для строки 364, прежде чем я получу ошибку несоответствия присваивания индексов. Может ли кто-нибудь помочь мне выяснить эту ошибку?Создание увеличивающих ящиков в Matlab

bin_width = 6; 
time_interval = 0.01; 
t = -4:time_interval:4; 
bin_number = bin_width/2; 
t_bin = zeros(length(t),bin_width); 

for n = 1:length(t)-bin_width 
    t_bin(n,:) = [t(n):time_interval: t(n+bin_width-1)]; 
    bin_number = bin_number+1; 
    n = n+1; 
end 

Ошибка я получаю

индексируется Несоответствие размера назначения.

Ошибка Без названия (строка 15)

t_bin(n,:) = [t(n):time_interval: t(n+bin_width-1)]; 
+1

вы хотите последний ряд, чтобы начать или закончить с 4, то есть '[4, 4,01, ...]' или '[... 3,99, 4]' ли? – zeeMonkeez

+0

Для 'n = 364' (а не' 394' ??) каково значение '[t (n): time_interval: t (n + bin_width-1)]'? – Dan

ответ

2

Вы работаете с проблемами с плавающей точкой. в точке выхода из строя

t(n):time_interval: t(n+bin_width-1) 

ans = 

    -0.3600 -0.3500 -0.3400 -0.3300 -0.3200 

, где т (п + bin_width) -1 = -0,3100

Вот работу вокруг.

bin_width = 6; 
time_interval = 0.01; 
t = -4:time_interval:4; 
bin_number = bin_width/2; 
t_bin = zeros(length(t),bin_width); 

for n = 1:length(t)-bin_width 
    t_bin(n,:)=linspace(t(n),t(n+bin_width-1),6) 
end 
+1

Или 't_bin (n, :) = t (n: n + bin_width-1);' – Dan

Смежные вопросы