2013-05-11 1 views
0

Я пытаюсь создать вектор-столбец в matlab на основе двух 64x64-двойных векторов и выполнить итерацию каждого элемента в векторе и применить уравнение для создания нового вектора, который затем будет применен. Вот мой кодПоддержка вектора Matlab

for i=1:4096, 

vector1 = v1(:); %instead of copying the vector this created a 4096X1 double rather than 64X64 for some reason, same with vector2 
vector2 = v1(:); 
vector1(i) = vector1(i) + 0.05*vector2(i); %for each element in vector1 apply equation to update values. 
end 
v1(:) = vector1(:); % replace v1 with the new vector1 created on the equation applied 

Насколько я вижу, что это должно работать, однако вместо того, чтобы создать 64 * 64 вектор создается вектор 1 * 4096, и я получаю ошибку рассогласования, поскольку векторы не совпадают ,

ответ

0

Результирующий вектор является вектором столбца, потому что это результат linear indexing (индексирование только одним индексом). Также стоит отметить, что преобразование в вектор-столбец избыточно, линейное индексирование делает это неявно.

Если вы хотите, чтобы конечный результат представляет собой матрицу 64x64, инициализацию результирующий массив соответствующего размера, чтобы начать с:

result = zeros(size(v1)); %// Same dimensions as v1, i.e 64-by-64 

и пусть MATLAB автоматически преобразовывать линейные индексы в соответствующей позиции в результирующем матрице , Кроме того, вы можете использовать reshape, например:

result = reshape(v1, 64, 64); 

Кроме того, я считаю, что логика вашего цикла является действительно нарушена более чем в одном месте:

  1. Вы перезапись значения vector1 и vector2 на каждой итерации. Поместите их строки инициализации до цикл.
  2. Вы назначаете неправильные значения в vector2 ... не должно быть vector = v2(:) или что-то в этом роде?

Окончательный цикл должен выглядеть следующим образом:

result = zeros(size(v1)); 
for k = 1:numel(v1), 
    result(k) = v1(k) + 0.05 * v2(k); 
end 
+0

Да, я согласен, что ваш путь проще, однако это должно быть сделано с использованием итераций по какой-то причине. Значение v2 действительно записано здесь неправильно, так как для вектора он создает вектор 1 * 4096 по какой-либо причине вместо 64 * 64 – user1978826

0
vector1 = v1; 
for i=1:64 
    for j = 1:64 
     vector1(i, j) = vector1(i, j) + 0.05*v1(i, j); 
    end 
end 
v1 = vector1;  % or v1 = vector1(:, :); if you prefer 

Нет Vector2 матрица не требуется для этого процесса.

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

  • Нет связанных вопросов^_^