MATLAB Collat​​z 图

MATLAB Collatz plot

我正在尝试在 Matlab 上解决 Collat​​z 问题。我在绘制结果时遇到问题。

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

我正在尝试绘制两个用户输入的数字(例如从 1 到 40)之间的 n 值和计数(n 序列的长度)。我的图表显示为一条线 y = x 而不是预期的解决方案。

感谢帮助

菜鸟代码

1) 您正在绘制错误的值系列。 n:count 给你一个从 n 到 count 的双精度数组,在我们的例子中,n 的最终值为 1,count 的最终值为 8,那么 n:count = [ 1 2 3 4 5 6 7 8 9 ] ,这是类似 x=y 的函数。我建议您将 n 的值存储在不同的 Array 中,然后绘制该数组。您的代码应如下所示:

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

在我 运行 上面的例子中 a=1 和 b=40 之后,我得到了一个像 Collat​​z 图通常那样的图。

输出:

您覆盖了 FOR 循环中的 U,它没有显示正确的 Collat​​z 序列。试试下面的代码:

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
    clear U;
    hold on;
end
hold off;

在我 运行 上面的例子中 a=1 和 b=20 之后,我得到了 20 个不同的 Collat​​z 序列图。

enter image description here