добро пожаловать в StackOverflow.
Проблема в вашем коде заключается в том, что pyth
содержит только 3 значения, [a, b, c]
.Функция unique()
, используемая в следующей строке, в этом случае не действует, поскольку в pyth
содержится только одна строка.Другая проблема заключается в том, что значения idx
и out
рассчитываются в каждом цикле цикла.Это должно быть размещено после петель.Пример кода может выглядеть следующим образом:
pyth = zeros(0,3);
for a=1:50
for b=1:50
c = sqrt(a^2 + b^2);
if c<=50 && rem(c,1)==0
abc_sorted = sort([a,b,c]);
pyth = [pyth; abc_sorted];
end
end
end
% do final sorting outside of the loop
[~,idx] = unique(pyth, 'rows', 'stable');
out = pyth(idx,:);
disp(out)
несколько других советов по написанию кода MATLAB:
- Вам не нужно заканчивать
for
или if
/ else
содержит точку с запятой else
заявления охватывают любой другой случай, не включенный ранее, поэтому они не нуждаются в условии.
Некоторые рекомендации по производительности:
- Из-за симметрии
a
и b
(a ^ 2 + b ^ 2 = b ^ 2 + a ^ 2) цикл b может быть ограничен до for b=1:a
,что примерно сэкономит вам половину циклов цикла. - , если вы используете
&&
для объединения скалярных значений, вторая часть не оценивается, если первая часть уже дает сбой ( source ).
С уважением,
Крис