2010-10-27 3 views
-4

Я пытаюсь найти сумму следующей матрицы в matlab [1 1 1 1; 1 2 1 2; 4 5 3 2; 1 3 2 4; 10 11 1 1; 90 9 2 1]MATLAB Matrix Sum, используя Nested For

Я пытаюсь сделать это с помощью вложенных операторов, но я продолжаю получать ошибки. пожалуйста, помогите

должны использовать вложенные для

Моего кода:

A = [1 1 1 1; 1 2 1 2; 4 5 3 2; 1 3 2 4; 10 11 1 1; 90 9 2 1]; 
for j=1:4, 
    for i=1:6, 
    sum = A(j,:)+A(j+1,:)+A(j+2,:) 
    end 
end 
+0

Покажите нам код пожалуйста. –

+0

A = [1 1 1 1; 1 2 1 2; 4 5 3 2; 1 3 2 4; 10 11 1 1; 90 9 2 1]; при = 1: 4, для I = J: 6, сумма = А (у,:) + A (J + 1:) + A (J + 2, :) конец конец – Alberto

+0

Почему ваш цикл 'i' переходит из' j: 6', а не '1: 6'? Вы заметили, что 'sum' пересчитывается на каждую итерацию (переписывая значение из предыдущей итерации)? –

ответ

0

Почему вы не просто использовать sum()?

+0

не разрешено для этой проблемы – Alberto

+0

@Alberto: Хорошо! Затем отредактируйте свой вопрос и добавьте этот факт. Кроме того, пожалуйста, пометьте свой вопрос как «домашнее задание». –

+0

Извините ... исправлено это – Alberto

2

Вам нужно будет изменить свой код от этого:

A = [1 1 1 1; 1 2 1 2; 4 5 3 2; 1 3 2 4; 10 11 1 1; 90 9 2 1]; 
for j=1:4, 
    for i=j:6, 
     sum = A(j,:)+A(j+1,:)+A(j+2,:); 
    end 
end 

к этому:

A = [1 1 1 1; 1 2 1 2; 4 5 3 2; 1 3 2 4; 10 11 1 1; 90 9 2 1]; 
sum = 0; 
for j=1:4, 
    for i=1:6, 
     sum = sum + A(j,i); 
    end 
end 

Примечание различные модификации:

  1. Initialize sum=0. Если вы используете это в интерпретаторе, вы начнете с предыдущего результата, гарантируя, что вы не получите правильный результат.
  2. Совокупность значений. Если вы назначаете сумму на каждой итерации, вы выбросите результат других итераций.
  3. Нет смысла писать внешний контур, если вы собираетесь с жестким кодом j+1, j+2 и т. Д. Во внутреннем цикле.
  4. Зафиксируйте внутренний контур так, чтобы он начинал выполнять итерацию в 1.
  5. Подавление вывода во внутреннем цикле с использованием точки с запятой для получения чистого результата.
+0

А, я вижу, вы просто исправили код :) Ну, Альберто может игнорировать мой ответ. –

+0

Жаль об этом! Я нахожу его более читаемым с комментариями вне блока кода, хотя :-) –

+0

он работал благодаря большому количеству! – Alberto

1

Я не буду отправлять исправленный код, я вместо того, чтобы добавлять комментарии к коду вы публикуемый:

A = [1 1 1 1; 1 2 1 2; 4 5 3 2; 1 3 2 4; 10 11 1 1; 90 9 2 1]; 
% you are missing sum initialization here - you should first set sum to zero 
for j=1:4, % there is no comma needed at the end 
    for i=j:6, % you want to iterate all the rows, from 1 to 6 
    sum = A(j,:)+A(j+1,:)+A(j+2,:) % you should be adding to the sum - i.e sum is sum + current field A(j, i) 
    end 
end