2015-03-30 2 views
2

Я практикуя Коди Проблема:Создать матрицу A (I, J) = I * J

В тот или иной момент, мы все должны были запоминать скучные раз таблицы. 5 раз 5 - 25. 5 раз 6 30. 30. 12 раз больше, чем вы думаете.

С MATLAB, таблицы времени должны быть легкими! Напишите функцию, которая выводит таблицы времени до требуемого размера.

Я решил это с помощью приведенного ниже кода.

function m = timestables(n) 
for i =1:n 
    for j = 1:n 
     m(i,j) = i*j; 
    end 
end 
end 

Могу ли я написать без for циклов и улучшить мой счет?

Это может показаться глупым, но это также полезно для моей работы.

+2

Задача вы ссылаетесь заблокирована для людей, которые не работают на вызов Коди/не имеют достаточно высокий счет там. Пожалуйста, обратите внимание на вопрос. –

ответ

5

С ndgrid это непростая задача.

[x,y] = ndgrid(1:n) 
m = x.*y 

В качестве альтернативы использовать bsxfun, возможно быстрое решение, а bsxfun всегда самые быстрый;):

m = bsxfun(@times,1:n,(1:n).') 
+0

Я читал про 'bsxfun', но никогда не использовал его раньше, когда пытался, я отсутствовал' .'', поэтому он дал мне диагональ 1 4 9 16 25. Спасибо! – laureapresa

5

если это минимальная длиной ответа вы после этого, вы можете рассмотреть следующие вопросы:

m = [1:n]'*[1:n]; 

Но я подозреваю, что bsxfun и ndgrid решение thewaywewalk предложено более эффективные в т erms времени вычисления.

5

Проще, чем лучше; умножать векторы:

m = (1:n)'*(1:n); 

Бест,

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