2015-05-03 2 views
0

Я пытаюсь решить проблему Collatz на Matlab. У меня возникают проблемы с составлением моих результатов.MATLAB Collatz plot

a = input('Please enter a value for a:'); 
b = input('Please enter a value for b:'); 
for n = (a:b), 
    count = 0; 
    while n > 1 
     count= count+ 1; 
     if mod(n,2) == 0 
      n = n/2; 
     else 
      n = (3*n+1); 
     end 
     plot (n:count); 
    end 
end 

Я пытаюсь построить значения п и считать (длину последовательности N) между двумя пользовательскими числами вводятся включительно (например, от 1 до 40). Мой график выводится как строка y = x вместо предполагаемого решения.

Спасибо за помощь

noobcodes

+0

Используйте 'держись;' перед циклом for. –

+0

Я попробовал изменить команду сюжета как «plot (n, count, 'r.');». Я даю вывод, но я не уверен, является ли это ожидаемым результатом или нет. –

ответ

1

1) Вы черчение неправильного ряда значений. n: count дает u массив удвоений, идущий от n до count, в нашем случае конечное значение n равно 1, а окончательное значение count равно 8, тогда n: count = [1 2 3 4 5 6 7 8 9] , это x = y функция типа. Я предлагаю, чтобы u сохранил значения n в другом массиве и построил этот массив. Ваш код должен выглядеть следующим образом:

a = input('Please enter a value for a:'); 
b = input('Please enter a value for b:'); 
for n = (a:b), 
    count = 0; 
    while n > 1 
     count= count+ 1; 
     if mod(n,2) == 0 
      n= n/2; 
     else 
      n = (3*n+1); 
     end 
     U(count) =n; 
     plot (U); 
    end 
end 

После того, как я запускаю приведенный выше пример, где а = 1, Ь = 40, я получил участок как Коллатец участки обычно.

Выход:

enter image description here

+0

Спасибо, помощник. Работали, как угощение. – noobcodes